Wie kann ich die Geräte-ID für Admob erhalten?


102

Ich verwende Eclipse, um Anwendungen für Android zu entwickeln, und ich möchte Admob integrieren, um Geld zu verdienen. Das Tutorial sagt, ich sollte die LogCat beobachten, um die ID zu finden, aber wo ist sie? Alt-Text

Wenn ich entweder im Testmodus oder im Real-Modus laufe, benachrichtigt die Sonnenfinsternis manchmal, dass Anzeigen zurückgegeben wurden, aber sie werden nicht in der Emu angezeigt ... kann jemand erklären?

Antworten:


103

Wenn Sie Admob-Anzeigen auf einem Emulator schalten, gibt es keine ID. Verwenden Sie einfach die AdManager-Methode und setzen Sie sie auf TEST_EMULATOR, wie der Logcat sagt. Wenn Sie auf einem tatsächlichen Gerät mit USB-Debugging ausgeführt werden und den Logcat beobachten, wird die ID dort angezeigt.


50
Nach dem Filtern mit den oben genannten Begriffen "adRequest" finden Sie eine Zeile - "12-19 17: 48: 25.615: I / Ads (2132): Um Testanzeigen auf diesem Gerät zu erhalten, rufen Sie adRequest.addTestDevice (" D9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX auf) ");". Einfach kopieren, Code einfügen und Spaß haben.
Ashok Goli

5
In meinem Protokoll heißt es: "Verwenden Sie AdRequest.Builder.addTestDevice (" 5EXXXX usw. "), um Testanzeigen auf diesem Gerät zu erhalten."
Mark Bridges

2
Geben Sie einfach "addTestDevice" in das Filterfeld des Logcats ein.
Gayan Weerakutti

Können wir die Geräte-ID einer versengten APK finden, die bei Google Play veröffentlicht wurde?
Gayan Weerakutti

108

Die akzeptierten Antworten funktionieren, wenn Sie nur auf dem Emulator oder auf einigen wenigen Geräten testen. Wenn Sie jedoch auf einer Vielzahl von Geräten testen, müssen Sie möglicherweise die Geräte-ID des laufenden Geräts prorammatisch hinzufügen.

Der folgende Code macht das aktuell ausgeführte Gerät programmgesteuert zu einem Adview-Testgerät

...
    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
    }

Sie müssen das MD5 der Android-ID verwenden und es muss in Großbuchstaben geschrieben werden. Hier ist der MD5-Code, den ich verwendet habe

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

BEARBEITEN: Anscheinend ist diese MD5-Methode nicht perfekt, und es wurde vorgeschlagen, https://stackoverflow.com/a/21333739/2662474 zu versuchen. Ich benötige diese Funktion nicht mehr, daher habe ich sie nicht getestet. Viel Glück!


1
Dies ist wahrscheinlich besser als das Aufrufen com.google.android.gms.internal.cm.l(Context ctx)der internen verschleierten Methode (in Version 4.0.30), die die betreffende ID zurückgibt
Amr Mostafa

Danke dafür! Nur um es in Python zu setzen , import hashlib; hashlib.md5(android_id.lower()).hexdigest().upper(). Auf diese Weise können Sie einfach eine App herunterladen, um Ihre Android-ID anzuzeigen und das MD5 davon zu nehmen.
Douggard

und die Settings-Klasse stammt aus welchem ​​Paket?
Oabarca

@ Joseph das funktioniert nicht richtig. es fehlen einige Zeichen.
5er

5
Sehen Sie diese Antwort: stackoverflow.com/a/21333739/4019544 Diese Implementierung ist nicht einige Nullen Handhabung, ähnlich dem akzeptierte Antwort auf die Post hier verlinkt sind .
MaxJ

17

Ähnlich wie bei Google Ads aus der Dokumentation:

public AdRequest.Builder addTestDevice (String deviceId)

Bewirkt, dass ein Gerät Testanzeigen erhält. Die Geräte-ID erhalten Sie, indem Sie die Logcat-Ausgabe nach dem Erstellen einer neuen Anzeige anzeigen. Verwenden Sie für Emulatoren DEVICE_ID_EMULATOR.

Meine in LogCat angezeigte Testgeräte-ID lautet beispielsweise "B86BC9402A69B031A516BC57F7D3063F":

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

15
  • Wird Ihre App im Play Store veröffentlicht - mit Live-Anzeigen :

Wenn Ihre App im Play Store Live-Anzeigen zeigt - Sie können keine Live-Anzeigen zum Testen verwenden - fügen Sie Ihre Geräte-ID im Code hinzu, um Testanzeigen von Admob auf Ihrem realen Gerät zu erhalten. Verwenden Sie niemals Live-Anzeigen während der Entwicklung oder des Testens.

Um eine echte Geräte-ID in logcat zu erhalten,

  1. Verbinden Sie Ihr Gerät im USB-Debug-Modus mit Android Studio

USB-Debug-Modus (Entwickleroption)

  1. Öffnen Sie eine App auf Ihrem Gerät, die Live-Anzeigen von Admob zeigt: Wenn Sie auf dem verbundenen Gerät Ihre App aus dem Play Store heruntergeladen haben (Live-Anzeigen anzeigen), öffnen Sie diese App oder öffnen Sie eine andere App, die Live-Admob-Anzeigen zeigt. Ihr Gerät sollte über eine Internetverbindung verfügen.

  2. Filtern Sie den Logcat mit 'Gerät' wie unten gezeigt, um das Testgerät zu erhalten

Testen Sie die Geräte-ID in logcat

Lesen Sie die Admob-Anzeigentests auf dem Gerät - Geräte-IDs können sich für weitere Änderungen ändern


Ich habe beim Ausführen von Unity Dev Build gesucht und dieser hat funktioniert. Vielen Dank.
Avisek Chakraborty

13

So erhalten Sie die Hash-Geräte-ID

innerhalb des oncreate

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

Fügen Sie dann diese Klasse für md5 () hinzu

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

Danke, aber es gibt tatsächlich einen subtilen Fehler in Ihrer md5 () - Funktion. Die Zeile, in der Sie an hexString anhängen, sollte folgende sein: hexString.append(String.format("%02X", 0xFF & messageDigest[i])); Ihre Implementierung liefert eine falsche Ausgabe bei Bytewerten von 15 oder weniger, da die führende Null nicht ausgegeben wird.
Ameise

Ihr md5 () generiert eine falsche ID, erwartet 561600E037F6E9EEBE405B487459D786, aber 56160E037F6E9EEBE405B487459D786
Foobnix


7

Wenn Sie Ihre App auf einem tatsächlichen Gerät testen, können Sie diese kleine Android-App ausprobieren, die Ihnen die Geräte-ID gibt:

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

Sie erhalten die ID des gehashten Geräts direkt. Hoffe das hilft.


Ich bin mir nicht sicher, worum es bei der Frage ging. Wie ich mich aus dem Emulator erinnere, können Sie nicht aus dem Play Store installieren. Wahrscheinlich wäre eine programmatischere Lösung (oder die relevanten Teile der Quelle dieser App) besser.
Gábor Bakos

1
Nun, so viele von ihnen haben programmatische Lösungen veröffentlicht. Ich habe dies gerade gepostet, weil es ein wenig einfach und unkompliziert ist, die ID zu erhalten, obwohl es auf dem Emulator nicht funktioniert. Wie auch immer, ich habe die Antwort bearbeitet.
Sanath Bharadwaj

Gibt nicht mehr die richtige ID an.
Evorlor

5

Wenn Sie es nicht in den Logcat bekommen, geben Sie einfach eine Geräte-ID ein und laden Sie Ihre Anzeigen und führen Sie Ihre App aus. Gehen Sie dann zum Protokoll, und Sie erhalten es danach. Legen Sie I/Ads: Use AdRequest.Builder.addTestDevice("XXXXXXXXXXXXXXXXXXXXXXXXX") to get test ads on this device.es ab und führen Sie Ihre Anwendung erneut aus.


5

Eine andere einfachste Möglichkeit, Testanzeigen anzuzeigen, besteht darin, die Testgeräte-ID für das Banner zu verwenden, um Admob-Testanzeigen für alle Geräte anzuzeigen . " ca-app-pub-3940256099942544/6300978111 ". Diese Admob-Testanzeigen-ID wurde im Admob-Tutorial von google: link notiert . Dies ist das Zitat aus dem obigen Link: Geben Sie hier die Bildbeschreibung ein


4

Ich habe einige Geräte, auf denen ich getestet habe, und wollte die Geräte-ID nicht für jedes manuell abrufen. Die Antworten hier, um die Geräte-IDs programmgesteuert abzurufen, funktionierten bei mir nicht (fehlende Nullen), was dazu führte, dass echte Anzeigen anstelle von Testanzeigen geschaltet wurden.

Ich habe dies in meine Anwendungsklasse onCreate eingefügt und dann die deviceId mithilfe einer Getter-Methode verfügbar gemacht, damit überall darauf zugegriffen werden kann.

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

Und die MD5-Methode;

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

Verwenden Sie diese Option dann, wenn ich ein AdRequest-Objekt erstelle:

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

Funktioniert so:

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

Nach dem Ausführen der App ... Gehen Sie in Logcat und geben Sie Verbose in das Suchfeld AdRequest ein, damit das ID-Gerät donw anzeigt.

Geben Sie hier die Bildbeschreibung ein

.addTestDevice ("Geben Sie die ID hier ein");

Ich hoffe, ich habe geholfen.


4

Um die Geräte-ID zu erhalten, schließen Sie Ihr Telefon an USB an und öffnen Sie logcat in Android Studio. Verwenden Sie den folgenden Code (stellen Sie sicher, dass auf Ihrem Gerät das USB-Debugging aktiviert ist). Öffnen Sie dann eine beliebige App (laden Sie eine beliebige App aus dem Play Store herunter) mit Google Ad. Geben Sie im Logcat "set" ein, wie im Bild gezeigt. Ihre Geräte-ID wird im Bild als hervorgehoben hervorgehoben

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

Geben Sie hier die Bildbeschreibung ein

Verwenden Sie das Testgerät wie gezeigt in Ihrem Code

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

2

Fügen Sie diese Klasse Ihrem Projekt hinzu

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

    }
}

Verwendung:

AdRequest adRequest = AdsHelper.createRequest(this);

Vielen Dank, das Ergebnis ist das gleiche wie das, das adRequest im Logcat angezeigt hat.
user2342558

0

App: build.gradle

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

Ihre Tätigkeit:

 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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.