Jak mogę uzyskać identyfikator urządzenia dla AdMob

102

Używam Eclipse do tworzenia aplikacji na Androida i chcę zintegrować Admob, aby zarabiać pieniądze. Samouczek mówi, że powinienem obejrzeć LogCat, aby znaleźć identyfikator, ale gdzie on jest? tekst alternatywny

Kiedy uruchamiam się w trybie testowym lub w trybie rzeczywistym, czasami zaćmienie powiadomi, że Ads zwrócił, ale nie widać tego w emu ... czy ktoś może wyjaśnić?

Sheldon Rong
źródło

Odpowiedzi:

103

Jeśli wyświetlasz reklamy AdMob na emulatorze, nie ma identyfikatora. po prostu użyj metody AdManager i ustaw ją na TEST_EMULATOR, tak jak mówi logcat. Jeśli uruchomisz na rzeczywistym urządzeniu z debugowaniem USB i obejrzysz logcat, identyfikator pojawi się tam.

Fobos
źródło
50
Po przefiltrowaniu za pomocą wyżej wymienionych terminów „adRequest”, znajdziesz wiersz - „12-19 17: 48: 25.615: I / Ads (2132): Aby pobrać reklamy testowe na to urządzenie, zadzwoń do adRequest.addTestDevice („ D9XXXXXXXXXXXXXXXXXXXXXXXXXXX ");". Po prostu skopiuj, wklej kod i baw się dobrze.
Ashok Goli
5
Mój dziennik mówi: „Użyj AdRequest.Builder.addTestDevice („ 5EXXXX etc ”), aby pobrać reklamy testowe na to urządzenie.”
Mark Bridges
2
Wystarczy wpisać „addTestDevice” w polu filtru na logcat.
Gayan Weerakutti
Czy możemy znaleźć identyfikator urządzenia z podpisanego pliku APK, który jest opublikowany w Google Play?
Gayan Weerakutti
108

Zaakceptowane odpowiedzi będą działać, jeśli testujesz tylko na emulatorze lub na kilku urządzeniach, ale jeśli testujesz na wielu urządzeniach, możesz potrzebować pewnych środków, aby proporcjonalnie dodać identyfikator uruchomionego urządzenia.

Poniższy kod programowo sprawi, że aktualnie działające urządzenie stanie się urządzeniem testowym 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
    }

Musisz użyć md5 identyfikatora Androida i musi to być wielkie litery. Oto kod md5, którego użyłem

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 "";
}

EDYCJA: Najwyraźniej metoda MD5 nie jest idealna i zasugerowano wypróbowanie https://stackoverflow.com/a/21333739/2662474 Nie potrzebuję już tej funkcji, więc nie testowałem. Powodzenia!

józef
źródło
1
Jest to prawdopodobnie lepsze niż wywołanie, com.google.android.gms.internal.cm.l(Context ctx)które jest wewnętrzną zaciemnioną metodą (w wersji 4.0.30), która zwraca identyfikator, o którym mowa
Amr Mostafa
Dziękuję Ci za to! Wystarczy umieścić go w Pythonie import hashlib; hashlib.md5(android_id.lower()).hexdigest().upper(). W ten sposób możesz po prostu pobrać aplikację, aby pokazać swój identyfikator Androida i wziąć MD5.
douggard
a klasa Settings pochodzi z jakiego pakietu?
oabarca
@joseph to nie działa poprawnie. brakuje niektórych znaków.
5er
5
Zobacz tę odpowiedź: stackoverflow.com/a/21333739/4019544 Ta implementacja nie obsługuje niektórych zer, podobnie jak zaakceptowana odpowiedź w poście, do którego link znajduje się tutaj.
MaxJ
17

Coś podobnego do Google Ads, z dokumentacji:

public AdRequest.Builder addTestDevice (String deviceId)

Powoduje, że urządzenie otrzymuje reklamy testowe. DeviceId można uzyskać, przeglądając dane wyjściowe logcat po utworzeniu nowej reklamy. W przypadku emulatorów użyj DEVICE_ID_EMULATOR.

na przykład mój identyfikator urządzenia testowego wyświetlany w LogCat to "B86BC9402A69B031A516BC57F7D3063F":

AdRequest adRequest = new AdRequest.Builder() 
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
        .addTestDevice("B86BC9402A69B031A516BC57F7D3063F")
        .build();
Jorgesys
źródło
16
  • Czy Twoja aplikacja jest opublikowana w Sklepie Play - z aktywnymi reklamami :

Jeśli Twoja aplikacja jest w Sklepie Play i wyświetla aktywne reklamy - nie możesz używać rzeczywistych reklam do testowania - dodaj identyfikator urządzenia w kodzie, aby uzyskać reklamy testowe z AdMob na swoim prawdziwym urządzeniu. Nigdy nie używaj aktywnych reklam podczas programowania lub testowania.

Aby uzyskać prawdziwy identyfikator urządzenia w logcat,

  1. Podłącz urządzenie w trybie debugowania USB do Android Studio

Tryb debugowania USB (opcja programisty)

  1. Otwórz dowolną aplikację na swoim urządzeniu, która wyświetla reklamy na żywo z AdMob: na podłączonym urządzeniu, jeśli masz aplikację pobraną ze Sklepu Play (wyświetlającą reklamy na żywo), otwórz tę aplikację lub otwórz dowolną inną aplikację, która wyświetla reklamy AdMob na żywo. Twoje urządzenie powinno mieć połączenie z Internetem.

  2. Przefiltruj logcat za pomocą „urządzenia”, jak pokazano poniżej, aby uzyskać urządzenie testowe

Testuj identyfikator urządzenia w logcat

Przeczytaj testowanie reklam AdMob na urządzenie - identyfikatory urządzeń mogą ulec zmianie na bardziej

Pinky Walve
źródło
Szukałem podczas uruchamiania Unity Dev Build i ten działał. Dzięki.
Avisek Chakraborty
13

Aby uzyskać identyfikator urządzenia mieszającego

wewnątrz oncreate

String android_id = Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
        String deviceId = md5(android_id).toUpperCase();
Log.i("device id=",deviceId);

następnie dodaj tę klasę do 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 "";
    }
Cristiana Chavez
źródło
Dzięki, ale tak naprawdę jest subtelny błąd w twojej funkcji md5 (). Wiersz, w którym dodajesz do hexString, powinien wyglądać następująco: hexString.append(String.format("%02X", 0xFF & messageDigest[i])); Twoja implementacja da niepoprawne dane wyjściowe dla wartości bajtów 15 lub mniejszych, ponieważ wiodące zero nie zostanie wyprowadzone.
Ant
Twój md5 () generuje nieprawidłowy identyfikator, oczekiwano 561600E037F6E9EEBE405B487459D786, ale 56160E037F6E9EEBE405B487459D786
Foobnix
7

Jeśli wyświetlasz reklamy za pomocą układu XML i masz już „ads: testDevices =” w pliku XML układu, AdMob NIE wydrukuje komunikatu „Aby pobrać reklamy testowe na tym urządzeniu ...” w danych wyjściowych LogCat. Wyjmij to, a zobaczysz komunikat LogCat.

Oto fajny samouczek, jak znaleźć identyfikator urządzenia w LogCat: http://webhole.net/2011/12/02/android-sdk-tutorial-get-admob-test-device-id/

Oto Zars
źródło
7

Jeśli testujesz swoją aplikację na rzeczywistym urządzeniu, możesz wypróbować tę małą aplikację na Androida, która podaje identyfikator urządzenia:

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

Otrzymasz zaszyfrowany identyfikator urządzenia bezpośrednio. Mam nadzieję że to pomoże.

Sanath Bharadwaj
źródło
Nie jestem pewien, o co chodziło w tym pytaniu. Jak pamiętam z emulatora nie da się zainstalować ze sklepu Play. Prawdopodobnie lepsze byłoby rozwiązanie bardziej programowe (lub odpowiednie części źródła tej aplikacji).
Gábor Bakos
1
Cóż, wielu z nich opublikowało rozwiązania programowe. Właśnie to opublikowałem, ponieważ jest to trochę łatwy i prosty sposób na uzyskanie identyfikatora, chociaż nie działa na emulatorze. W każdym razie zredagowałem odpowiedź.
Sanath Bharadwaj
Nie zapewnia już prawidłowego identyfikatora.
Evorlor
6

Innym najłatwiejszym sposobem wyświetlania reklam testowych jest użycie identyfikatora urządzenia testowego dla banera, aby wyświetlić reklamy testowe AdMob dla wszystkich urządzeń . „ ca-app-pub-3940256099942544/6300978111 ”. Ten identyfikator reklam testowych AdMob został odnotowany w samouczku AdMob Google: link . Oto cytat z powyższego linku: wprowadź opis obrazu tutaj

  • To jest identyfikator urządzenia testowego reklamy pełnoekranowej „ ca-app-pub-3940256099942544/1033173712 ”. Zostało to również użyte w samouczku pełnoekranowym
huu duy
źródło
5

Jeśli nie dostaniesz go w logcat, po prostu umieść identyfikator urządzenia, załaduj reklamy i uruchom aplikację, a następnie przejdź do dziennika, który otrzymasz w ten sposób I/Ads: Use AdRequest.Builder.addTestDevice("XXXXXXXXXXXXXXXXXXXXXXXXX") to get test ads on this device., umieść go i ponownie uruchom aplikację.

Kontekst
źródło
5

Aby uzyskać identyfikator urządzenia, podłącz telefon do USB i otwórz logcat w Android Studio Użyj poniższego kodu (upewnij się, że masz włączone debugowanie USB w urządzeniu). Następnie otwórz dowolną aplikację (pobierz dowolną losową aplikację ze sklepu Play), która ma reklamę Google. W Logcat wpisz „set”, jak pokazano na obrazku. Identyfikator Twojego urządzenia jest wyróżniony na obrazie jako

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

wprowadź opis obrazu tutaj

Użyj urządzenia testowego w swoim kodzie, jak pokazano

val adRequest = AdRequest
        .Builder()
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
        .addTestDevice("CC9DW7W7R4H0NM3LT9OLOF7455F8800D")
        .build()
Ahmed Raza
źródło
4

Mam kilka urządzeń, na których testowałem, i nie chciałem ręcznie pobierać DeviceID dla każdego z nich. Odpowiedzi tutaj, aby programowo uzyskać identyfikatory DeviceID, nie działały dla mnie (brakujące zera), co spowodowało, że zamiast reklam testowych były wyświetlane prawdziwe reklamy.

Umieszczam to w mojej klasie Application onCreate, a następnie ujawniam deviceId przy użyciu metody getter, aby można było uzyskać do niego dostęp w całym tekście.

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

I metoda 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;
}

Następnie używam tego za każdym razem, gdy tworzę obiekt 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);
}
MaxJ
źródło
4

Działa w ten sposób:

InterstitialAd mInterstitial = new InterstitialAd(this);
    mInterstitial.setAdUnitId("your id");
    AdRequest adRequest = new AdRequest.Builder()
    .addTestDevice("some words")
    .build();
    mInterstitial.loadAd(adRequest);

Po uruchomieniu aplikacji ... Idź do Logcat, wstaw Verbose w polu wyszukiwania AdRequest, aby urządzenie id wyświetlało donw.

wprowadź opis obrazu tutaj

.addTestDevice ("umieść tutaj identyfikator");

Mam nadzieję, że pomogłem;

Douglas
źródło
2

Dodaj tę klasę do swojego projektu

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 "";
        }

    }
}

Stosowanie:

AdRequest adRequest = AdsHelper.createRequest(this);
Gil SH
źródło
Dzięki, wynik jest taki sam, jak ten pokazany w logcat przez adRequest.
user2342558
0

aplikacja: build.gradle

dependencies {
...
compile 'com.google.firebase:firebase-ads:10.0.1'
...
}

Twoja aktywność:

 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);
NickUnuchek
źródło