Tự động lấy Device Test Id cho Google AdMob

Trong quá trình phát triển Android, đặc biệt đối với các lập trình viên “tự thân” thì bước quan trọng nhất mang lại doanh thu chính là Quảng cáo. Khi phát triển ở giai đoạn này, bạn sẽ phải test khá nhiều lần kịch bản quảng cáo với nhiều thiết bị khác nhau. Vấn đề phát sinh là theo tài liệu của Google AdMob bạn sẽ phải thêm bằng tay các Device Test Id khi test trên các thiết bị để tránh vi phạm chính sách của Google.

Điều này tuy đơn giản nhưng lại khá là phiền phức ở chỗ, khi bạn cài trên một thiết bị mới thì buộc bạn phải lấy được Test Device Id trên máy đó rồi build lại một APK khác. Để đơn giản hơn, mình đã phát triển ra đoạn mã bên dưới với ưu điểm vượt trội – “Viết một lần, chạy mọi nơi, chỉ chạy trong môi trường Test”.

import android.content.Context;
import android.provider.Settings;

import com.google.android.gms.ads.AdRequest;

import java.util.Locale;

public class AdUtil {

    public static AdRequest getAdRequestWithTestDevice(Context context) {
        AdRequest.Builder builder = new AdRequest.Builder();
       	if (!BuildConfig.DEBUG) {
            return builder.build();
        }
        try {
            String androidId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
            builder.addTestDevice(EncryptionUtils.encodeMd5(androidId).toUpperCase(Locale.US));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return builder.build();
    }
}
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;

class EncryptionUtils {

    private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

    public static String encodeMd5(String string) {
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            byte[] data = messageDigest.digest(string.getBytes(StandardCharsets.UTF_8));
            return md5Hex(data);
        } catch (Exception e) {
            LogUtils.logE(e);
            return string;
        }
    }

    private static String md5Hex(byte[] data) {
        return new String(encodeHex(data));
    }

    private static char[] encodeHex(final byte[] data) {
        final int l = data.length;
        final char[] out = new char[l << 1];
        // two characters form the hex value.
        for (int i = 0, j = 0; i < l; i++) {
            out[j++] = DIGITS_LOWER[(0xF0 & data[i]) >>> 4];
            out[j++] = DIGITS_LOWER[0x0F & data[i]];
        }
        return out;
    }

}

Link tham khảo:
https://developers.google.com/admob/android/test-ads

Loading

Là một người thích chia sẻ, tôi tạo ra blog này để mọi người - đặc biệt là các bạn mới vào nghề biết thêm được những kiến thức hữu ích. Rất mong nó sẽ có ích với bạn.

Leave a Reply

Your email address will not be published. Required fields are marked *

Back To Top