我做的时候
adRequest.addTestDevice(AdRequest.TEST_EMULATOR);
adView.loadAd(adRequest);
logcat似乎报告我正在请求广告,但随后说
09-21 11:48:13.720: W/Ads(712): Invalid unknown request error: Cannot determine request type.
您的广告单元ID是否正确? 然而,我正在使用的ID正在从AdMod API代码请求/响应屏幕正确粘贴。我做错了什么?
当我尝试使用真实设备(运行Android 2.2.1的HTC Inspire)时,我更加困惑。 Logcat是沉默的,但我没有得到测试广告。有人可以告诉我到底应该用什么代替“xxxxxxxx”:
adRequest.addTestDevice("xxxxxxxx");
我尝试过文本字符串“TEST_DEVICE_ID”,我的设备的序列号,甚至是笨蛋。没有快乐。我是否需要散列序列号或其他内容?我使用的是JDK 1.7。
答案 0 :(得分:5)
检查您的广告单元ID。它是您从AdMob获得的广告单元ID吗?您的广告单元中是否有空格?您收到该错误是因为AdMob无法识别该ID。
对于设置测试设备,可以通过以下方式为仿真器设置测试模式:
adRequest.addTestDevice(AdRequest.TEST_EMULATOR);
要在设备上设置测试模式,请在设备上进行AdRequest,然后检查LogCat。 SDK会说:
To get test ads on this device, call adRequest.addTestDevice("0123456789ABCDEF0123456789ABCDEF");
此号码是您设备ID的哈希值,从LogCat获取最简单。
答案 1 :(得分:1)
首先,我不知道你是否解决了代码中真实设备与模拟器的区别问题。您需要区分在模拟器或真实设备上运行的应用程序,可以使用以下
来完成 boolean inEmulator = "generic".equals(Build.BRAND.toLowerCase());
如果您在模拟器中,则会返回true,如果不是,则返回false。接下来,您需要构建一种处理广告的方法,具体取决于inEmulaotor
的值 if (inEmulator)
{
adRequest.addTestDevice(AdRequest.TEST_EMULATOR);
}
else
{
adRequest.addTestDevice("11111111101111111110111111111011");
}
这里我们要么添加一个模拟器测试设备,要么添加一个真实设备的32char设备ID。 (此ID是字母数字)可以通过在测试模式下在真实设备上运行admob找到真实设备的此ID,并将显示在logcat中。
最后,您需要设置testing = true并开始加载广告。
adRequest.setTesting(true);
adView.loadAd(adRequest);
总而言之,这段代码的工作集可能如下所示:
boolean isTestingAds = true; //this is a switch, to make it easy on changing modes
boolean inEmulator = "generic".equals(Build.BRAND.toLowerCase());
AdView adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID);
AdRequest adRequest = new AdRequest();
if (isTestingAds)
{
if (inEmulator)
{
adRequest.addTestDevice(AdRequest.TEST_EMULATOR);
}
else
{
adRequest.addTestDevice("11111111101111111110111111111011");
}
adRequest.setTesting(true);
}
adView.loadAd(adRequest);
不要忘记将广告视图添加到内容视图中,以及更新清单文件。 MY_AD_UNIT_ID是您从这个特定应用程序的admob获得的代码。
最后找到你的ID,设置
isTestingAds = false;
然后您需要将设备设置为测试的#将显示在LogCat中。
如果您没有从真实设备获取和logcat数据,那么这是另一个问题。