Làm cách nào để lấy ID thiết bị cho Admob


102

Tôi đang sử dụng Eclipse để phát triển các ứng dụng cho Android và tôi muốn tích hợp Admob để kiếm tiền. Hướng dẫn nói rằng tôi nên xem LogCat để tìm ID, nhưng nó ở đâu? văn bản thay thế

Khi tôi chạy ở chế độ thử nghiệm hoặc chế độ thực, đôi khi nhật thực sẽ thông báo rằng Quảng cáo đã trả lại, nhưng nó không hiển thị trong emu ... mọi người có thể giải thích không?

Câu trả lời:


103

Nếu bạn đang chạy quảng cáo admob trên trình giả lập thì không có ID. chỉ cần sử dụng phương thức AdManager và đặt nó thành TEST_EMULATOR như logcat nói. Nếu bạn chạy trên một thiết bị thực có gỡ lỗi usb và xem logcat, ID sẽ xuất hiện trong đó.


50
Sau khi lọc bằng cách sử dụng các điều khoản đã đề cập ở trên "adRequest", bạn sẽ tìm thấy một dòng - "12-19 17: 48: 25.615: I / Ads (2132): Để nhận quảng cáo thử nghiệm trên thiết bị này, hãy gọi adRequest.addTestDevice (" D9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ");". Chỉ cần sao chép, dán mã và vui chơi.
Ashok Goli 19/12/12

5
Nhật ký của tôi cho biết: "Sử dụng AdRequest.Builder.addTestDevice (" 5EXXXX, v.v. ") để nhận quảng cáo thử nghiệm trên thiết bị này."
Mark Bridges

2
Chỉ cần nhập "addTestDevice" vào trường bộ lọc trên logcat.
Gayan Weerakutti

Chúng tôi có thể tìm thấy ID thiết bị từ một APK đã hát, được xuất bản lên Google Play không?
Gayan Weerakutti

108

Các câu trả lời được chấp nhận sẽ hoạt động nếu bạn chỉ đang thử nghiệm trên Trình mô phỏng hoặc trên một vài thiết bị, nhưng nếu bạn đang thử nghiệm trên nhiều thiết bị, bạn có thể cần một số phương tiện để thêm ID thiết bị của thiết bị đang chạy.

Đoạn mã sau sẽ biến thiết bị đang chạy hiện tại thành thiết bị thử nghiệm adview theo chương trình

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

Bạn cần sử dụng md5 của ID Android và nó phải là chữ hoa. Đây là mã md5 tôi đã sử dụng

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

CHỈNH SỬA: Rõ ràng là phương pháp MD5 không hoàn hảo và người ta khuyên bạn nên thử https://stackoverflow.com/a/21333739/2662474 Tôi không còn cần tính năng này nữa nên tôi đã không thử nghiệm. Chúc may mắn!


1
Đây có lẽ là tốt hơn so với gọi com.google.android.gms.internal.cm.l(Context ctx)đó là phương pháp khó hiểu nội bộ (trong phiên bản 4.0.30) mà lợi nhuận trả về ID trong câu hỏi
Amr Mostafa

Cảm ơn vì điều này! Chỉ cần đặt nó vào Python , import hashlib; hashlib.md5(android_id.lower()).hexdigest().upper(). Bằng cách này, bạn có thể tải xuống một ứng dụng để hiển thị ID Android của mình và lấy MD5 của ứng dụng đó.
douggard

và lớp Cài đặt đến từ gói nào?
oabarca

@joseph điều này không hoạt động chính xác. nó bỏ sót một số ký tự.
5er

5
Xem câu trả lời này: stackoverflow.com/a/21333739/4019544 Việc triển khai này không xử lý một số số 0, tương tự như câu trả lời được chấp nhận trên bài đăng được liên kết tại đây.
MaxJ

17

Một cái gì đó tương tự như Google Ads, từ tài liệu:

public AdRequest.Builder addTestDevice (String deviceId)

Khiến thiết bị nhận quảng cáo thử nghiệm. Có thể lấy deviceId bằng cách xem đầu ra logcat sau khi tạo quảng cáo mới. Đối với trình giả lập, hãy sử dụng DEVICE_ID_EMULATOR.

ví dụ: id Thiết bị Kiểm tra của tôi được hiển thị trong LogCat là "B86BC9402A69B031A516BC57F7D3063F":

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

15
  • Ứng dụng của bạn có được xuất bản trên cửa hàng Play không - với quảng cáo trực tiếp :

Nếu ứng dụng của bạn trên Cửa hàng Play hiển thị quảng cáo trực tiếp - bạn không thể sử dụng quảng cáo trực tiếp để thử nghiệm - hãy thêm ID thiết bị của bạn trong mã để nhận quảng cáo thử nghiệm từ Admob trên thiết bị thực của bạn. Không bao giờ sử dụng quảng cáo trực tiếp trong quá trình phát triển hoặc thử nghiệm.

Để lấy ID thiết bị thực trong logcat,

  1. Kết nối thiết bị của bạn ở chế độ gỡ lỗi USB với Android Studio

Chế độ gỡ lỗi USB (Tùy chọn nhà phát triển)

  1. Mở bất kỳ ứng dụng nào trên thiết bị của bạn hiển thị quảng cáo trực tiếp từ Admob: Trên thiết bị được kết nối, nếu bạn đã tải xuống ứng dụng của mình từ cửa hàng Play (hiển thị quảng cáo trực tiếp), hãy mở ứng dụng đó hoặc mở bất kỳ ứng dụng nào khác hiển thị quảng cáo Admob trực tiếp. Thiết bị của bạn phải có kết nối internet.

  2. Lọc logcat với 'thiết bị' như hình dưới đây để lấy thiết bị kiểm tra

Kiểm tra ID thiết bị trong logcat

Đọc thử nghiệm quảng cáo Admob trên thiết bị - ID thiết bị có thể thay đổi để biết thêm


Tôi đã tìm kiếm trong khi chạy Unity Dev Build và cái này đã hoạt động. Cảm ơn.
Avisek Chakraborty

13

Để lấy ID thiết bị băm

bên trong oncreate

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

sau đó thêm lớp này cho 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 "";
    }

Cảm ơn bạn, nhưng thực sự có một lỗi nhỏ trong hàm md5 () của bạn. Dòng nơi bạn thêm vào hexString phải là dòng này: hexString.append(String.format("%02X", 0xFF & messageDigest[i])); Việc triển khai của bạn sẽ cung cấp đầu ra không chính xác trên các giá trị byte từ 15 trở xuống vì số 0 đứng đầu sẽ không được xuất.
Ant

md5 () của bạn tạo sai ID, dự kiến ​​là 561600E037F6E9EEBE405B487459D786 nhưng 56160E037F6E9EEBE405B487459D786
Foobnix

7

Nếu bạn đang hiển thị quảng cáo bằng cách sử dụng bố cục XML và nếu bạn đã có "ads: testDevices =" trong tệp XML bố cục của mình, AdMob sẽ KHÔNG in thông báo "Để tải quảng cáo thử nghiệm trên thiết bị này ..." trong đầu ra LogCat. Lấy nó ra và sau đó bạn sẽ thấy thông báo LogCat.

Đây là một hướng dẫn hay về cách tìm id thiết bị trong LogCat: http://webhole.net/2011/12/02/android-sdk-tutorial-get-admob-test-device-id/


7

Nếu bạn đang thử nghiệm ứng dụng của mình trên thiết bị thực thì bạn có thể thử ứng dụng android nhỏ này, ứng dụng cung cấp cho bạn id thiết bị:

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

Bạn sẽ nhận được id thiết bị được băm trực tiếp. Hi vọng điêu nay co ich.


Tôi không chắc đây là câu hỏi về cái gì. Theo tôi nhớ từ trình giả lập, bạn không thể cài đặt từ Cửa hàng Play. Có lẽ một giải pháp có lập trình hơn (hoặc các phần có liên quan của nguồn ứng dụng này) sẽ tốt hơn.
Gábor Bakos

1
Rất nhiều người trong số họ đã đăng các giải pháp theo chương trình. Tôi chỉ đăng bài này bởi vì nó là một cách dễ dàng và đơn giản để lấy id mặc dù nó không hoạt động trên trình giả lập. Dù sao thì tôi đã chỉnh sửa câu trả lời.
Sanath Bharadwaj

Không còn cung cấp ID chính xác.
Evorlor

6

Một cách dễ nhất khác để hiển thị quảng cáo thử nghiệm là sử dụng id thiết bị thử nghiệm cho biểu ngữ để hiển thị quảng cáo thử nghiệm admob cho tất cả các thiết bị . " ca-app-pub-3940256099942544/6300978111 ". Id quảng cáo thử nghiệm admob này đã được ghi nhận trong hướng dẫn admob của google: link . Đây là trích dẫn từ liên kết trên: nhập mô tả hình ảnh ở đây

  • Đây là id thiết bị thử nghiệm cho quảng cáo xen kẽ " ca-app-pub-3940256099942544/1033173712 ". Điều này cũng được sử dụng trong hướng dẫn quảng cáo xen kẽ

5

Nếu bạn không nhận được nó trong logcat, chỉ cần đặt bất kỳ id thiết bị nào và tải cho bạn Quảng cáo và chạy ứng dụng của bạn, sau đó vào nhật ký bạn sẽ nhận được nó như vậy I/Ads: Use AdRequest.Builder.addTestDevice("XXXXXXXXXXXXXXXXXXXXXXXXX") to get test ads on this device.sau đó đặt nó và chạy lại ứng dụng của bạn.


5

Để lấy id thiết bị, hãy kết nối điện thoại của bạn với USB và mở logcat trong android studio Sử dụng mã bên dưới (đảm bảo bạn đã bật gỡ lỗi USB trong thiết bị của mình). Sau đó, mở ứng dụng bất kỳ (tải xuống bất kỳ ứng dụng ngẫu nhiên nào từ cửa hàng Play) có Quảng cáo google. Trong Logcat gõ "set" như trong hình. Id thiết bị của bạn được hiển thị được đánh dấu trong hình ảnh là

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

nhập mô tả hình ảnh ở đây

Sử dụng Thiết bị Kiểm tra trong mã của bạn như được hiển thị

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

4

Tôi đang thử nghiệm một vài thiết bị và không muốn lấy DeviceID cho từng thiết bị theo cách thủ công. Các câu trả lời ở đây để lấy DeviceID theo chương trình đã không hoạt động đối với tôi (Thiếu số không) khiến quảng cáo thực được hiển thị thay vì quảng cáo thử nghiệm.

Tôi đặt cái này vào lớp Ứng dụng onCreate của mình, sau đó hiển thị deviceId bằng phương thức getter để nó có thể được truy cập xuyên suốt.

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

Và phương pháp 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;
}

Sau đó, sử dụng điều này bất cứ khi nào tôi tạo đối tượng 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

Hoạt động theo cách này:

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

Sau khi chạy ứng dụng ... Đi vào Logcat đặt trong Verbose đặt trong trường tìm kiếm AdRequest, do đó thiết bị id hiển thị donw.

nhập mô tả hình ảnh ở đây

.addTestDevice ("đặt id ở đây");

Tôi hy vọng đã giúp đỡ;


2

Thêm lớp này vào dự án của bạn

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

    }
}

Sử dụng:

AdRequest adRequest = AdsHelper.createRequest(this);

Cảm ơn, kết quả giống như kết quả được hiển thị trong logcat bởi adRequest.
user2342558

0

ứng dụng: build.gradle

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

Hoạt động của bạn:

 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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.