Como posso obter ID de dispositivo para Admob

102

Estou usando o Eclipse para desenvolver aplicativos para Android e quero integrar a Admob para ganhar dinheiro. O tutorial diz que devo assistir o LogCat para encontrar a ID, mas onde está? texto alternativo

Quando executo tanto no modo de teste quanto no modo real, às vezes o eclipse avisa que Ads retornou, mas não aparece no emu ... Alguém pode explicar?

Sheldon Rong
fonte

Respostas:

103

Se você estiver executando anúncios AdMob em um emulador, não há ID. basta usar o método AdManager e configurá-lo para TEST_EMULATOR como diz o logcat. Se você executar em um dispositivo real com depuração USB e observar o logcat, o ID aparecerá lá.

Phobos
fonte
50
Depois de filtrar usando os termos mencionados acima "adRequest", você encontrará uma linha - "12-19 17: 48: 25.615: I / Ads (2132): Para obter anúncios de teste neste dispositivo, chame adRequest.addTestDevice (" D9XXXXXXXXXXXXXXXXXXXXXXXXXXX ");". Basta copiar e colar o código e se divertir.
Ashok Goli
5
Meu log diz: "Use AdRequest.Builder.addTestDevice (" 5EXXXX etc ") para obter anúncios de teste neste dispositivo."
Mark Bridges
2
Basta digitar "addTestDevice" no campo de filtro do logcat.
Gayan Weerakutti
Podemos encontrar o ID do dispositivo de um APK identificado, que é publicado no Google Play?
Gayan Weerakutti
108

As respostas aceitas funcionarão se você estiver testando apenas no emulador ou em alguns dispositivos, mas se estiver testando em uma infinidade de dispositivos, pode ser necessário algum meio de adicionar de forma proeminente o ID do dispositivo em execução.

O código a seguir tornará o dispositivo em execução atual em um dispositivo de teste de advertência programaticamente

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

Você precisa usar o md5 do ID do Android e deve estar em letras maiúsculas. Aqui está o código md5 que usei

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, esse método MD5 não é perfeito e foi sugerido tentar https://stackoverflow.com/a/21333739/2662474 Não preciso mais desse recurso, então não testei. Boa sorte!

Joseph
fonte
1
Isso é provavelmente melhor do que chamar com.google.android.gms.internal.cm.l(Context ctx)qual é o método ofuscado interno (na versão 4.0.30) que retorna o ID em questão
Amr Mostafa
Obrigado por isso! Apenas para colocá-lo em Python import hashlib; hashlib.md5(android_id.lower()).hexdigest().upper(),. Dessa forma, você pode apenas baixar um aplicativo para mostrar seu ID do Android e tirar o MD5 dele.
douggard
e a classe Configurações vem de qual pacote?
oabarca
@joseph isso não está funcionando corretamente. falta alguns personagens.
5er
5
Veja esta resposta: stackoverflow.com/a/21333739/4019544 Esta implementação não está lidando com alguns zeros, semelhante à resposta aceita na postagem vinculada aqui.
MaxJ
17

Algo semelhante ao Google Ads, a partir da documentação:

public AdRequest.Builder addTestDevice (String deviceId)

Faz com que um dispositivo receba anúncios de teste. O deviceId pode ser obtido visualizando a saída do logcat após a criação de um novo anúncio. Para emuladores, use DEVICE_ID_EMULATOR.

por exemplo, meu ID de dispositivo de teste exibido no LogCat é "B86BC9402A69B031A516BC57F7D3063F":

AdRequest adRequest = new AdRequest.Builder() 
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
        .addTestDevice("B86BC9402A69B031A516BC57F7D3063F")
        .build();
Jorgesys
fonte
16
  • Seu aplicativo foi publicado na Play Store - com anúncios ao vivo :

Se seu aplicativo estiver na Play Store exibindo anúncios ao vivo - você não pode usar anúncios ao vivo para teste - adicione o ID do seu dispositivo no código para obter anúncios de teste da Admob em seu dispositivo real. Nunca use anúncios ao vivo durante o desenvolvimento ou teste.

Para obter o ID real do dispositivo no logcat,

  1. Conecte seu dispositivo no modo de depuração USB ao Android Studio

Modo de depuração USB (opção do desenvolvedor)

  1. Abra qualquer aplicativo em seu dispositivo que exiba anúncios ao vivo da Admob: No dispositivo conectado, se você baixou seu aplicativo da Play Store (exibindo anúncios ao vivo), abra esse aplicativo ou qualquer outro aplicativo que exiba anúncios ao vivo da Admob. Seu dispositivo deve ter uma conexão com a Internet.

  2. Filtre o logcat com 'dispositivo' conforme mostrado abaixo para obter o dispositivo de teste

ID do dispositivo de teste no logcat

Leia o teste de anúncios da Admob no dispositivo - os IDs do dispositivo podem mudar para mais

Pinky Walve
fonte
Eu estava olhando enquanto rodava o Unity Dev Build e este funcionou. Obrigado.
Avisek Chakraborty
13

Para obter o Hash Device ID

dentro do oncreate

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

então adicione esta classe 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
fonte
Obrigado, mas na verdade há um bug sutil em sua função md5 (). A linha onde você anexa a hexString deve ser esta: hexString.append(String.format("%02X", 0xFF & messageDigest[i])); Sua implementação fornecerá saída incorreta em valores de byte de 15 ou menos, pois o zero à esquerda não será gerado.
Formiga
seu md5 () gera ID errado, esperado 561600E037F6E9EEBE405B487459D786 mas 56160E037F6E9EEBE405B487459D786
Foobnix
7

Se você estiver exibindo anúncios usando layout XML e já tiver "ads: testDevices =" em seu arquivo XML de layout, a AdMob NÃO imprimirá a mensagem "Para obter anúncios de teste neste dispositivo ..." na saída LogCat. Retire isso e então você verá a mensagem LogCat.

Aqui está um bom tutorial sobre como encontrar a id do dispositivo no LogCat: http://webhole.net/2011/12/02/android-sdk-tutorial-get-admob-test-device-id/

Oto Zars
fonte
7

Se você estiver testando seu aplicativo em um dispositivo real, pode experimentar este pequeno aplicativo Android que fornece o ID do dispositivo:

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

Você obterá a id do dispositivo com hash diretamente. Espero que isto ajude.

Sanath Bharadwaj
fonte
Não tenho certeza se é sobre isso que se trata. Pelo que me lembro do emulador, você não pode instalar da Play Store. Provavelmente, uma solução mais programática (ou as partes relevantes do código-fonte deste aplicativo) seria melhor.
Gábor Bakos
1
Bem, muitos deles postaram soluções programáticas. Eu acabei de postar isso porque é uma maneira um pouco fácil e direta de obter o id, embora não funcione no emulador. De qualquer forma, editei a resposta.
Sanath Bharadwaj
Não fornece mais o ID correto.
Evorlor
6

Outra maneira mais fácil de mostrar anúncios de teste é usar a id do dispositivo de teste para banner para mostrar os anúncios de teste da AdMob para todos os dispositivos . " ca-app-pub-3940256099942544/6300978111 ". Esta id de anúncios de teste da admob foi observada no tutorial da admob do google: link . Esta é a citação do link acima: insira a descrição da imagem aqui

  • Este é o ID do dispositivo de teste para o intersticial " ca-app-pub-3940256099942544/1033173712 ". Isso também foi usado no tutorial de intersticial
huu duy
fonte
5

Se você não obtiver no logcat apenas coloque qualquer id de dispositivo e carregue seus anúncios e execute seu aplicativo, em seguida, vá para o log, você irá obtê-lo assim, I/Ads: Use AdRequest.Builder.addTestDevice("XXXXXXXXXXXXXXXXXXXXXXXXX") to get test ads on this device.coloque-o e execute seu aplicativo novamente.

Contexto
fonte
5

Para obter a id do dispositivo, conecte seu telefone ao USB e abra o logcat no android studio. Use o código abaixo (certifique-se de ter a depuração USB ativada em seu dispositivo). Em seguida, abra qualquer aplicativo (baixe qualquer aplicativo aleatório da Play Store) que tenha o Google Ad. No Logcat digite "set" conforme mostrado na imagem. O id do seu dispositivo é mostrado destacado na imagem como

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

insira a descrição da imagem aqui

Use o dispositivo de teste em seu código conforme mostrado

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

Tenho alguns dispositivos em que estava testando e não queria obter manualmente o DeviceID para cada um. As respostas aqui para obter os DeviceIDs de forma programática não estavam funcionando para mim (zeros ausentes), o que fez com que anúncios reais fossem exibidos em vez de anúncios de teste.

Coloquei isso em minha classe Application onCreate e, em seguida, expus deviceId usando um método getter para que possa ser acessado por completo.

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

Então, usando isso sempre que eu criar um 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
fonte
4

Funciona desta maneira:

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

Depois de executar o app ... Vá no Logcat coloque em Verbose coloque no campo de pesquisa AdRequest, para que o id do dispositivo mostre donw.

insira a descrição da imagem aqui

.addTestDevice ("coloque o id aqui");

Espero ter ajudado;

Douglas
fonte
2

Adicione esta classe ao seu projeto

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
fonte
Obrigado, o resultado é o mesmo que o mostrado no logcat por adRequest.
user2342558
0

aplicativo: build.gradle

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

Sua atividade:

 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
fonte