AdMob ネイティブアドバンス広告の実装方法と課題




AdMobのネイティブアドバンス広告(2017/12/25本日時点でまだベータ版扱い)が利用出来るようになったため、Androidアプリでの利用方法と、導入にあたっての問題点をまとめておきます。

Androidでの導入手順

AdMob管理画面

まだベータ版ということで、段階的に解放されていっているのではないかと推測します。機能が解放されたユーザ?は、広告作成画面で以下のように選択出来る用になります。

β版機能をどうしたら利用出来る様になるのか疑問ですが、私はネイティブエクスプレス広告終了のお知らせメールの中に「ネイティブ アドバンスに関する最新情報をメールでご希望の場合は、こちらをクリックしてご連絡ください。」のこちらのリンク先をクリックしただけです。これでβ版が使えるようになったのかは疑問ですが、やったことはこれだけです。

(2018/3/3追記)
2018/3/1からネイティブエクスプレス広告が停止されているはずですが、ネイティブアドバンス広告は未だにβ版で一般開放されていない様子です。これは…。。。

(2018/3/18追記)
2018/3/14のお知らせページによると、未だにβ版扱いで一部のβ版利用ユーザ以外はバナー広告を利用して下さい的なことが書かれていますね…。

実装コード

AdMob for AndroidのNative Ads Advancedページ
ネイティブ広告とカスタム レンダリング – SDK for DFP Users on Android
に必要な情報がまとまっています。まずはこちらを軽く目を通すと、概要や実装方法が分かると思います。簡単にまとめると、ネイティブ広告表示用のレイアウトを自前で用意して、リクエスト帰ってきたデータをそのレイアウトの適切な場所に表示するだけです。

手っ取り早く実装するのであれば、GitHubのサンプルをダウンロードし、ローカルでビルドして動きを確認しつつ、自分用にカスタマイズするのがお勧めです。

広告の種類について

AppInstallAdとContentAdの2種類があります。

AppInstallAdはアプリインストールを促進する広告で、ContentAdはAdsenseなどWeb系の静的コンテンツ広告です。

どちらか一方をリクエスト出来ますが、両方リクエストした場合に最終的にどちらが表示されるかは、収益性などを考慮してGoogle側で自動で決定されているようです。

テスト専用IDについて

テスト時は、広告ユニットIDとしてAdMob指定の
 ca-app-pub-3940256099942544/2247696110
を指定します。

バナーやインタースティシャル等の見慣れたテスト広告とは異なり、いまいま?は以下のように、本物の広告が出る様子で、本当にクリックしてもいいか悩みますが、クリックしても収益にはならず大丈夫っぽいです。けど、クリックするのは気が引けますね…。

あとは、テストデバイスも念のために設定しておいた方が無難だと思います。

AdRequest adRequest = new AdRequest.Builder()
                .addTestDevice("XXXXXXXXXXXXXXXXXXXXX") // あなたのテストデバイスを追加
                .build();
adLoader.loadAd(adRequest);

収益面

具体的な数値は出せませんが、ネイティブエクスプレス広告よりも遙かに良いです。収益面ではかなりお勧めです。

クラッシュ問題

まだベータ版扱い?のため、致し方ないのですが、Mobile Ads SDK/Play servicesは最新版11.8.0でもそれ以前のバージョンであっても、以下のExceptionが結構な割合で発生しています。

Firebaseのログから推測すると、広告表示しているActivityから素早く?遷移元のActivityに戻った時にクラッシュしているように見えますが、全く原因が分かりません。確実にSDK側の問題だと思われます。

Exception java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.Map.containsKey(java.lang.Object)' on a null object reference
com.google.android.gms.ads.internal.formats.z.a (z.java:208)
com.google.android.gms.ads.internal.formats.aa.run (aa.java:36)
android.os.Handler.handleCallback (Handler.java:761)
android.os.Handler.dispatchMessage (Handler.java:98)
android.os.Looper.loop (Looper.java:156)
android.app.ActivityThread.main (ActivityThread.java:6523)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:941)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:831)

Googleフォームにも同じレポートが上がっています。

(2018/3/25追記)
Android StudioのGoogle Play Services SDKを最新のrev 48にアップデートしたのが影響したのか3月上旬頃からクラッシュレポート数が激変してきて、ここ数日は数件に落ち着いてきました。現在は最新のGoogle Play services 12.0.0のFirebase SDKを利用していますが、特に問題なさそうな感じです。