Genymotionを判別してAdMobのテスト広告を出す
AdMobには開発・テスト時は必ずテスト広告を使わなければならない、というルールがあります。開発中に間違って通常の広告を表示して誤タップでもしようものなら、最悪アカウントがBANされかねません。
開発中はテスト広告が表示されるようにしておきましょう。テスト広告を表示するには
- テスト用の広告ユニットIDを使う
- AdRequest.Builder.addTestDeviceを使ってテスト用のデバイスIDを登録する
の2通りのやり方があります。
前者はAndroid クイック スタート | AdMob Android ガイド | Google Developersにある通りで、以下のユニットIDを使えばOKです。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">My Application</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="banner_ad_unit_id">ca-app-pub-3940256099942544/6300978111</string>
</resources>
後者はターゲット設定 | Android 向け Mobile Ads SDK | Google Developersで解説されているようにaddTestDeviceメソッドで検証対象の端末IDを登録します。
AdRequest request = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR) // All emulators
.addTestDevice("AC98C820A50B4AD8A2106EDE96FB87D4") // My Galaxy Nexus test phone
.build();
純正エミュレータは AdRequest.DEVICE_ID_EMULATOR を指定すれば一括で登録できるのですが、Genymotionの場合、1台1台ちまちまと登録しなきゃなりません。
これだと面倒だし登録忘れると困るので、ソースコードで指定する方法を調べました。
実行している端末がGenymotionかどうかは android.os.Build.MANUFACTURER で判定するのがよさそうです。こんな感じの関数を作っておきます。
/**
* 実行している端末がGenymotionかどうかを判定します。
*
* @return
*/
private static boolean isGenymotionDevice() {
return android.os.Build.MANUFACTURER.equalsIgnoreCase("Genymotion");
}
Genymotionだと分かったら、次は端末IDの取得。android_idを取得してMD5化してごにょごにょ、といった感じでしょうか。
/**
* AdMob用のDeviceIDを取得します。
*
* @param context
* @return
*/
private static String getDeviceID(Context context) {
String aid = Settings.Secure.getString(context.getContentResolver(), "android_id");
Object obj = null;
try {
((MessageDigest) (obj = MessageDigest.getInstance("MD5"))).update(aid.getBytes(), 0, aid.length());
obj = String.format("%032X", new Object[]{new BigInteger(1, ((MessageDigest) obj).digest())});
} catch (NoSuchAlgorithmException localNoSuchAlgorithmException) {
obj = aid.substring(0, 32);
}
return (String) obj;
}
これらを組み合わせれば Genymotion に自動でテスト広告を出せるようになります。
関連(するかもしれない)記事
おススメ