【问题标题】:How can I get device ID for Admob如何获取 Admob 的设备 ID
【发布时间】:2011-05-30 07:30:43
【问题描述】:

我正在使用 Eclipse 开发适用于 android 的应用程序,并且我想集成 Admob 来赚钱。 教程说我应该看 LogCat 来查找 ID,但它在哪里?

当我在测试模式或真实模式下运行时,有时eclipse会通知广告返回,但它没有显示在emu中......谁能解释一下?

【问题讨论】:

    标签: android eclipse admob


    【解决方案1】:

    如果您仅在模拟器或少数设备上进行测试,则可接受的答案将起作用,但如果您在过多的设备上进行测试,您可能需要一些以编程方式添加正在运行的设备的设备 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我不再需要这个功能,所以我没有测试。祝你好运!

    【讨论】:

    • 这可能比调用 com.google.android.gms.internal.cm.l(Context ctx) 更好,后者是返回相关 ID 的内部混淆方法(在 4.0.30 版中)
    • 谢谢你!只是把它放到 Python 中,import hashlib; hashlib.md5(android_id.lower()).hexdigest().upper()。这样,您只需下载一个应用程序即可显示您的 Android ID 并获取其 MD5。
    • 和Settings类来自什么包?
    • @joseph 这工作不正常。它遗漏了一些字符。
    • 查看此答案:stackoverflow.com/a/21333739/4019544 此实现未处理一些零,类似于此处链接的帖子中接受的答案。
    【解决方案2】:

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

    【讨论】:

    • 使用上述术语“adRequest”过滤后,您会发现一行 - “ 12-19 17:48:25.615: I/Ads(2132): To get test ads on this device ,调用 adRequest.addTestDevice("D9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");"。只需复制粘贴代码即可玩得开心。
    • 我的日志显示:“使用 AdRequest.Builder.addTestDevice("5EXXXX etc") 在此设备上获取测试广告。”
    • 只需在 logcat 的过滤器字段中输入“addTestDevice”即可。
    • 我们能否从发布到 Google Play 的已签名 APK 中找到设备 ID?
    • 您可以尝试通过“RequestConfiguration.Builder().setTestDeviceIds”查找密钥
    【解决方案3】:

    类似于 Google Ads 的东西,来自文档:

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

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

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

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

    【讨论】:

      【解决方案4】:
      • 您的应用是否已在 Play 商店发布 - 带有实时广告

      如果您的应用在 Play 商店中展示实时广告(您不能使用实时广告进行测试),请在代码中添加您的设备 ID,以便在您的真实设备上从 Admob 获取测试广告。切勿在开发或测试期间使用实时广告。

      在logcat中获取真实设备ID,

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

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

      2. 如下图用'device'过滤logcat得到测试设备

      阅读Admob ad testing on device - device IDs can change了解更多

      【讨论】:

      • 我在运行 Unity Dev Build 时一直在寻找,而这个工作正常。谢谢。
      【解决方案5】:

      获取哈希设备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() 函数中有一个细微的错误。您附加到 hexString 的行应该是这样的:hexString.append(String.format("%02X", 0xFF &amp; messageDigest[i])); 您的实现将在 15 或更小的字节值上给出不正确的输出,因为不会输出前导零。
      • 您的 md5() 生成错误的 ID,预期为 561600E037F6E9EEBE405B487459D786 但 56160E037F6E9EEBE405B487459D786
      【解决方案6】:

      如果您使用 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】:

        如果您是在实际设备上测试您的应用,那么您可以尝试这个为您提供设备 ID 的小型 android 应用:

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

        您将直接获得经过哈希处理的设备 ID。 希望这会有所帮助。

        【讨论】:

        • 我不确定这就是问题所在。我记得在模拟器中您无法从 Play 商店安装。可能更编程的解决方案(或此应用程序源的相关部分)会更好。
        • 他们中的许多人都发布了程序化解决方案。我刚刚发布了这个,因为它是一种简单而直接的方式来获取 id,尽管它在模拟器上不起作用。无论如何,我编辑了答案。
        【解决方案8】:

        要获取设备ID,请将手机连接到USB并在android studio中打开logcat 使用下面的代码(确保您的设备中启用了 USB 调试)。 然后打开任何有谷歌广告的应用程序(从 Play 商店下载任何随机应用程序)。如图所示,在 Logcat 中键入“set”。您的设备 ID 在图像中突出显示为

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

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

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

        【讨论】:

          【解决方案9】:

          另一种展示测试广告的最简单方法是使用横幅的测试设备 ID 来展示 适用于所有设备的 admob 测试广告。 “ca-app-pub-3940256099942544/6300978111”。这个admob测试广告id在google的admob教程中注明:link。 这是上面链接的引用:

          • 这是插页式广告“ca-app-pub-3940256099942544/1033173712”的测试设备 ID。这也用于interstitial tutorial

          【讨论】:

            【解决方案10】:

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

            【讨论】:

              【解决方案11】:

              我有几台正在测试的设备,不想手动获取每台设备的 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);
              }
              

              【讨论】:

                【解决方案12】:

                以这种方式工作:

                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放在这里");

                希望对你有所帮助;

                【讨论】:

                  【解决方案13】:

                  将此类添加到您的项目中

                  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中显示的一样。
                  【解决方案14】:

                  应用程序: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);
                  

                  【讨论】:

                    【解决方案15】:

                    对于模拟器,无需在“测试设备”中添加设备

                    对于真机,找到如下广告 ID 并添加到 Admob 帐户

                    【讨论】:

                      【解决方案16】:

                      我已将此代码用于我的一个项目。希望它对每个人都有帮助:) Rajji

                      public String getDeviceId(){
                          MessageDigest messageDigest = MessageDigest.getInstance("MD5");
                          String androidId = 
                        Settings.Secure.getString((ContentResolver)this.getContentResolver(),"android_id");
                          messageDigest.update(androidId.getBytes());
                          byte[] arrby = messageDigest.digest();
                          StringBuffer sb = new StringBuffer();
                          int n = arrby.length;
                          for(int i=0; i<n; ++i){
                              String oseamiya = Integer.toHexString((int)(255 & arrby[i])));
                              while(oseamiya.length() < 2){
                                  oseamiya = "0" + oseamiya;
                              }
                              sb.append(oseamiya);
                          }
                          try{
                              String result = sb.toString();
                              return result;
                          }catch(NoSuchAlgorithmException e){
                              e.printStackTrace();
                              return "";
                          }
                      
                      }
                      

                      【讨论】:

                        【解决方案17】:

                        Kotlin 解决方案:

                        获取当前设备 ID:

                        @SuppressLint("HardwareIds")
                        private fun getDeviceIdForAdMobTestAds(context: Context): String? {
                            val md5 = Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)
                            try {
                                val md = MessageDigest.getInstance("MD5")
                                val array = md.digest(md5.toByteArray())
                                val sb = StringBuilder()
                                for (i in array.indices)
                                    sb.append(Integer.toHexString(array[i].toInt() and 0xFF or 0x100).substring(1, 3))
                                return sb.toString()
                            } catch (e: NoSuchAlgorithmException) {
                            }
                            return null
                        }
                        

                        用法:

                        val deviceIds = arrayListOf(AdRequest.DEVICE_ID_EMULATOR)
                        getDeviceIdForAdMobTestAds(context)?.let { deviceIds.add(it.uppercase(Locale.ROOT)) }
                        MobileAds.setRequestConfiguration(RequestConfiguration.Builder().setTestDeviceIds(deviceIds).build())
                        

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2012-08-11
                          • 2018-02-11
                          • 2016-04-19
                          相关资源
                          最近更新 更多