我注意到我的Android应用未能正确发送我的Google分析电子商务数据,而所有其他分析数据(屏幕视图,例外)都已正确发布。
我已经打开a bounty about this topic但是进一步挖掘我在logcat中发现了一些错误:
获取广告客户ID时出错:java.io.IOException: java.util.concurrent.TimeoutException:超时等待 服务连接
成功绑定到服务但从未加入onServiceConnected 回调
我怀疑这些错误是由于某些内容无法在播放服务级别上运行,这就是为什么我要打开一个新主题。
由于上述错误在点击发布之前出现在日志中,我的理论是我的电子商务数据因为它们而未正确发布。这里有人见过这样的东西吗?我可以尝试一下来修复它吗?
请注意我正在使用(取自build.gradle)
compile 'com.google.android.gms:play-services-analytics:9.4.0'
compile 'com.google.android.gms:play-services-ads:9.4.0'
apply plugin: 'com.google.gms.google-services'
和gradle插件
classpath 'com.android.tools.build:gradle:2.2.0-beta1'
答案 0 :(得分:0)
我通过将其添加到dependencies
文件的gradle.build
块中来解决此错误:
implementation 'com.google.android.gms:play-services-base:16.0.1'
答案 1 :(得分:0)
我遇到以下错误
java.util.concurrent.TimeoutException:等待 服务连接
将调用者方法移至非主线程后,该错误已修复。我不确定该解决方案是否可以帮助您,但是您可以查看一下。
答案 2 :(得分:0)
从我最近的测试来看,似乎在尝试从主线程获取 android id 时没有调用 onServiceConnected
。当您尝试通过 Thread.join
超时来防止死锁时,它可能会导致死锁(如在 @DimPar 情况下)和超时异常。
似乎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;
}
}