¿Cómo puedo obtener el ID de dispositivo para Admob?

102

Estoy usando Eclipse para desarrollar aplicaciones para Android y quiero integrar Admob para ganar dinero. El tutorial dice que debería mirar el LogCat para encontrar la identificación, pero ¿dónde está? texto alternativo

Cuando ejecuto en modo de prueba o en modo real, a veces el eclipse notificará que los anuncios regresaron, pero no se muestra en el emu ... ¿alguien puede explicarlo?

Sheldon Rong
fuente

Respuestas:

103

Si está ejecutando anuncios de admob en un emulador, entonces no hay ID. simplemente use el método AdManager y configúrelo en TEST_EMULATOR como dice el logcat. Si ejecuta en un dispositivo real con depuración USB y observa el logcat, la ID aparecerá allí.

Fobos
fuente
50
Después de filtrar con los términos "adRequest" mencionados anteriormente, encontrará una línea: "12-19 17: 48: 25.615: I / Ads (2132): para obtener anuncios de prueba en este dispositivo, llame a adRequest.addTestDevice (" D9XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ");". Simplemente copia, pega el código y diviértete.
Ashok Goli
5
Mi registro dice: "Utilice AdRequest.Builder.addTestDevice (" 5EXXXX, etc. ") para obtener anuncios de prueba en este dispositivo".
Mark Bridges
2
Simplemente escriba "addTestDevice" en el campo de filtro del logcat.
Gayan Weerakutti
¿Podemos encontrar el ID del dispositivo de un APK grabado, que está publicado en Google Play?
Gayan Weerakutti
108

Las respuestas aceptadas funcionarán si solo está probando en el Emulador o en algunos dispositivos, pero si está probando en una gran cantidad de dispositivos, es posible que necesite algún medio para agregar de manera proramática la ID del dispositivo en ejecución.

El siguiente código convertirá el dispositivo en ejecución actual en un dispositivo de prueba adview mediante programación

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

Debe usar el md5 de la ID de Android y debe estar en mayúsculas. Aquí está el código md5 que utilicé

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

EDITAR: Aparentemente, el método MD5 no es perfecto, y se sugirió probar https://stackoverflow.com/a/21333739/2662474 Ya no necesito esta función, así que no la he probado. ¡Buena suerte!

Joseph
fuente
1
Esto es probablemente mejor que llamar, com.google.android.gms.internal.cm.l(Context ctx)que es el método interno ofuscado (en la versión 4.0.30) que devuelve el ID en cuestión
Amr Mostafa
¡Gracias por esto! Sólo para ponerlo en Python, import hashlib; hashlib.md5(android_id.lower()).hexdigest().upper(). De esta manera, puede descargar una aplicación para mostrar su ID de Android y tomar el MD5 de eso.
douggard
y la clase de Configuración viene de qué paquete?
oabarca
@joseph esto no está funcionando correctamente. echa de menos algunos personajes.
5er
5
Vea esta respuesta: stackoverflow.com/a/21333739/4019544 Esta implementación no maneja algunos ceros, similar a la respuesta aceptada en la publicación vinculada aquí.
MaxJ
17

Algo similar a Google Ads, de la documentación:

public AdRequest.Builder addTestDevice (String deviceId)

Hace que un dispositivo reciba anuncios de prueba. El deviceId se puede obtener viendo la salida de logcat después de crear un nuevo anuncio. Para emuladores, use DEVICE_ID_EMULATOR.

por ejemplo, mi ID de dispositivo de prueba que se muestra en LogCat es "B86BC9402A69B031A516BC57F7D3063F":

AdRequest adRequest = new AdRequest.Builder() 
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
        .addTestDevice("B86BC9402A69B031A516BC57F7D3063F")
        .build();
Jorgesys
fuente
15
  • ¿Tu aplicación está publicada en Play Store, con anuncios en vivo ?

Si su aplicación está en Play Store y muestra anuncios en vivo (no puede usar anuncios en vivo para probar) agregue el ID de su dispositivo en el código para obtener anuncios de prueba de Admob en su dispositivo real. Nunca use anuncios en vivo durante el desarrollo o las pruebas.

Para obtener una ID de dispositivo real en logcat,

  1. Conecte su dispositivo en modo de depuración USB a Android Studio

Modo de depuración USB (opción de desarrollador)

  1. Abra cualquier aplicación en su dispositivo que muestre anuncios en vivo de Admob: en el dispositivo conectado, si ha descargado su aplicación de Play Store (mostrando anuncios en vivo), abra esa aplicación o abra cualquier otra aplicación que muestre anuncios de Admob en vivo. Su dispositivo debe tener una conexión a Internet.

  2. Filtre el logcat con 'dispositivo' como se muestra a continuación para obtener el dispositivo de prueba

Probar ID de dispositivo en logcat

Lea las pruebas de anuncios de AdMob en el dispositivo: los ID de dispositivo pueden cambiar para obtener más

Pinky Walve
fuente
Estaba mirando mientras ejecutaba Unity Dev Build y este funcionó. Gracias.
Avisek Chakraborty
13

Para obtener la ID del dispositivo hash

dentro del oncreate

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

luego agregue esta clase para 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
fuente
Gracias, pero en realidad hay un error sutil en su función md5 (). La línea donde agrega a hexString debe ser la siguiente: hexString.append(String.format("%02X", 0xFF & messageDigest[i])); Su implementación dará una salida incorrecta en valores de bytes de 15 o menos, ya que el cero a la izquierda no se mostrará.
Ant
su md5 () genera una ID incorrecta, se esperaba 561600E037F6E9EEBE405B487459D786 pero 56160E037F6E9EEBE405B487459D786
Foobnix
7

Si muestra anuncios con un diseño XML y ya tiene "ads: testDevices =" en su archivo XML de diseño, AdMob NO imprimirá el mensaje "Para obtener anuncios de prueba en este dispositivo ..." en la salida de LogCat. Saque eso y luego verá el mensaje LogCat.

Aquí hay un buen tutorial sobre cómo encontrar la identificación del dispositivo en LogCat: http://webhole.net/2011/12/02/android-sdk-tutorial-get-admob-test-device-id/

Oto Zars
fuente
7

Si está probando su aplicación en un dispositivo real, puede probar esta pequeña aplicación de Android que le da la identificación del dispositivo:

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

Obtendrá la identificación del dispositivo hash directamente. Espero que esto ayude.

Sanath Bharadwaj
fuente
No estoy seguro de que de esto se trate la pregunta. Según recuerdo del emulador, no se puede instalar desde Play Store. Probablemente sería mejor una solución más programática (o las partes relevantes de la fuente de esta aplicación).
Gábor Bakos
1
Bueno, muchos de ellos han publicado soluciones programáticas. Acabo de publicar esto porque es una forma un poco fácil y directa de obtener la identificación, aunque no funciona en el emulador. De todos modos, edité la respuesta.
Sanath Bharadwaj
Ya no proporciona la identificación correcta.
Evorlor
6

Otra forma más fácil de mostrar anuncios de prueba es usar la identificación del dispositivo de prueba para el banner para mostrar anuncios de prueba de admob para todos los dispositivos . " ca-app-pub-3940256099942544/6300978111 ". Esta identificación de anuncios de prueba de admob se anotó en el tutorial de admob de google: link . Esta es la cita del enlace anterior: ingrese la descripción de la imagen aquí

  • Este es el ID de dispositivo de prueba para el intersticial " ca-app-pub-3940256099942544/1033173712 ". Esto también se usó en el tutorial intersticial.
huu duy
fuente
5

Si no lo obtiene en el logcat, simplemente ingrese cualquier ID de dispositivo y cargue sus anuncios y ejecute su aplicación, luego vaya al registro y lo obtendrá así, I/Ads: Use AdRequest.Builder.addTestDevice("XXXXXXXXXXXXXXXXXXXXXXXXX") to get test ads on this device.luego póngalo y ejecute su aplicación nuevamente.

Contexto
fuente
5

Para obtener la identificación del dispositivo, conecte su teléfono a USB y abra logcat en Android Studio Use el código a continuación (asegúrese de tener habilitada la depuración de USB en su dispositivo). Luego, abra cualquier aplicación (descargue cualquier aplicación aleatoria de Play Store) que tenga Google Ad. En el Logcat escriba "set" como se muestra en la imagen. La identificación de su dispositivo se muestra resaltada en la imagen como

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

ingrese la descripción de la imagen aquí

Utilice el dispositivo de prueba en su código como se muestra

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

Tengo algunos dispositivos en los que estaba probando y no quería obtener manualmente el DeviceID para cada uno. Las respuestas aquí para obtener los DeviceID mediante programación no me funcionaban (ceros faltantes), lo que provocó que se mostraran anuncios reales en lugar de anuncios de prueba.

Puse esto en mi clase de aplicación onCreate, y luego expuse deviceId usando un método getter para que se pueda acceder a él en todo momento.

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

Y el método 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;
}

Luego, usando esto cada vez que creo un objeto 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
fuente
4

Funciona de esta manera:

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

Después de ejecutar la aplicación ... Ir a Logcat y poner Verbose en el campo de búsqueda AdRequest, para que el dispositivo de identificación muestre donw.

ingrese la descripción de la imagen aquí

.addTestDevice ("poner la identificación aquí");

Espero haber ayudado;

Douglas
fuente
2

Agrega esta clase a tu proyecto

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

    }
}

Uso:

AdRequest adRequest = AdsHelper.createRequest(this);
Gil SH
fuente
Gracias, el resultado es el mismo que el mostrado en el logcat por adRequest.
user2342558
0

aplicación: build.gradle

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

Tu actividad:

 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
fuente