Comment puis-je obtenir l'identifiant de l'appareil pour Admob

102

J'utilise Eclipse pour développer des applications pour Android et je souhaite intégrer Admob pour gagner de l'argent. Le tutoriel dit que je devrais regarder le LogCat pour trouver l'ID, mais où est-il? texte alternatif

Lorsque je cours en mode test ou en mode réel, parfois l'éclipse notifiera que les annonces sont retournées, mais cela ne s'affiche pas dans l'émeu ... Quelqu'un peut-il expliquer?

Sheldon Rong
la source

Réponses:

103

Si vous exécutez des publicités admob sur un émulateur, il n'y a pas d'identifiant. utilisez simplement la méthode AdManager et définissez-la sur TEST_EMULATOR comme le dit logcat. Si vous exécutez sur un appareil réel avec débogage USB et regardez le logcat, l'ID y apparaîtra.

Phobos
la source
50
Après avoir filtré à l'aide des termes "adRequest" mentionnés ci-dessus, vous trouverez une ligne - "12-19 17: 48: 25.615: I / Ads (2132): pour obtenir des annonces de test sur cet appareil, appelez adRequest.addTestDevice (" D9XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ");". Copiez-collez le code et amusez-vous.
Ashok Goli
5
Mon journal dit: "Utilisez AdRequest.Builder.addTestDevice (" 5EXXXX etc ") pour obtenir des annonces de test sur cet appareil."
Mark Bridges
2
Tapez simplement "addTestDevice" dans le champ de filtrage du logcat.
Gayan Weerakutti
Pouvons-nous trouver l'identifiant de l'appareil à partir d'un fichier APK unique publié sur Google Play?
Gayan Weerakutti
108

Les réponses acceptées fonctionneront si vous ne testez que sur l'émulateur ou sur quelques appareils, mais si vous testez sur une pléthore d'appareils, vous aurez peut-être besoin de moyens pour ajouter prorammatiquement l'ID de l'appareil en cours d'exécution.

Le code suivant transformera l'appareil en cours d'exécution en un appareil de test de visualisation par programmation

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

Vous devez utiliser le md5 de l'ID Android et il doit être en majuscules. Voici le code md5 que j'ai utilisé

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: Apparemment, cette méthode MD5 n'est pas parfaite, et il a été suggéré d'essayer https://stackoverflow.com/a/21333739/2662474 Je n'ai plus besoin de cette fonctionnalité, donc je n'ai pas testé. Bonne chance!

joseph
la source
1
C'est probablement mieux que d'appeler com.google.android.gms.internal.cm.l(Context ctx)qui est la méthode obscurcie interne (dans la version 4.0.30) qui retourne l'ID en question
Amr Mostafa
Merci pour ça! Juste pour le mettre en Python, import hashlib; hashlib.md5(android_id.lower()).hexdigest().upper(). De cette façon, vous pouvez simplement télécharger une application pour afficher votre identifiant Android et en prendre le MD5.
douggard
et la classe Settings provient de quel package?
oabarca
@joseph cela ne fonctionne pas correctement. il manque quelques personnages.
5er
5
Voir cette réponse: stackoverflow.com/a/21333739/4019544 Cette implémentation ne gère pas certains zéros, similaire à la réponse acceptée sur le post lié ici.
MaxJ
17

Quelque chose de similaire à Google Ads, dans la documentation:

public AdRequest.Builder addTestDevice (String deviceId)

Fait en sorte qu'un appareil reçoive des annonces de test. Le deviceId peut être obtenu en affichant la sortie logcat après avoir créé une nouvelle annonce. Pour les émulateurs, utilisez DEVICE_ID_EMULATOR.

par exemple, mon identifiant de périphérique de test affiché dans LogCat est "B86BC9402A69B031A516BC57F7D3063F":

AdRequest adRequest = new AdRequest.Builder() 
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
        .addTestDevice("B86BC9402A69B031A516BC57F7D3063F")
        .build();
Jorgesys
la source
16
  • Votre application est-elle publiée sur le Play Store - avec des publicités en direct :

Si votre application est sur le Play Store et affiche des annonces en direct (vous ne pouvez pas utiliser d'annonces en direct pour les tests), ajoutez l'identifiant de votre appareil dans le code pour obtenir des annonces de test d'Admob sur votre appareil réel. N'utilisez jamais d'annonces en direct pendant le développement ou les tests.

Pour obtenir un véritable ID de périphérique dans logcat,

  1. Connectez votre appareil en mode débogage USB à Android Studio

Mode de débogage USB (option développeur)

  1. Ouvrez n'importe quelle application sur votre appareil qui diffuse des publicités en direct d'Admob: sur l'appareil connecté, si votre application est téléchargée depuis le Play Store (diffusant des publicités en direct), ouvrez cette application ou ouvrez toute autre application qui affiche des publicités Admob en direct. Votre appareil doit disposer d'une connexion Internet.

  2. Filtrez le logcat avec `` périphérique '' comme indiqué ci-dessous pour obtenir le périphérique de test

ID du périphérique de test dans logcat

Lire les tests d'annonces Admob sur l'appareil - les identifiants d'appareils peuvent changer pour plus

Pinky Walve
la source
Je cherchais en exécutant Unity Dev Build et celui-ci a fonctionné. Merci.
Avisek Chakraborty le
13

Pour obtenir l'ID de périphérique de hachage

à l'intérieur du oncreate

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

puis ajoutez cette classe pour 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
la source
Merci, mais il y a en fait un bug subtil dans votre fonction md5 (). La ligne où vous ajoutez à hexString devrait être la suivante: hexString.append(String.format("%02X", 0xFF & messageDigest[i])); Votre implémentation donnera une sortie incorrecte sur des valeurs d'octet de 15 ou moins car le zéro non significatif ne sera pas affiché .
Ant
votre md5 () génère un ID incorrect, attendu 561600E037F6E9EEBE405B487459D786 mais 56160E037F6E9EEBE405B487459D786
Foobnix
7

Si vous diffusez des annonces en utilisant une mise en page XML et si vous avez déjà "ads: testDevices =" dans votre fichier XML de mise en page, AdMob n'imprimera PAS le message "Pour obtenir des annonces de test sur cet appareil ..." dans la sortie LogCat. Retirez-le et vous verrez le message LogCat.

Voici un joli tutoriel sur la façon de trouver l'identifiant de l'appareil dans LogCat: http://webhole.net/2011/12/02/android-sdk-tutorial-get-admob-test-device-id/

Oto Zars
la source
7

Si vous testez votre application sur un appareil réel, vous pouvez essayer cette petite application Android qui vous donne l'identifiant de l'appareil:

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

Vous obtiendrez directement l'identifiant de l'appareil haché. J'espère que cela t'aides.

Sanath Bharadwaj
la source
Je ne suis pas sûr que c’était le sujet de la question. Comme je me souviens de l'émulateur, vous ne pouvez pas installer à partir du Play Store. Une solution plus programmatique (ou les parties pertinentes de la source de cette application) serait probablement meilleure.
Gábor Bakos
1
Eh bien, beaucoup d'entre eux ont publié des solutions programmatiques. Je viens de publier ceci parce que c'est un moyen un peu simple et direct d'obtenir l'identifiant bien que cela ne fonctionne pas sur l'émulateur. Quoi qu'il en soit, j'ai modifié la réponse.
Sanath Bharadwaj du
Ne fournit plus l'ID correct.
Evorlor le
6

Un autre moyen le plus simple de diffuser des annonces de test consiste à utiliser l'ID de l'appareil de test pour la bannière afin d'afficher des annonces de test admob pour tous les appareils . " ca-app-pub-3940256099942544/6300978111 ". Cet identifiant d'annonce de test admob a été noté dans le didacticiel admob de google: link . Voici la citation du lien ci-dessus: entrez la description de l'image ici

  • Il s'agit de l'identifiant de l'appareil de test pour l'interstitiel " ca-app-pub-3940256099942544/1033173712 ". Cela a également été utilisé dans le didacticiel interstitiel
huu duy
la source
5

Si vous ne l'obtenez pas dans le logcat, mettez simplement un identifiant d'appareil et chargez vos annonces et exécutez votre application, puis accédez au journal, vous l'obtiendrez comme ça I/Ads: Use AdRequest.Builder.addTestDevice("XXXXXXXXXXXXXXXXXXXXXXXXX") to get test ads on this device.après cela, mettez-le et exécutez à nouveau votre application.

Le contexte
la source
5

Pour obtenir l'identifiant de l'appareil, connectez votre téléphone à l'USB et ouvrez logcat dans Android Studio Utilisez le code ci-dessous (assurez-vous que le débogage USB est activé sur votre appareil). Ensuite, ouvrez n'importe quelle application (téléchargez n'importe quelle application aléatoire à partir du Play Store) qui a Google Ad. Dans le type de Logcat "set" comme indiqué dans l'image. L'identifiant de votre appareil est affiché en surbrillance dans l'image comme

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

entrez la description de l'image ici

Utilisez le dispositif de test dans votre code comme indiqué

val adRequest = AdRequest
        .Builder()
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
        .addTestDevice("CC9DW7W7R4H0NM3LT9OLOF7455F8800D")
        .build()
Ahmed Raza
la source
4

J'ai quelques appareils sur lesquels je testais et je ne voulais pas obtenir manuellement le DeviceID pour chacun d'eux. Les réponses ici pour obtenir par programme les DeviceID ne fonctionnaient pas pour moi (zéros manquants), ce qui a entraîné la diffusion de vraies annonces au lieu de tests.

Je l'ai mis dans ma classe Application onCreate, puis j'ai exposé deviceId à l'aide d'une méthode getter afin qu'il soit accessible partout.

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

Et la méthode 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;
}

Puis en utilisant ceci chaque fois que je crée un objet 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
la source
4

Fonctionne de cette façon:

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

Après avoir exécuté l'application ... Allez dans Logcat, mettez Verbose dans le champ de recherche AdRequest, de sorte que le périphérique d'identification montre donw.

entrez la description de l'image ici

.addTestDevice ("mettez l'id ici");

J'espère avoir aidé;

Douglas
la source
2

Ajoutez cette classe à votre projet

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

    }
}

Usage:

AdRequest adRequest = AdsHelper.createRequest(this);
Gil SH
la source
Merci, le résultat est le même que celui affiché dans le logcat par adRequest.
user2342558 le
0

application: build.gradle

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

Votre activité:

 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
la source