ฉันจะรับรหัสอุปกรณ์สำหรับ Admob ได้อย่างไร


103

ฉันใช้ Eclipse เพื่อพัฒนาแอปพลิเคชันสำหรับ Android และฉันต้องการรวม Admob เพื่อสร้างรายได้ บทช่วยสอนบอกว่าฉันควรดู LogCat เพื่อค้นหา ID แต่มันอยู่ที่ไหน ข้อความแสดงแทน

เมื่อฉันทำงานในโหมดทดสอบหรือโหมดจริงบางครั้งคราสจะแจ้งว่า Ads ส่งคืน แต่ไม่แสดงใน emu ... มีใครอธิบายได้บ้าง

คำตอบ:


106

หากคุณใช้งานโฆษณา AdMob บนโปรแกรมจำลองแสดงว่าไม่มี ID เพียงใช้วิธี AdManager และตั้งค่าเป็น TEST_EMULATOR เหมือนที่ logcat บอก หากคุณรันบนอุปกรณ์จริงที่มีการดีบัก usb และดู Logcat ID จะปรากฏในนั้น


51
หลังจากกรองโดยใช้คำที่กล่าวถึงข้างต้น "adRequest" คุณจะพบบรรทัด - "12-19 17: 48: 25.615: I / Ads (2132): หากต้องการรับโฆษณาทดสอบบนอุปกรณ์นี้ให้เรียก adRequest.addTestDevice (" D9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ");". เพียงแค่คัดลอกและวางรหัสและสนุก
Ashok Goli

5
บันทึกของฉันระบุว่า: "ใช้ AdRequest.Builder.addTestDevice (" 5EXXXX ฯลฯ ") เพื่อรับโฆษณาทดสอบบนอุปกรณ์นี้"
Mark Bridges

2
เพียงพิมพ์ "addTestDevice" บนช่องตัวกรองบน ​​logcat
Gayan Weerakutti

เราสามารถค้นหารหัสอุปกรณ์จาก APK ที่แยกออกมาซึ่งเผยแพร่ไปยัง Google Play ได้หรือไม่
Gayan Weerakutti

คุณสามารถลองค้นหาคีย์โดย "RequestConfiguration.Builder (). setTestDeviceIds"
hidd

109

คำตอบที่ยอมรับจะใช้งานได้หากคุณกำลังทดสอบบน Emulator หรือบนอุปกรณ์บางอย่างเท่านั้น แต่ถ้าคุณกำลังทดสอบกับอุปกรณ์มากมายเหลือเฟือคุณอาจต้องใช้วิธีการบางอย่างในการเพิ่มรหัสอุปกรณ์ของอุปกรณ์ที่กำลังทำงานอยู่

โค้ดต่อไปนี้จะทำให้อุปกรณ์ที่กำลังทำงานอยู่ในอุปกรณ์ทดสอบ adview โดยใช้โปรแกรม

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

คุณต้องใช้ md5 ของ Android ID และต้องเป็นตัวพิมพ์ใหญ่ นี่คือรหัส md5 ที่ฉันใช้

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

แก้ไข: เห็นได้ชัดว่าวิธี MD5 ไม่สมบูรณ์แบบและขอแนะนำให้ลองhttps://stackoverflow.com/a/21333739/2662474ฉันไม่ต้องการคุณสมบัตินี้อีกต่อไปดังนั้นฉันจึงไม่ได้ทดสอบ โชคดี!


1
สิ่งนี้น่าจะดีกว่าการเรียกcom.google.android.gms.internal.cm.l(Context ctx)ซึ่งเป็นวิธีการที่สับสนภายใน (ในเวอร์ชัน 4.0.30) ที่ส่งคืน ID ที่เป็นปัญหา
Amr Mostafa

ขอบคุณสำหรับสิ่งนี้! import hashlib; hashlib.md5(android_id.lower()).hexdigest().upper()เพียงเพื่อใส่ลงในหลาม วิธีนี้คุณสามารถดาวน์โหลดแอปเพื่อแสดงรหัส Android ของคุณและรับ MD5 ได้
douggard

และคลาส Settings มาจากแพ็คเกจอะไร?
oabarca

@joseph สิ่งนี้ทำงานไม่ถูกต้อง มันคิดถึงตัวละครบางตัว
5er

5
ดูคำตอบนี้: stackoverflow.com/a/21333739/4019544การใช้งานนี้ไม่ได้จัดการกับศูนย์บางตัวซึ่งคล้ายกับคำตอบที่ยอมรับในโพสต์ที่ลิงก์ที่นี่
MaxJ

17

สิ่งที่คล้ายกับ Google Ads จากเอกสาร:

AdRequest.Builder addTestDevice สาธารณะ (String deviceId)

ทำให้อุปกรณ์รับโฆษณาทดสอบ สามารถรับ deviceId ได้โดย การดูเอาต์พุต logcat หลังจากสร้างโฆษณาใหม่ สำหรับอีมูเลเตอร์ให้ใช้ DEVICE_ID_EMULATOR

ตัวอย่างเช่นรหัสอุปกรณ์ทดสอบของฉันที่แสดงใน LogCat คือ"B86BC9402A69B031A516BC57F7D3063F":

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

16
  • แอปของคุณเผยแพร่บน Play Store หรือไม่ - พร้อมโฆษณาจริง :

หากแอปของคุณอยู่ใน Play Store ที่แสดงโฆษณาจริงคุณจะใช้โฆษณาจริงในการทดสอบไม่ได้ให้เพิ่มรหัสอุปกรณ์ของคุณในโค้ดเพื่อรับโฆษณาทดสอบจาก Admob บนอุปกรณ์จริงของคุณ อย่าใช้โฆษณาจริงในระหว่างการพัฒนาหรือการทดสอบ

ในการรับ ID อุปกรณ์จริงใน logcat

  1. เชื่อมต่ออุปกรณ์ของคุณในโหมดดีบัก USB กับ Android Studio

โหมดดีบัก USB (ตัวเลือกสำหรับนักพัฒนา)

  1. เปิดแอปใดก็ได้บนอุปกรณ์ของคุณที่แสดงโฆษณาสดจาก Admob:บนอุปกรณ์ที่เชื่อมต่อหากคุณดาวน์โหลดแอปจาก play store (แสดงโฆษณาจริง) ให้เปิดแอปนั้นหรือเปิดแอปอื่น ๆ ที่แสดงโฆษณา Admob แบบสด อุปกรณ์ของคุณควรมีการเชื่อมต่ออินเทอร์เน็ต

  2. กรอง Logcat ด้วย 'device' ดังที่แสดงด้านล่างเพื่อรับอุปกรณ์ทดสอบ

ทดสอบ ID อุปกรณ์ใน logcat

อ่านการทดสอบโฆษณา Admob บนอุปกรณ์ - รหัสอุปกรณ์สามารถเปลี่ยนแปลงเพิ่มเติมได้


ฉันกำลังมองหาในขณะที่ใช้ Unity Dev Build และอันนี้ใช้งานได้ ขอบคุณ.
Avisek Chakraborty

13

เพื่อรับ Hash Device ID

ภายใน oncreate

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

จากนั้นเพิ่มคลาสนี้สำหรับ 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 "";
    }

ขอบคุณ แต่มีข้อผิดพลาดเล็กน้อยในฟังก์ชัน md5 () ของคุณ บรรทัดที่คุณต่อท้าย hexString ควรเป็นดังนี้: hexString.append(String.format("%02X", 0xFF & messageDigest[i])); การนำไปใช้ของคุณจะให้เอาต์พุตที่ไม่ถูกต้องสำหรับค่าไบต์ที่ 15 หรือน้อยกว่าเนื่องจากจะไม่มีเอาต์พุตศูนย์นำหน้า
มด

md5 () ของคุณสร้าง ID ผิดคาดว่า 561600E037F6E9EEBE405B487459D786 แต่ 56160E037F6E9EEBE405B487459D786
Foobnix

7

หากคุณกำลังแสดงโฆษณาโดยใช้รูปแบบ XML และหากคุณมี "ads: testDevices =" ในไฟล์ XML การออกแบบอยู่แล้ว AdMob จะไม่พิมพ์ข้อความ "เพื่อรับโฆษณาทดสอบบนอุปกรณ์นี้ ... " ในผลลัพธ์ LogCat เอาออกแล้วคุณจะเห็นข้อความ LogCat

นี่คือบทแนะนำที่ดีเกี่ยวกับวิธีค้นหารหัสอุปกรณ์ใน LogCat: http://webhole.net/2011/12/02/android-sdk-tutorial-get-admob-test-device-id/


7

หากคุณกำลังทดสอบแอปของคุณบนอุปกรณ์จริงคุณสามารถลองใช้แอป Android ขนาดเล็กนี้ซึ่งให้รหัสอุปกรณ์แก่คุณ:

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

คุณจะได้รับรหัสอุปกรณ์ที่แฮชโดยตรง หวังว่านี่จะช่วยได้


ฉันไม่แน่ใจว่าคำถามนี้เกี่ยวกับอะไร ตามที่ฉันจำได้จากโปรแกรมจำลองคุณไม่สามารถติดตั้งจาก Play store ได้ น่าจะเป็นวิธีแก้ปัญหาที่เป็นโปรแกรมมากขึ้น (หรือส่วนที่เกี่ยวข้องของแหล่งที่มาของแอปนี้) จะดีกว่า
Gábor Bakos

1
มีหลายคนโพสต์วิธีแก้ปัญหาแบบโปรแกรม ฉันเพิ่งโพสต์สิ่งนี้เพราะเป็นวิธีที่ง่ายและตรงไปตรงมาเล็กน้อยในการรับรหัสแม้ว่าจะไม่ทำงานกับโปรแกรมจำลอง อย่างไรก็ตามฉันแก้ไขคำตอบ
Sanath Bharadwaj

ฉันลองแล้วให้รหัสไม่ถูกต้อง
Himanshu Malik

6

อีกวิธีที่ง่ายที่สุดในการแสดงโฆษณาทดสอบคือการใช้รหัสอุปกรณ์ทดสอบสำหรับแบนเนอร์ที่จะแสดงโฆษณา AdMob ทดสอบสำหรับอุปกรณ์ทั้งหมด " ca-app-pub-3940256099942544/6300978111 " นี้โฆษณา AdMob ทดสอบรหัสที่ได้ระบุไว้ใน AdMob กวดวิชาของ Google: การเชื่อมโยง นี่คือคำพูดจากลิงค์ด้านบน: ป้อนคำอธิบายภาพที่นี่


6

ในการรับรหัสอุปกรณ์ให้เชื่อมต่อโทรศัพท์ของคุณกับ USB และเปิด logcat ใน android studio ใช้รหัสด้านล่าง (ตรวจสอบให้แน่ใจว่าคุณเปิดใช้งานการดีบัก USB ในอุปกรณ์ของคุณ) จากนั้นเปิดแอปใดก็ได้ (ดาวน์โหลดแอปแบบสุ่มจาก play store) ซึ่งมี Google Ad ใน Logcat พิมพ์ "set" ดังที่แสดงในภาพ รหัสอุปกรณ์ของคุณจะถูกไฮไลต์ในภาพเป็น

setTestDeviceIds (Arrays.asList ( "CC9DW7W7R4H0NM3LT9OLOF7455F8800D"))

ป้อนคำอธิบายภาพที่นี่

ใช้อุปกรณ์ทดสอบในรหัสของคุณดังที่แสดง

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

5

หากคุณไม่ได้รับในlogcatเพียงแค่ใส่รหัสอุปกรณ์ใด ๆและโหลดโฆษณาของคุณและเรียกใช้แอปของคุณจากนั้นไปที่บันทึกคุณจะได้รับแบบนั้นI/Ads: Use AdRequest.Builder.addTestDevice("XXXXXXXXXXXXXXXXXXXXXXXXX") to get test ads on this device.หลังจากนั้นใส่และเรียกใช้แอปพลิเคชันของคุณอีกครั้ง


4

ฉันมีอุปกรณ์บางอย่างที่ฉันกำลังทดสอบและไม่ต้องการรับ DeviceID ด้วยตนเองสำหรับแต่ละอุปกรณ์ คำตอบที่นี่สำหรับการรับ DeviceID โดยทางโปรแกรมไม่ได้ผลสำหรับฉัน (ไม่มีศูนย์) ซึ่งทำให้โฆษณาจริงแสดงแทนโฆษณาทดสอบ

ฉันใส่สิ่งนี้ไว้ในคลาสแอปพลิเคชันของฉัน onCreate จากนั้นเปิดเผย deviceId โดยใช้เมธอด getter เพื่อให้สามารถเข้าถึงได้ตลอด

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

และวิธี 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;
}

จากนั้นใช้สิ่งนี้ทุกครั้งที่ฉันสร้างวัตถุ 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

ทำงานในลักษณะนี้:

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

หลังจากเรียกใช้แอพ ... ไปที่ Logcat ใส่ Verbose ใส่ในช่องค้นหา AdRequest เพื่อให้อุปกรณ์ id แสดง donw

ป้อนคำอธิบายภาพที่นี่

.addTestDevice ("ใส่รหัสที่นี่");

ฉันหวังว่าจะช่วยได้


4

เพิ่มชั้นเรียนนี้ในโครงการของคุณ

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

    }
}

การใช้งาน:

AdRequest adRequest = AdsHelper.createRequest(this);

ขอบคุณผลลัพธ์จะเหมือนกับที่แสดงใน Logcat โดย adRequest
user2342558

0

แอป: build.gradle

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

กิจกรรมของคุณ:

 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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.