2

这是我们从 Mopub 和其他广告网络看到的:

java.io.IOException:连接失败 com.google.android.gms.ads.identifier.AdvertisingIdClient.g(未知来源) com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo(未知来源)

他们似乎都有同样的问题。

奇怪的是,我们可以通过以下来源从我们的应用程序中获取广告 ID。我们获得了正确的广告 ID,并且没有错误日志。所有 SDK 都遇到相同的问题(连接失败)。

任何帮助表示赞赏。

private void getAdvertisingId(AdvertisingIdHolder receiver) {

    AdvertisingIdClient.Info adInfo = null;
    String id = null;
    boolean isLAT = false;

    try {
        adInfo = AdvertisingIdClient.getAdvertisingIdInfo(App.getCtx());

        id = adInfo.getId();
        isLAT = adInfo.isLimitAdTrackingEnabled();
    } catch (IOException e) {
        SLog.e("error", e);
        // Unrecoverable error connecting to Google Play services (e.g.,
        // the old version of the service doesn't support getting AdvertisingId).
    } catch (GooglePlayServicesNotAvailableException e) {
        SLog.e("error", e);
        // Google Play services is not available entirely.
    } catch (GooglePlayServicesRepairableException e) {
        e.printStackTrace();
    }

    receiver.receive(id, isLAT); 
}
4

1 回答 1

2

这些天来,我在获取广告 ID 方面经历了反复试验。最后我得到了它!如果我们传入 getApplicationContext() 而不是当前活动的上下文,则可以解决连接错误。以下是我的工作代码:

private void getGaid() {
    new Thread(new Runnable() {

        @Override
        public void run() {
            try {
                String gaid = AdvertisingIdClient.getAdvertisingIdInfo(
                        getApplicationContext()).getId();
                if (gaid != null) {
                    Log.d("DEBUG", gaid);
                    // gaid get!
                }
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (GooglePlayServicesRepairableException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (GooglePlayServicesNotAvailableException e) {
                e.printStackTrace();
            }
        }
    }).start();
}

getGaid() 可以放在视图的 onCreate()、onResume() 或 onClick() 中,只要该线程由主 ui 线程调用即可。

您可能需要的另一件事是将 google play 服务库更新到最新版本。正如这里官方文档所说,IOException 很可能是由于旧版本的服务不支持获取 AdvertisingId 造成的。

如果有任何其他问题,请随时发表评论。

于 2014-12-07T16:08:55.917 回答