如何获取Admob设备ID

113

我正在使用Eclipse开发Android应用程序,想要集成Admob以赚钱。教程上说我应该观察LogCat以查找ID,但是它在哪里?alt text

当我在测试模式或真实模式下运行时,有时Eclipse会通知广告已返回,但它不会显示在仿真器中...有人能解释一下吗?

18个回答

114

如果您只在模拟器或少量设备上进行测试,则接受的答案将有效,但如果您要在大量设备上进行测试,则可能需要某种手段以编程方式添加正在运行的设备的设备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。我不再需要这个功能,所以没有测试过。


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
设置类来自哪个包? - dev4life
@joseph,它错过了字符0“零”。我没有深入研究代码,因为我找到了另一个解决方案。我写信给你只是想让你知道。如果你要挖掘这个错误,我可以把两个手机序列号发送给你,你就会看到错误在哪里。 - 5er
5
请参见以下答案: https://dev59.com/G2445IYBdhLWcg3wdqIL#21333739 这个实现没有处理一些零,类似于此处链接的被接受的答案。 - MaxJ
显示剩余3条评论

107

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


51
使用上述术语“adRequest”进行过滤后,您将找到一行代码 -“12-19 17:48:25.615: I / Ads(2132):要在此设备上获取测试广告,请调用adRequest.addTestDevice(“ D9XXXXXXXXXXXXXXXXXXXXXXXXXXXXX”);”。只需复制粘贴此代码,就可以愉快地使用了。 - Ashok Goli
5
我的日志显示:“使用AdRequest.Builder.addTestDevice(“5EXXXX等”)在此设备上获取测试广告。” - Mark Bridges
2
只需在logcat的过滤器字段中键入“addTestDevice”。 - Gayan Weerakutti
我们能否从发布到Google Play的已签名APK中找到设备ID? - Gayan Weerakutti
你可以尝试通过 "RequestConfiguration.Builder().setTestDeviceIds" 来查找密钥。 - hidd
模拟器还有ID,你在开玩笑吧? - user924

21
  • 你的应用程序在Play商店发布了吗 -- 带有实时广告:

如果您的应用程序在Play商店显示实时广告 -- 您不能使用实时广告进行测试 -- 在代码中添加您的设备ID以从Admob获得在您的真实设备上的测试广告。在开发或测试过程中永远不要使用实时广告。

要获取日志中的真实设备ID,

  1. 将您的设备连接到Android Studio的USB调试模式中

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

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

  2. 如下所示使用“device”过滤器过滤日志以获取测试设备:

日志中的测试设备ID

阅读在设备上进行Admob广告测试-设备ID可能会更改获取更多信息。


我在运行Unity Dev Build时找到了这个方法,它有效了。谢谢。 - Avisek Chakraborty

17

从文档中可以看到,与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();

15
获取Hash设备ID
在oncreate内部实现。
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()函数实际上存在一个微妙的bug。你追加到hexString的那一行应该是这样的:hexString.append(String.format("%02X", 0xFF & messageDigest[i]));由于没有输出前导零,所以你的实现将在字节值小于等于15时给出错误的输出。 - Ant
你的md5()生成了错误的ID,期望值为561600E037F6E9EEBE405B487459D786,但实际值为56160E037F6E9EEBE405B487459D786。 - Foobnix

10
连接手机到USB并在Android Studio中打开Logcat以获取设备ID。 使用以下代码(确保设备启用了USB调试)。 然后打开任何一个有谷歌广告的应用程序(从Play Store下载任何随机应用程序)。 在Logcat中输入"set",如图所示。你的设备ID将在图像中突出显示为

setTestDeviceIds(Arrays.asList("CC9DW7W7R4H0NM3LT9OLOF7455F8800D")).

输入图像描述

按照所示在您的代码中使用测试设备

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

7
如果您正在使用XML布局显示广告,并且在您的布局XML文件中已经有"ads:testDevices=",AdMob将不会在LogCat输出中打印"To get test ads on this device..."消息。请删除该部分,然后您将看到LogCat消息。
以下是如何在LogCat中查找设备ID的详细教程: http://webhole.net/2011/12/02/android-sdk-tutorial-get-admob-test-device-id/

7

我不确定这是否与问题相关。从模拟器中我记得你无法从Play商店安装。可能更加编程化的解决方案(或该应用程序源代码的相关部分)会更好。 - Gábor Bakos
1
很多人都发布了编程解决方案。我只是发布了这个,因为它是一个简单直接的获取ID的方法,尽管它在模拟器上不起作用。无论如何,我已经编辑了答案。 - Sanath Bharadwaj

6
另一种展示测试广告的最简单方法是使用横幅的测试设备 ID 来展示 AdMob 的测试广告适用于所有设备。该 ID 为 "ca-app-pub-3940256099942544/6300978111",该 AdMob 测试广告 ID 在 Google 的 AdMob 教程中有所记录:链接。 以下是来自上述链接的引用: enter image description here
  • 这是插页式广告的测试设备 ID "ca-app-pub-3940256099942544/1033173712",也在插页式广告教程中使用过。

5
如果您在logcat中没有看到信息,只需放置任何设备ID并加载您的广告,然后运行应用程序,然后转到日志,您将获得以下信息:“I/Ads: Use AdRequest.Builder.addTestDevice(“XXXXXXXXXXXXXXXXXXXXXXXXX”)在此设备上获取测试广告。”然后再次放置它并重新运行应用程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接