ฉันมีอุปกรณ์บางอย่างที่ฉันกำลังทดสอบและไม่ต้องการรับ DeviceID ด้วยตนเองสำหรับแต่ละอุปกรณ์ คำตอบที่นี่สำหรับการรับ DeviceID โดยทางโปรแกรมไม่ได้ผลสำหรับฉัน (ไม่มีศูนย์) ซึ่งทำให้โฆษณาจริงแสดงแทนโฆษณาทดสอบ
ฉันใส่สิ่งนี้ไว้ในคลาสแอปพลิเคชันของฉัน onCreate จากนั้นเปิดเผย deviceId โดยใช้เมธอด getter เพื่อให้สามารถเข้าถึงได้ตลอด
@Override
public void onCreate() {
super.onCreate();
String androidId = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
deviceId = MD5(androidId).toUpperCase();
}
public static String getDeviceId() {
return deviceId;
}
private static String deviceId;
และวิธี MD5;
public String MD5(String md5) {
try {
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
byte[] array = md.digest(md5.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
}
return sb.toString();
} catch (java.security.NoSuchAlgorithmException e) {
}
return null;
}
จากนั้นใช้สิ่งนี้ทุกครั้งที่ฉันสร้างวัตถุ AdRequest:
if(BuildConfig.DEBUG) {
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice(Application.getDeviceId())
.build();
adView.loadAd(adRequest);
} else {
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
adView.loadAd(adRequest);
}