Java 获取广告客户id时出错

Java 获取广告客户id时出错,java,android,google-analytics,google-play-services,google-analytics-firebase,Java,Android,Google Analytics,Google Play Services,Google Analytics Firebase,我注意到,我的谷歌分析电子商务数据没有通过我的android应用程序正确交付,而所有其他分析数据(屏幕视图、例外情况)都正确发布 我已经打开了日志,但进一步挖掘发现日志中存在一些错误: 获取广告客户id时出错:java.io.IOException: java.util.concurrent.TimeoutException:等待 服务连接 已成功绑定到服务,但从未连接到服务 回拨 我怀疑这些错误是由于某些在播放服务级别不起作用,这就是为什么我要打开一个新线程 由于上述错误出现在点击发送之前的日

我注意到,我的谷歌分析电子商务数据没有通过我的android应用程序正确交付,而所有其他分析数据(屏幕视图、例外情况)都正确发布

我已经打开了日志,但进一步挖掘发现日志中存在一些错误:

获取广告客户id时出错:java.io.IOException: java.util.concurrent.TimeoutException:等待 服务连接

已成功绑定到服务,但从未连接到服务 回拨

我怀疑这些错误是由于某些在播放服务级别不起作用,这就是为什么我要打开一个新线程

由于上述错误出现在点击发送之前的日志中,我的理论是,我的电子商务数据没有正确发布,因为它们。这里有人见过这样的东西吗?我可以尝试什么来修复它

请注意我正在使用(取自build.gradle)

还有gradle插件

classpath 'com.android.tools.build:gradle:2.2.0-beta1'

我修复了这个错误,将它添加到
gradle.build
文件中的
dependencies
块中:

implementation 'com.google.android.gms:play-services-base:16.0.1'

在我的例子中,另一个错误(一个
虚拟方法未找到
错误)保存了这个并导致它超时。解析后,Ad id被成功检索。

我出现以下错误

java.util.concurrent.TimeoutException:等待 服务连接


将调用方方法移动到非主线程后,错误已修复。我不确定这个解决方案是否对您有帮助,但您可以检查一下。

根据我最近的测试,在尝试从主线程获取android id时,似乎没有调用
onServiceConnected
。当您试图通过
线程上的超时来防止死锁时,它可能会导致死锁(如@DimPar情况)和超时异常。join
。 android似乎不允许外部SDK创建单独的线程(即使他们直接创建一个新线程并启动它)。 换句话说,如果你使用一个sdk试图获取android id,即使它可以工作,它也不会。解决方案是在活动中创建的单独线程上调用所有外部SDK函数。 以下是我个人经历中的一个例子。
以下代码块死锁:

public class MainActivity extends AppCompatActivity {
    static boolean doOnce = true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if( doOnce ) {
            ExternalSDKClass.StartInitialization();
            doOnce = false;
        }
}
下面的代码块起作用

public class MainActivity extends AppCompatActivity {

    Thread ExternalSDKThread = new Thread() {
        @Override
        public void run() {
            try {
                ExternalSDKClass.StartInitialization();
            } catch (Exception e) {
                Log.i("SDK ERROR", "getAdvertisingIdInfo Exception: " + e.toString());
            }
        }
    };
    //---------------------------------

    static boolean doOnce = true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if( doOnce ) {
            ExternalSDKThread.start();
            doOnce = false;
        }
}

你好,马可。我在GMS 9.4.0中遇到了一些问题,但没有找到解决方案…我的应用程序在启动时冻结在以下日志消息之后:
获取广告客户id时出错:java.io.IOException:java.util.concurrent.TimeoutException:等待服务连接成功绑定到服务时超时,但从未使用服务连接回调,我的应用程序没有冻结,但仍然无法将电子商务数据交付给分析部门……我在这里找到了一份相关报告:看起来问题仍然存在于gms 9.8Hi中,有任何更新吗?我在tag manager 11.8.0中体验到了这一点。我看不到任何解决办法。
public class MainActivity extends AppCompatActivity {

    Thread ExternalSDKThread = new Thread() {
        @Override
        public void run() {
            try {
                ExternalSDKClass.StartInitialization();
            } catch (Exception e) {
                Log.i("SDK ERROR", "getAdvertisingIdInfo Exception: " + e.toString());
            }
        }
    };
    //---------------------------------

    static boolean doOnce = true;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if( doOnce ) {
            ExternalSDKThread.start();
            doOnce = false;
        }
}