Admob için cihaz kimliğini nasıl alabilirim


102

Eclipse'i android için uygulamalar geliştirmek için kullanıyorum ve para kazanmak için Admob'u entegre etmek istiyorum. Eğitim, kimliği bulmak için LogCat'i izlemem gerektiğini söylüyor, ancak nerede? alternatif metin

Ya test modunda ya da gerçek modda çalıştırdığımda, bazen tutulma Reklamların geri döndüğünü bildirecek, ancak emu'da gösterilmiyor ... kimse açıklayabilir mi?

Yanıtlar:


104

Bir emülatörde admob reklamları yayınlıyorsanız, kimlik yoktur. sadece AdManager yöntemini kullanın ve logcat'in dediği gibi TEST_EMULATOR olarak ayarlayın. Usb hata ayıklama ile gerçek bir cihazda çalıştırırsanız ve logcat'i izlerseniz, kimlik orada görünecektir.


50
Yukarıda belirtilen "adRequest" terimlerini kullanarak filtreledikten sonra, bir satır bulacaksınız - "12-19 17: 48: 25.615: I / Ads (2132): Bu cihazda test reklamları almak için adRequest.addTestDevice (" D9XXXXXXXXXXXXXXXXXXXXXXXXXXX ");". Kodu kopyalayıp yapıştırın ve eğlenin.
Ashok Goli

5
Günlüğüm şöyle diyor: "Bu cihazda test reklamları almak için AdRequest.Builder.addTestDevice (" 5EXXXX vb. ") Kullanın."
Mark Bridges

2
Logcat üzerindeki filtre alanına "addTestDevice" yazmanız yeterlidir.
Gayan Weerakutti

Cihaz kimliğini Google Play'de yayınlanan, şarkı söylenmiş bir APK'den bulabilir miyiz?
Gayan Weerakutti

108

Kabul edilen yanıtlar, yalnızca Emülatörde veya birkaç cihazda test yapıyorsanız işe yarayacaktır, ancak çok sayıda cihaz üzerinde test yapıyorsanız, çalışan cihazın cihaz kimliğini proramatik olarak eklemek için bazı araçlara ihtiyacınız olabilir.

Aşağıdaki kod, mevcut çalışan cihazı programlı olarak bir adview test cihazına dönüştürür.

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

Android kimliğinin md5'ini kullanmanız ve büyük harf olması gerekir. İşte kullandığım md5 kodu

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

DÜZENLEME: Görünüşe göre MD5 yöntemi mükemmel değil ve https://stackoverflow.com/a/21333739/2662474 denenmesi önerildi Artık bu özelliğe ihtiyacım yok, bu yüzden test etmedim. İyi şanslar!


1
Bu muhtemelen com.google.android.gms.internal.cm.l(Context ctx), söz konusu kimliği döndüren dahili gizlenmiş yöntem (sürüm 4.0.30'da) olan aramadan daha iyidir
Amr Mostafa

Bunun için teşekkür ederim! Sadece Python'a koymak için import hashlib; hashlib.md5(android_id.lower()).hexdigest().upper(). Bu şekilde, Android kimliğinizi göstermek için bir uygulama indirebilir ve bunun MD5'ini alabilirsiniz.
douggard

ve Ayarlar sınıfı hangi paketten geliyor?
oabarca

@joseph bu düzgün çalışmıyor. bazı karakterleri özlüyor.
5er

5
Bu yanıta bakın: stackoverflow.com/a/21333739/4019544 Bu uygulama, burada bağlantısı verilen gönderideki kabul edilen yanıta benzer şekilde bazı sıfırları işlemiyor.
MaxJ

17

Belgelerden Google Ads'e benzer bir şey:

public AdRequest.Builder addTestDevice (String deviceId)

Bir cihazın test reklamlarını almasına neden olur. DeviceId, yeni bir reklam oluşturduktan sonra logcat çıktısını görüntüleyerek elde edilebilir . Emülatörler için DEVICE_ID_EMULATOR kullanın.

örneğin LogCat'de görüntülenen Test Cihazı kimliğim "B86BC9402A69B031A516BC57F7D3063F":

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

16
  • Uygulamanız Play Store'da canlı reklamlarla mı yayınlandı :

Uygulamanız Play Store'da canlı reklamlar gösteriyorsa - test için canlı reklamları kullanamazsınız - gerçek cihazınızda Admob'dan test reklamları almak için cihaz kimliğinizi koda ekleyin. Geliştirme veya test sırasında asla canlı reklamları kullanmayın.

Logcat'te gerçek cihaz kimliği almak için,

  1. Cihazınızı USB hata ayıklama modunda Android Studio'ya bağlayın

USB hata ayıklama modu (Geliştirici seçeneği)

  1. Cihazınızda, Admob'dan canlı reklamlar gösteren herhangi bir uygulamayı açın: Bağlı cihazda, uygulamanızı oyun mağazasından indirdiyseniz (canlı reklamları gösteren) o uygulamayı açın veya canlı Admob reklamları gösteren başka bir uygulamayı açın. Cihazınızın internet bağlantısı olmalıdır.

  2. Test cihazını almak için logcat'i aşağıda gösterildiği gibi 'cihaz' ile filtreleyin

Logcat'te Cihaz Kimliğini Test Edin

Cihazda Admob reklam testini okuyun - daha fazlası için cihaz kimlikleri değişebilir


Unity Dev Build'i çalıştırırken bakıyordum ve bu işe yaradı. Teşekkürler.
Avisek Chakraborty

13

Karma Cihaz Kimliğini almak için

oncreate içinde

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

sonra bu sınıfı md5 () için ekleyin

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

Teşekkürler, ama aslında md5 () işlevinizde ince bir hata var. HexString'e eklediğiniz satır şu olmalıdır: hexString.append(String.format("%02X", 0xFF & messageDigest[i])); Uygulamanız 15 veya daha düşük bayt değerlerinde yanlış çıktı verecektir çünkü baştaki sıfır çıktı olmayacaktır.
Ant

md5 () cihazınız yanlış kimlik oluşturuyor, beklenen 561600E037F6E9EEBE405B487459D786 ancak 56160E037F6E9EEBE405B487459D786
Foobnix


7

Uygulamanızı gerçek cihazda test ediyorsanız, size cihaz kimliğini veren bu küçük android uygulamasını deneyebilirsiniz:

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

Hashing uygulanmış cihaz kimliğini doğrudan alacaksınız. Bu yardımcı olur umarım.


Sorunun bununla ilgili olduğundan emin değilim. Emülatörden hatırladığım gibi Play Store'dan yükleyemezsiniz. Muhtemelen daha programlı bir çözüm (veya bu uygulamanın kaynağının ilgili kısımları) daha iyi olacaktır.
Gábor Bakos

1
Pek çoğu programlı çözümler yayınladı. Bunu yeni gönderdim çünkü öykünücüde çalışmasa da kimliği almanın biraz kolay ve anlaşılır yolu. Her neyse, cevabı düzenledim.
Sanath Bharadwaj

denedim yanlış kimlik veriyor.
Himanshu Malik

6

Test reklamlarını göstermenin bir başka en kolay yolu, tüm cihazlar için admob test reklamlarını göstermek üzere banner için test cihazı kimliği kullanmaktır . " ca-app-pub-3940256099942544/6300978111 ". Bu admob test reklamları id google admob eğitimde kaydedildi: linki . Bu, yukarıdaki bağlantıdan alıntıdır: görüntü açıklamasını buraya girin

  • Bu, " ca-app-pub-3940256099942544/1033173712 " geçiş reklamı için test cihazı kimliğidir . Bu, geçiş eğiticisinde de kullanıldı

5

Eğer bunu alamazsanız LogCat sadece herhangi koymak cihaz kimliği ve yük Reklamlar ve bunu böyle alacak günlüğüne gidip sonra uygulamanızda çalıştırmak I/Ads: Use AdRequest.Builder.addTestDevice("XXXXXXXXXXXXXXXXXXXXXXXXX") to get test ads on this device.o koydu sonra tekrar uygulamayı çalıştırmak.


5

Cihaz kimliğini almak için telefonunuzu USB'ye bağlayın ve android stüdyosunda logcat'i açın Aşağıdaki kodu kullanın (cihazınızda USB hata ayıklamanın etkin olduğundan emin olun). Ardından, google Reklamı olan herhangi bir uygulamayı açın (oyun mağazasından herhangi bir rastgele uygulamayı indirin). Logcat tipinde, resimde gösterildiği gibi "set" yazın. Cihaz kimliğiniz resimde vurgulanmış olarak gösterilir

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

görüntü açıklamasını buraya girin

Test Cihazını kodunuzda gösterildiği gibi kullanın

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

4

Test ettiğim birkaç cihazım var ve her biri için Cihaz Kimliği'ni manuel olarak almak istemedim. Cihaz Kimliklerini programlı olarak almak için buradaki yanıtlar benim için çalışmıyordu (Eksik sıfırlar), bu da test reklamları yerine gerçek reklamların gösterilmesine neden oldu.

Bunu Uygulama sınıfıma onCreate koydum ve ardından cihaza her yerden erişilebilmesi için bir alıcı yöntemi kullanarak deviceId'yi açığa çıkardım.

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

Ve MD5 yöntemi;

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

Ardından, bir AdRequest nesnesi oluşturduğumda bunu kullanarak:

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

Şu şekilde çalışır:

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

Uygulamayı çalıştırdıktan sonra ... Logcat'e gidin Verbose'u girin AdRequest arama alanına girin, böylece kimlik cihazı donw gösterir.

görüntü açıklamasını buraya girin

.addTestDevice ("kimliği buraya yerleştirin");

Umarım yardımcı olmuştur;


3

Bu sınıfı projenize ekleyin

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

    }
}

Kullanım:

AdRequest adRequest = AdsHelper.createRequest(this);

Teşekkürler, sonuç logcat'te adRequest tarafından gösterilenle aynı.
user2342558

0

app: build.gradle

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

Aktiviteniz:

 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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.