Come posso ottenere l'ID dispositivo per Admob


102

Sto usando Eclipse per sviluppare applicazioni per Android e voglio integrare Admob per fare soldi. Il tutorial dice che dovrei guardare LogCat per trovare l'ID, ma dov'è? testo alternativo

Quando eseguo in modalità test o in modalità reale, a volte l'eclissi avviserà che gli annunci sono tornati, ma non viene visualizzato nell'emu ... qualcuno può spiegare?

Risposte:


103

Se stai eseguendo annunci adMob su un emulatore, non è presente alcun ID. usa semplicemente il metodo AdManager e impostalo su TEST_EMULATOR come dice il logcat. Se esegui su un dispositivo reale con debug USB e guardi il logcat, l'ID apparirà lì.


50
Dopo aver filtrato utilizzando i termini sopra menzionati "adRequest", troverai una riga - "12-19 17: 48: 25.615: I / Ads (2132): per ottenere annunci di prova su questo dispositivo, chiama adRequest.addTestDevice (" D9XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ");". Copia e incolla il codice e divertiti.
Ashok Goli

5
Il mio registro dice: "Usa AdRequest.Builder.addTestDevice (" 5EXXXX ecc ") per ottenere annunci di prova su questo dispositivo."
Mark Bridges

2
Basta digitare "addTestDevice" nel campo del filtro sul logcat.
Gayan Weerakutti

Possiamo trovare l'ID del dispositivo da un APK bruciato, pubblicato su Google Play?
Gayan Weerakutti

108

Le risposte accettate funzioneranno se stai testando solo sull'emulatore o su alcuni dispositivi, ma se stai testando su una pletora di dispositivi, potresti aver bisogno di alcuni mezzi per aggiungere prorammaticamente l'ID del dispositivo in esecuzione.

Il codice seguente trasformerà il dispositivo in esecuzione corrente in un dispositivo di test adview a livello di codice

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

È necessario utilizzare l'md5 dell'ID Android e deve essere maiuscolo. Ecco il codice md5 che ho usato

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: Apparentemente quel metodo MD5 non è perfetto, ed è stato suggerito di provare https://stackoverflow.com/a/21333739/2662474 Non ho più bisogno di questa funzione, quindi non l'ho testato. In bocca al lupo!


1
Questo è probabilmente meglio che chiamare com.google.android.gms.internal.cm.l(Context ctx)che è il metodo interno offuscato (nella versione 4.0.30) che restituisce l'ID in questione
Amr Mostafa

Grazie per questo! Giusto per metterlo in Python, import hashlib; hashlib.md5(android_id.lower()).hexdigest().upper(). In questo modo puoi semplicemente scaricare un'app per mostrare il tuo ID Android e prenderne l'MD5.
douggard

e la classe Impostazioni proviene da quale pacchetto?
oabarca

@ Joseph questo non funziona correttamente. mancano alcuni personaggi.
5er

5
Vedi questa risposta: stackoverflow.com/a/21333739/4019544 Questa implementazione non gestisce alcuni zeri, simile alla risposta accettata sul post collegato qui.
MaxJ

17

Qualcosa di simile a Google Ads, dalla documentazione:

public AdRequest.Builder addTestDevice (String deviceId)

Fa sì che un dispositivo riceva annunci di prova. Il deviceId può essere ottenuto visualizzando l'output di logcat dopo aver creato un nuovo annuncio. Per gli emulatori, utilizza DEVICE_ID_EMULATOR.

ad esempio il mio ID dispositivo di prova visualizzato in LogCat è "B86BC9402A69B031A516BC57F7D3063F":

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

16
  • La tua app è stata pubblicata su Play Store - con annunci dal vivo :

Se la tua app è sul Play Store e mostra annunci dal vivo (non puoi utilizzare annunci dal vivo per i test) aggiungi il tuo ID dispositivo nel codice per ottenere annunci di prova da Admob sul tuo dispositivo reale. Non utilizzare mai annunci dal vivo durante lo sviluppo o il test.

Per ottenere l'ID dispositivo reale in logcat,

  1. Collega il tuo dispositivo in modalità debug USB ad Android Studio

Modalità debug USB (opzione sviluppatore)

  1. Apri qualsiasi app sul tuo dispositivo che mostra annunci dal vivo da AdMob: sul dispositivo connesso, se hai scaricato la tua app dal Play Store (che mostra annunci dal vivo) apri quell'app oppure apri qualsiasi altra app che mostra annunci Admob dal vivo. Il tuo dispositivo dovrebbe avere una connessione Internet.

  2. Filtra il logcat con "dispositivo" come mostrato di seguito per ottenere il dispositivo di prova

Test ID dispositivo in logcat

Leggi Test degli annunci AdMob sul dispositivo: gli ID dispositivo possono cambiare di più


Stavo cercando durante l'esecuzione di Unity Dev Build e questo ha funzionato. Grazie.
Avisek Chakraborty

13

Per ottenere l'ID dispositivo hash

all'interno di oncreate

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

quindi aggiungi questa classe per 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 "";
    }

Grazie, ma in realtà c'è un sottile bug nella tua funzione md5 (). La riga in cui aggiungi a hexString dovrebbe essere questa: la hexString.append(String.format("%02X", 0xFF & messageDigest[i])); tua implementazione darà un output non corretto su valori di byte di 15 o meno poiché lo zero iniziale non verrà emesso.
Ant

il tuo md5 () genera un ID errato, previsto 561600E037F6E9EEBE405B487459D786 ma 56160E037F6E9EEBE405B487459D786
Foobnix


7

Se stai testando la tua app sul dispositivo reale, puoi provare questa piccola app per Android che ti fornisce l'ID del dispositivo:

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

Otterrai direttamente l'ID del dispositivo sottoposto ad hashing. Spero che questo ti aiuti.


Non sono sicuro che sia questo l'argomento della domanda. Come ricordo dall'emulatore non puoi installare dal Play Store. Probabilmente una soluzione più programmatica (o le parti rilevanti della fonte di questa app) sarebbe migliore.
Gábor Bakos

1
Ebbene, molti di loro hanno pubblicato soluzioni programmatiche. L'ho appena pubblicato perché è un modo un po 'semplice e diretto per ottenere l'id anche se non funziona sull'emulatore. Comunque ho modificato la risposta.
Sanath Bharadwaj

Non fornisce più l'ID corretto.
Evorlor

6

Un altro modo più semplice per mostrare annunci di prova è utilizzare l'ID dispositivo di prova per il banner per mostrare annunci di prova admob per tutti i dispositivi . " ca-app-pub-3940256099942544/6300978111 ". Questo ID annunci di prova admob è stato annotato nel tutorial admob di google: link . Questa è la citazione dal link sopra: inserisci qui la descrizione dell'immagine

  • Questo è l'ID del dispositivo di prova per l'interstitial " ca-app-pub-3940256099942544/1033173712 ". Questo è stato utilizzato anche nel tutorial interstitial

5

Se non lo ottieni nel logcat, metti semplicemente un ID dispositivo e carica gli annunci ed esegui la tua app, quindi vai al registro lo otterrai così, I/Ads: Use AdRequest.Builder.addTestDevice("XXXXXXXXXXXXXXXXXXXXXXXXX") to get test ads on this device.dopodiché mettilo ed esegui di nuovo la tua applicazione.


5

Per ottenere l'ID del dispositivo, collega il telefono a USB e apri logcat in Android Studio Usa il codice seguente (assicurati di avere il debug USB abilitato nel tuo dispositivo). Quindi apri qualsiasi app (scarica qualsiasi app casuale dal Play Store) che abbia Google Ad. Nel Logcat digitare "set" come mostrato nell'immagine. L'ID del tuo dispositivo è evidenziato nell'immagine come

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

inserisci qui la descrizione dell'immagine

Usa il dispositivo di prova nel codice come mostrato

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

4

Ho alcuni dispositivi su cui stavo testando e non volevo ottenere manualmente il DeviceID per ciascuno di essi. Le risposte qui per ottenere programmaticamente gli ID dispositivo non funzionavano per me (zero mancanti), il che ha causato la visualizzazione di annunci reali invece di annunci di prova.

L'ho inserito nella mia classe Application onCreate, quindi ho esposto deviceId utilizzando un metodo getter in modo che sia possibile accedervi dappertutto.

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

E il metodo 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;
}

Quindi lo utilizzo ogni volta che creo un oggetto 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

Funziona in questo modo:

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

Dopo aver eseguito l'app ... Vai in Logcat, inserisci Verbose e inserisci nel campo di ricerca AdRequest, quindi il dispositivo ID mostra donw.

inserisci qui la descrizione dell'immagine

.addTestDevice ("metti l'id qui");

Spero di aver aiutato;


2

Aggiungi questa classe al tuo progetto

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

    }
}

Utilizzo:

AdRequest adRequest = AdsHelper.createRequest(this);

Grazie, il risultato è lo stesso mostrato nel logcat da adRequest.
user2342558

0

app: build.gradle

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

La tua attività:

 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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.