如何获取Admob的设备ID

时间:2010-12-24 06:58:19

标签: android eclipse admob

我正在使用Eclipse为Android开发应用程序,我想整合Admob来赚钱。 教程说我应该看LogCat找到ID,但它在哪里? alt text

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

14 个答案:

答案 0 :(得分:98)

如果您只是在仿真器或少数设备上进行测试,则接受的答案将起作用,但如果您在大量设备上进行测试,则可能需要一些以编程方式添加正在运行的设备的设备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 :(得分:94)

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

答案 2 :(得分:16)

类似于Google广告的内容,来自文档:

  

public AdRequest.Builder addTestDevice(String deviceId)

     

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

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

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

答案 3 :(得分:13)

获取哈希设备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 "";
    }

答案 4 :(得分:10)

  • 您的应用是否已在Play商店发布 - 包含实时广告

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

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

  1. 将USB调试模式下的设备连接到Android Studio
  2. USB debug mode(Developer option)

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

    2. 使用&#39;设备&#39;过滤logcat。如下图所示获得测试设备

    3. Test Device ID in logcat

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

答案 5 :(得分:7)

如果您使用XML布局展示广告,并且您的布局XML文件中已经有“ads:testDevices =”,则AdMob将不会在LogCat输出中打印“在此设备上获取测试广告...”消息。拿出来,然后你会看到LogCat消息。

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

答案 6 :(得分:7)

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

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

您将直接获得哈希设备ID。 希望这会有所帮助。

答案 7 :(得分:6)

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

突出显示。

setTestDeviceIds(Arrays.asList(“ CC9DW7W7R4H0NM3LT9OLOF7455F8800D”))

enter image description here

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

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

答案 8 :(得分:5)

如果您未在 logcat 中输入设备ID 并加载广告并运行您的应用,请转到你会得到它的日志I/Ads: Use AdRequest.Builder.addTestDevice("XXXXXXXXXXXXXXXXXXXXXXXXX") to get test ads on this device.然后把它放回来再运行你的应用程序。

答案 9 :(得分:5)

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

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

答案 10 :(得分:4)

我有一些我正在测试的设备,并且不想手动获取每个设备的DeviceID。这里以编程方式获取DeviceID的答案对我不起作用(Missing zeros)导致显示真实广告而不是测试广告。

我将它放在我的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);
}

答案 11 :(得分: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。

enter image description here

.addTestDevice(&#34;把ID放在这里&#34;);

我希望有所帮助;

答案 12 :(得分:0)

app: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);

答案 13 :(得分:0)

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

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