如何获取Admob的设备ID


102

我正在使用Eclipse开发适用于Android的应用程序,并且希望集成Admob来赚钱。教程说我应该观看LogCat来查找ID,但是它在哪里? 替代文字

当我在测试模式或实模式下运行时,有时日食会通知广告已返回,但它不会在emu中显示...有人可以解释吗?

Answers:


103

如果您在模拟器上运行admob广告,则没有ID。只需使用AdManager方法并将其设置为TEST_EMULATOR,就像logcat所说的那样。如果您使用USB调试在实际设备上运行并观看logcat,则ID将显示在其中。


50
使用上述术语“ adRequest”进行过滤后,您会发现以下行-“ 12-19 17:48:25.615:I / Ads(2132):要在此设备上获取测试广告,请调用adRequest.addTestDevice(” D9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX “);”。只需复制粘贴代码即可,尽享乐趣。
Ashok Goli 2012年

5
我的日志显示:“使用AdRequest.Builder.addTestDevice(“ 5EXXXX等”)在此设备上获取测试广告。
马克·布里奇斯

2
只需在logcat的过滤器字段上键入“ addTestDevice”。
加安·韦拉库蒂

我们能否从发布到Google Play的单个APK中找到设备ID?
Gayan Weerakutti

108

如果仅在仿真器或少数设备上进行测试,则可接受的答案将起作用,但是,如果您在过多的设备上进行测试,则可能需要一些方法来随机添加正在运行的设备的设备ID。

以下代码将以编程方式将当前正在运行的设备转换为adview测试设备

...
    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://stackoverflow.com/a/21333739/2662474我不再需要此功能,所以我没有进行测试。祝好运!


1
这可能比调用com.google.android.gms.internal.cm.l(Context ctx)方法更好,后者是内部混淆方法(在版本4.0.30中),该方法返回返回有问题的ID
Amr Mostafa

这次真是万分感谢!只是将其放入Python中,import hashlib; hashlib.md5(android_id.lower()).hexdigest().upper()。这样,您可以下载一个应用程序以显示您的Android ID并获取其中的MD5。
douggard 2014年

和设置类来自什么包?
oabarca 2014年

@joseph,这无法正常工作。它错过了一些字符。
2015年

5
请参阅以下答案:stackoverflow.com/a/21333739/4019544此实现未处理一些零,类似于此处链接的帖子上的可接受答案。
MaxJ 2015年

17

来自文档的类似于Google Ads的内容:

公共AdRequest.Builder addTestDevice(字符串deviceId)

使设备接收测试广告。可以 在创建新广告后查看logcat输出来获取deviceId 对于仿真器,请使用DEVICE_ID_EMULATOR。

例如,我在LogCat中显示的测试设备ID是"B86BC9402A69B031A516BC57F7D3063F"

AdRequest adRequest = new AdRequest.Builder() 
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
        .addTestDevice("B86BC9402A69B031A516BC57F7D3063F")
        .build();

16
  • 您的应用是否在Play商店上发布- 带有实时广告

如果您的应用程序在Play商店中展示实时广告-您不能使用实时广告进行测试-在代码中添加设备ID即可从真实设备上的Admob获取测试广告。在开发或测试过程中,切勿使用实时广告。

要在logcat中获取真实的设备ID,

  1. 将设备以USB调试模式连接到Android Studio

USB调试模式(开发人员选项)

  1. 打开设备上显示来自Admob的实时广告的任何应用程序:在已连接的设备上,如果您已从Play商店下载了应用程序(显示实时广告),请打开该应用程序,或者打开其他任何显示Admob实时广告的应用程序。您的设备应该可以连接互联网。

  2. 如下所示,用'device'过滤logcat以获取测试设备

在logcat中测试设备ID

读取设备上的AdMob广告测试-设备ID可以改变更多


我在运行Unity Dev Build时一直在寻找,而这一方法确实有效。谢谢。
Avisek Chakraborty,

13

获取哈希设备ID

在内部

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 "";
    }

谢谢,但是实际上您的md5()函数中存在一个细微的错误。您附加到hexString的行应为: hexString.append(String.format("%02X", 0xFF & messageDigest[i])); 您的实现将在15或更少的字节值上给出错误的输出,因为不会输出前导零。
蚂蚁

您的md5()生成了错误的ID,预期为561600E037F6E9EEBE405B487459D786,但是56160E037F6E9EEBE405B487459D786
Foobnix

7

如果您要使用XML布局显示广告,并且在布局XML文件中已经包含“ ads:testDevices =“,则AdMob不会在LogCat输出中显示“要在此设备上获取测试广告...”消息。取出它,然后您将看到LogCat消息。

这是一个很好的教程,介绍如何在LogCat中查找设备ID:http ://webhole.net/2011/12/02/android-sdk-tutorial-get-admob-test-device-id/


7

如果您要在实际设备上测试您的应用,则可以尝试使用此小型Android应用,该应用会为您提供设备ID:

https://play.google.com/store/apps/details?id=pe.go_com.admobdeviceidfinder&hl=zh_CN

您将直接获得散列的设备ID。希望这可以帮助。


我不确定这就是问题所在。我记得在模拟器中无法从Play商店安装。也许采用更具编程性的解决方案(或该应用程序源的相关部分)会更好。
加博尔·巴科斯(GáborBakos)2015年

1
许多人已经发布了编程解决方案。我刚刚发布了此代码,是因为尽管它在模拟器上不起作用,但它还是一种获取ID的简单易行的方式。无论如何,我编辑了答案。
Sanath Bharadwaj 2015年

不再提供正确的ID。
Evorlor

6

展示测试广告的另一种最简单的方法是使用测试设备ID的横幅广告来展示所有设备的 admob测试广告。“ ca-app-pub-3940256099942544 / 6300978111 ”。该admob测试广告ID已在google的admob教程中指出:链接。这是上面链接的报价: 在此处输入图片说明

  • 这是非页内广告“ ca-app-pub-3940256099942544 / 1033173712 ” 的测试设备ID 。插页式教程中也使用了此功能

5

如果您没有在logcat中找到它,只需放置任何设备ID并加载广告并运行应用程序,然后转到日志,就可以得到它I/Ads: Use AdRequest.Builder.addTestDevice("XXXXXXXXXXXXXXXXXXXXXXXXX") to get test ads on this device.放入,然后再次运行您的应用程序即可。


5

要获取设备ID,请将手机连接到USB,然后在android studio中打开logcat。请使用以下代码(确保已在设备中启用USB调试功能)。然后打开任何带有Google广告的应用(从Play商店下载任何随机应用)。如图所示,在Logcat中键入“设置”。您的设备ID在图像中以高亮显示为

setTestDeviceIds(Arrays.asList(“ CC9DW7W7R4H0NM3LT9OLOF7455F8800D”))

在此处输入图片说明

如图所示,在代码中使用测试设备

val adRequest = AdRequest
        .Builder()
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
        .addTestDevice("CC9DW7W7R4H0NM3LT9OLOF7455F8800D")
        .build()

4

我正在测试一些设备,并且不想手动获取每个设备的DeviceID。此处以编程方式获取DeviceID的答案不适用于我(缺少零),这导致显示实际广告而不是测试广告。

我将其放在我的Application类的onCreate中,然后使用getter方法公开deviceId,以便可以在整个过程中对其进行访问。

@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);
}

4

以这种方式工作:

InterstitialAd mInterstitial = new InterstitialAd(this);
    mInterstitial.setAdUnitId("your id");
    AdRequest adRequest = new AdRequest.Builder()
    .addTestDevice("some words")
    .build();
    mInterstitial.loadAd(adRequest);

运行该应用程序后,...在Logcat中放入Verbose,在搜索字段AdRequest中放入,因此id设备显示donw。

在此处输入图片说明

.addTestDevice(“将ID放在此处”);

我希望能有所帮助;


2

将此课程添加到您的项目中

import android.content.Context;
import android.provider.Settings;
import android.text.TextUtils;

import com.google.android.gms.ads.AdRequest;
import java.io.UnsupportedEncodingException;

public class AdsHelper {
public static AdRequest createRequest(Context context) {
    AdRequest.Builder adRequest = new AdRequest.Builder();
    adRequest.addTestDevice(AdRequest.DEVICE_ID_EMULATOR);
    if (BuildConfig.DEBUG) {
        String deviceId = MD5(getDeviceId(context));
        if (!TextUtils.isEmpty(deviceId)) {
            adRequest.addTestDevice(deviceId.toUpperCase());
        }
    }

    return adRequest.build();
}



    private static String MD5(String md5) {
        if (TextUtils.isEmpty(md5)) return null;
        try {
            java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
            byte[] array = md.digest(md5.getBytes("UTF-8"));
            StringBuilder sb = new StringBuilder();
            for (byte anArray : array) {
                sb.append(Integer.toHexString((anArray & 0xFF) | 0x100).substring(1, 3));
            }
            return sb.toString();
        } catch (java.security.NoSuchAlgorithmException ignored) {
        } catch(UnsupportedEncodingException ignored){
        }
        return null;
    }

    private static String getDeviceId(Context context) {
        try {
            return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
        } catch (Exception e) {
            return "";
        }

    }
}

用法:

AdRequest adRequest = AdsHelper.createRequest(this);

谢谢,结果与adRequest在logcat中显示的结果相同。
user2342558

0

应用程式: build.gradle

dependencies {
...
compile 'com.google.firebase:firebase-ads:10.0.1'
...
}

您的活动:

 AdRequest.Builder builder = new AdRequest.Builder();
        if(BuildConfig.DEBUG){

            String android_id = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
            String deviceId = io.fabric.sdk.android.services.common.CommonUtils.md5(android_id).toUpperCase();
            builder.addTestDevice(deviceId);
        }
        AdRequest adRequest = builder.build();
    adView.loadAd(adRequest);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.