Як отримати ідентифікатор пристрою для Admob


102

Я використовую Eclipse для розробки програм для Android, і хочу інтегрувати Admob, щоб заробити гроші. У підручнику сказано, що я повинен спостерігати за LogCat, щоб знайти ідентифікатор, але де це? alt текст

Коли я запускаюсь або в тестовому, або в реальному режимі, іноді затемнення сповіщатиме про те, що Оголошення повернулися, але воно не відображається в ему ... може хтось пояснить?

Відповіді:


103

Якщо ви показуєте рекламні оголошення на емуляторі, ідентифікатора немає. просто використовуйте метод AdManager і встановіть його на TEST_EMULATOR, як говорить logcat. Якщо ви працюєте на фактичному пристрої з налагодженням usb і спостерігаєте за лог-котом, там з'явиться ідентифікатор.


50
Після фільтрації за допомогою вищезазначених термінів "adRequest" ви знайдете рядок - "12-19 17: 48: 25.615: I / Ads (2132): Щоб отримати тестові оголошення на цьому пристрої, зателефонуйте adRequest.addTestDevice (" D9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ");". Просто скопіюйте вставте код і отримайте задоволення.
Ашок Голі

5
Мій журнал говорить: "Використовуйте AdRequest.Builder.addTestDevice (" 5EXXXX тощо "), щоб отримати тестові оголошення на цьому пристрої."
Марк Бриджес

2
Просто введіть "addTestDevice" у полі фільтра на logcat.
Гаян Веракутті

Чи можемо ми знайти ідентифікатор пристрою у створеному APK, який публікується в Google Play?
Gayan Weerakutti

108

Прийняті відповіді спрацюють, якщо ви протестуєте лише на Емуляторі або на кількох пристроях, але якщо ви тестуєте на безлічі пристроїв, можливо, вам знадобляться певні засоби, щоб додати ідентифікатор пристрою працюючого пристрою.

Наступний код перетворить поточний працюючий пристрій в тестовий пристрій для перегляду програм

...
    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 ID, і він повинен мати верхній регістр. Ось код 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 "";
}

EDIT: Мабуть, метод MD5 не ідеальний, і було запропоновано спробувати https://stackoverflow.com/a/21333739/2662474 Мені ця функція більше не потрібна, тому я не перевіряв. Удачі!


1
Це, мабуть, краще, ніж викликати com.google.android.gms.internal.cm.l(Context ctx)внутрішній затуманений метод (у версії 4.0.30), який повертає повертає ідентифікатор, про який йде мова,
Amr Mostafa

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

і клас Налаштування походить з якого пакета?
oabarca

@joseph це не працює належним чином. у ньому відсутні деякі символи.
5ер

5
Дивіться цю відповідь: stackoverflow.com/a/21333739/4019544 Ця реалізація не обробляє деякі нулі, подібні до прийнятої відповіді на посилання, пов’язаному тут.
MaxJ

17

Щось схоже на Google Ads, з документації:

загальнодоступний AdRequest.Builder addTestDevice (String 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

Прочитайте тестування реклами Admob на пристрої - ідентифікатори пристрою можуть змінитися для отримання додаткової інформації


Я дивився під час роботи Unity Dev Build, і цей працював. Дякую.
Avisek Chakraborty

13

Щоб отримати ідентифікатор пристрою Hash

всередині творити

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 () генерує неправильний ідентифікатор, очікується 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=uk

Ви отримаєте ідентифікатор хешованих пристроїв безпосередньо. Сподіваюся, це допомагає.


Я не впевнений, про це йшлося. Як я пам'ятаю з емулятора, ви не можете встановити його з магазину Play. Можливо, було б краще програмне рішення (або відповідні частини джерела цього додатка).
Габор Бакос

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 Ad. У Logcat введіть "set", як показано на зображенні. Ідентифікатор пристрою відображається на зображенні як

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

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

Використовуйте тестовий пристрій у своєму коді, як показано

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

4

У мене є кілька пристроїв, на яких я тестував, і не хотів вручну отримувати DeviceID для кожного з них. Тут відповіді на програмне отримання DeviceID не працювали для мене (відсутні нулі), що спричинило показ реальних оголошень замість тестових.

Я ставлю це до свого класу Application onCreate, а потім відкриваю deviceId за допомогою методу getter, щоб йому можна було отримати доступ протягом усього часу.

@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 ("поставити ідентифікатор сюди");

Я сподіваюся, що допомогли;


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

Дякуємо, результат такий же, як показаний у 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.