Tôi đang thử nghiệm một vài thiết bị và không muốn lấy DeviceID cho từng thiết bị theo cách thủ công. Các câu trả lời ở đây để lấy DeviceID theo chương trình đã không hoạt động đối với tôi (Thiếu số không) khiến quảng cáo thực được hiển thị thay vì quảng cáo thử nghiệm.
Tôi đặt cái này vào lớp Ứng dụng onCreate của mình, sau đó hiển thị deviceId bằng phương thức getter để nó có thể được truy cập xuyên suốt.
@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;
Và phương pháp 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;
}
Sau đó, sử dụng điều này bất cứ khi nào tôi tạo đối tượng 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);
}