我正在开发一个使用admob展示广告的应用。我添加了3个设备(1个运行android 6和2个运行android 8)的测试ID,它们在调试模式下工作正常,可以正确识别为测试设备。
AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
// My Phone
adRequestBuilder.addTestDevice("AD9EA3690D287AA4A5A75279684045A1");
//Phone2 and 3
adRequestBuilder.addTestDevice("8438F5ABA7A67FAC92A26AAED589C8F1");
adRequestBuilder.addTestDevice("ED0430F25A6DA673BF0AA414AFDD7688");
// emulator
adRequestBuilder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR);
AdRequest adRequest = adRequestBuilder.build();
// get whether it's a test device to enable developer functionality.
isTest = adRequest.isTestDevice(this);
注意:此帖子的代码已更改
但是在一个发布版本中,有2个android 8手机在对adRequest.isTestDevice(this);
的调用中返回false。 android 6手机可完美运行。
如何克服android 8中的这个错误?
答案 0 :(得分:0)
我通过一些调试很快就解决了问题,但是我等着看是否有人会发表原因。
结果证明这是一个有意的更改(就像这些天在Android中的大多数错误一样)。 测试设备代码是Settings.Secure.ANDROID_ID的md5哈希值,在Android 8上该代码因用户和应用而异。 https://developer.android.com/about/versions/oreo/android-8.0-changes参见隐私部分
由于Debug和Release版本是单独的应用,因此它们获得了单独的android_id。
这使得在发布时测试admob非常危险。
希望他们有一天会更新AdRequest代码以弥补这一点。