我正在使用Eclipse开发Android应用程序,想要集成Admob以赚钱。教程上说我应该观察LogCat以查找ID,但是它在哪里?
当我在测试模式或真实模式下运行时,有时Eclipse会通知广告已返回,但它不会显示在仿真器中...有人能解释一下吗?
如果您只在模拟器或少量设备上进行测试,则接受的答案将有效,但如果您要在大量设备上进行测试,则可能需要某种手段以编程方式添加正在运行的设备的设备ID。
以下代码将以编程方式将当前正在运行的设备设置为广告视图测试设备
...
if(YourApplication.debugEnabled(this)) //debug flag from somewhere that you set
{
String android_id = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
String deviceId = md5(android_id).toUpperCase();
mAdRequest.addTestDevice(deviceId);
boolean isTestDevice = mAdRequest.isTestDevice(this);
Log.v(TAG, "is Admob Test Device ? "+deviceId+" "+isTestDevice); //to confirm it worked
}
您需要使用 Android ID 的 md5 值,且它需要是大写的。这是我使用的md5代码
public static final String md5(final String s) {
try {
// Create MD5 Hash
MessageDigest digest = java.security.MessageDigest
.getInstance("MD5");
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < messageDigest.length; i++) {
String h = Integer.toHexString(0xFF & messageDigest[i]);
while (h.length() < 2)
h = "0" + h;
hexString.append(h);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
Logger.logStackTrace(TAG,e);
}
return "";
}
编辑:显然 MD5 方法并不完美,建议尝试 https://dev59.com/G2445IYBdhLWcg3wdqIL#21333739。我不再需要这个功能,所以没有测试过。
如果您在模拟器上运行admob广告,则没有ID。只需使用AdManager方法并将其设置为TEST_EMULATOR,就像logcat所述的那样。如果您在启用usb调试的实际设备上运行并观看logcat,则ID将出现在其中。
如果您的应用程序在Play商店显示实时广告 -- 您不能使用实时广告进行测试 -- 在代码中添加您的设备ID以从Admob获得在您的真实设备上的测试广告。在开发或测试过程中永远不要使用实时广告。
要获取日志中的真实设备ID,
在您的设备上打开任何显示来自Admob的实时广告的应用程序: 如果您已从play商店下载您的应用程序(显示实时广告),请打开该应用程序,否则请打开任何其他显示Admob实时广告的应用程序。您的设备应该连接到互联网。
如下所示使用“device”过滤器过滤日志以获取测试设备:
阅读在设备上进行Admob广告测试-设备ID可能会更改获取更多信息。
从文档中可以看到,与Google Ads类似的内容:
public AdRequest.Builder addTestDevice (String deviceId)
使设备接收测试广告。 可以通过查看创建新广告后的logcat输出来获取deviceId。 对于模拟器,请使用DEVICE_ID_EMULATOR。
例如,我的测试设备ID在LogCat中显示为"B86BC9402A69B031A516BC57F7D3063F"
:
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice("B86BC9402A69B031A516BC57F7D3063F")
.build();
String android_id = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
String deviceId = md5(android_id).toUpperCase();
Log.i("device id=",deviceId);
然后为 md5() 函数添加这个类。
public String md5(String s) {
try {
// Create MD5 Hash
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
for (int i=0; i<messageDigest.length; i++)
hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
hexString.append(String.format("%02X", 0xFF & messageDigest[i]));
由于没有输出前导零,所以你的实现将在字节值小于等于15时给出错误的输出。 - AntsetTestDeviceIds(Arrays.asList("CC9DW7W7R4H0NM3LT9OLOF7455F8800D")).
按照所示在您的代码中使用测试设备
val adRequest = AdRequest
.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice("CC9DW7W7R4H0NM3LT9OLOF7455F8800D")
.build()
如果您正在实际设备上测试应用程序,则可以尝试此小型Android应用程序,它会为您提供设备ID:
https://play.google.com/store/apps/details?id=pe.go_com.admobdeviceidfinder&hl=en
您将直接获取哈希设备ID。希望这可以帮助您。
com.google.android.gms.internal.cm.l(Context ctx)
更好,后者是内部混淆方法(在版本4.0.30中),返回所需的ID。 - Amr Mostafaimport hashlib; hashlib.md5(android_id.lower()).hexdigest().upper()
。这样,您只需要下载一个应用来显示您的Android ID,并对其进行MD5处理。 - douggard