Как получить ID устройства для Admob


102

Я использую Eclipse для разработки приложений для Android, и я хочу интегрировать Admob, чтобы зарабатывать деньги. В руководстве говорится, что я должен посмотреть LogCat, чтобы найти идентификатор, но где он? альтернативный текст

Когда я работаю в тестовом или реальном режиме, иногда затмение уведомляет о том, что реклама вернулась, но не отображается в эму ... может кто-нибудь объяснить?

Ответы:


104

Если вы запускаете рекламу admob на эмуляторе, идентификатора нет. просто используйте метод AdManager и установите для него значение TEST_EMULATOR, как говорит logcat. Если вы запустите реальное устройство с отладкой по usb и посмотрите logcat, идентификатор появится там.


50
После фильтрации с использованием вышеупомянутых терминов «adRequest» вы найдете строку - «12-19 17: 48: 25.615: I / Ads (2132): Чтобы получить тестовые объявления на этом устройстве, вызовите adRequest.addTestDevice (« D9XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ");". Просто скопируйте и вставьте код и получайте удовольствие.
Ашок Голи

5
В моем журнале написано: «Используйте AdRequest.Builder.addTestDevice (« 5EXXXX и т. Д. »), Чтобы получить тестовые объявления на этом устройстве».
Марк Бриджес

2
Просто введите «addTestDevice» в поле фильтра в logcat.
Гаян Виракутти,

Можем ли мы найти идентификатор устройства из подписанного APK, опубликованного в Google Play?
Гаян Виракутти,

108

Принятые ответы будут работать, если вы тестируете только на эмуляторе или на нескольких устройствах, но если вы тестируете множество устройств, вам могут потребоваться некоторые средства для программного добавления идентификатора работающего устройства.

Следующий код программно превратит текущее работающее устройство в тестовое устройство 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
    }

Вам нужно использовать md5 идентификатора Android, и он должен быть в верхнем регистре. Вот код 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), который возвращает идентификатор, о котором идет речь,
Амр Мостафа,

Спасибо тебе за это! Просто положить его в Python, import hashlib; hashlib.md5(android_id.lower()).hexdigest().upper(). Таким образом, вы можете просто загрузить приложение, чтобы показать свой Android ID и взять его MD5.
douggard

а класс настроек происходит из какого пакета?
oabarca

@joseph, это работает неправильно. он пропускает некоторые символы.
5er

5
См. Этот ответ: stackoverflow.com/a/21333739/4019544 Эта реализация не обрабатывает некоторые нули, аналогичные принятому ответу в сообщении, указанном здесь.
MaxJ

17

Что-то похожее на Google Рекламу, из документации:

общедоступный AdRequest.Builder addTestDevice (String deviceId)

Заставляет устройство получать тестовые объявления. DeviceId можно получить, просмотрев вывод logcat после создания нового объявления. Для эмуляторов используйте DEVICE_ID_EMULATOR.

например, мой идентификатор тестового устройства, отображаемый в LogCat "B86BC9402A69B031A516BC57F7D3063F":

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

16
  • Публикуется ли ваше приложение в Play Маркете - с живой рекламой :

Если ваше приложение в магазине Play показывает живую рекламу - вы не можете использовать живую рекламу для тестирования - добавьте свой идентификатор устройства в код, чтобы получать тестовые объявления от Admob на своем реальном устройстве. Никогда не используйте живую рекламу во время разработки или тестирования.

Чтобы получить реальный идентификатор устройства в logcat,

  1. Подключите устройство в режиме отладки USB к Android Studio

Режим отладки USB (опция разработчика)

  1. Откройте любое приложение на своем устройстве, которое показывает живую рекламу от Admob: на подключенном устройстве, если у вас есть приложение, загруженное из магазина воспроизведения (показывающее живую рекламу), откройте это приложение или откройте любое другое приложение, которое показывает живую рекламу Admob. Ваше устройство должно быть подключено к Интернету.

  2. Отфильтруйте logcat с помощью «устройства», как показано ниже, чтобы получить тестовое устройство.

ID тестового устройства в logcat

Прочтите Тестирование рекламы Admob на устройстве - идентификаторы устройств могут измениться, чтобы узнать больше


Я смотрел, когда запускал Unity Dev Build, и этот сработал. Спасибо.
Ависек Чакраборти,

13

Чтобы получить идентификатор хэш-устройства

внутри 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 & messageDigest[i])); Ваша реализация будет давать неправильный вывод для байтовых значений 15 или меньше, поскольку начальный ноль не выводится.
Ant

ваш md5 () генерирует неправильный идентификатор, ожидается 561600E037F6E9EEBE405B487459D786, но 56160E037F6E9EEBE405B487459D786
Foobnix

7

Если вы показываете рекламу с использованием XML-макета и у вас уже есть «ads: testDevices =» в XML-файле макета, AdMob НЕ будет печатать сообщение «Чтобы получить тестовые объявления на этом устройстве ...» в выходных данных LogCat. Выньте это, и тогда вы увидите сообщение LogCat.

Вот хороший учебник о том, как найти идентификатор устройства в LogCat: http://webhole.net/2011/12/02/android-sdk-tutorial-get-admob-test-device-id/


7

Если вы тестируете свое приложение на реальном устройстве, вы можете попробовать это небольшое приложение для Android, которое дает вам идентификатор устройства:

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

Вы получите хешированный идентификатор устройства напрямую. Надеюсь это поможет.


Я не уверен, что в этом был вопрос. Насколько я помню, из эмулятора нельзя установить из магазина Play. Возможно, было бы лучше более программное решение (или соответствующие части исходного кода этого приложения).
Gábor Bakos

1
Многие из них опубликовали программные решения. Я просто разместил это, потому что это немного простой и прямой способ получить идентификатор, хотя он не работает на эмуляторе. В любом случае я отредактировал ответ.
Санат Бхарадвадж,

Я пробовал, он дает неправильный идентификатор.
Химаншу Малик,

6

Еще один простой способ показать тестовые объявления - использовать идентификатор тестового устройства для баннера, чтобы показывать тестовые объявления AdMob для всех устройств . " ca-app-pub-3940256099942544/6300978111 ". Этот идентификатор тестовой рекламы admob был отмечен в учебнике по admob на сайте google: link . Это цитата из приведенной выше ссылки: введите описание изображения здесь


5

Если вы не получили его в logcat, просто введите любой идентификатор устройства, загрузите рекламу и запустите приложение, затем перейдите в журнал, и вы получите его вот так, I/Ads: Use AdRequest.Builder.addTestDevice("XXXXXXXXXXXXXXXXXXXXXXXXX") to get test ads on this device.после этого поместите его и снова запустите приложение.


5

Чтобы получить идентификатор устройства, подключите телефон к USB и откройте logcat в студии Android. Используйте приведенный ниже код (убедитесь, что на вашем устройстве включена отладка по USB). Затем откройте любое приложение (загрузите любое случайное приложение из игрового магазина), в котором есть реклама Google. В Logcat введите «набор», как показано на рисунке. Идентификатор вашего устройства выделен на изображении как

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

введите описание изображения здесь

Используйте тестовое устройство в своем коде, как показано

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

4

У меня есть несколько устройств, на которых я тестировал, и я не хотел вручную получать DeviceID для каждого из них. Ответы здесь, чтобы программно получить идентификаторы устройств, не работали для меня (отсутствующие нули), из-за чего вместо тестовых объявлений отображалась настоящая реклама.

Я помещаю это в свой класс Application onCreate, а затем выставляю 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 в поле поиска, чтобы идентификатор устройства показывал donw.

введите описание изображения здесь

.addTestDevice ("поместите сюда идентификатор");

Надеюсь помогло;


3

Добавьте этот класс в свой проект

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

Спасибо, результат такой же, как и в logcat от adRequest.
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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.