AdMob アダプティブ バナー
一時期スマートバナーを推奨していたかと思えば、結局は廃止して、アダプティブバナーが登場した AdMob。これまで何とな〜くで、アダプティブバナーを使っていたのだが、より最適化した使い方をするために、一度本格的に突っ込んで調べてみることにした。
公式の説明らしい説明は、https://developers.google.com/admob/android/banner/adaptive だけで、あとは API リファレンスが投げ出されているのみ。AdMob に限らず、Google さんのいつものことで、正解(最終結論)だけ示して、途中過程が何もない数学の解答みたいな感じというか。
加えて、日本語訳はさらに実際の API の開発に絡んでいない、日本の Google スタッフが翻訳している感じなので、余計に謎が深まるわけで。
アダプティブバナーのサンプルコード
その公式解説に掲げてあるサンプルコードだが、よくわからないので、これまではほとんどそのままのスタイルで書き写して使っていた。特に謎なのが、AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize
を使っているあたり。Android の API と違って、AdMob の API はソースコードが公開されているわけではないので、中で何をやっているのかがわからない。
それで、テスト用のアプリ ID とデバイス ID を使って色々テストしてみたが、結局、この AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize
はあくまでもオマケ機能であって、アダプティブバナー的には必須の部分ではないのだということがわかった。
Google が教えてくれないアダプティブバナーの本質的な使い方
要するに、アダプティブなわけだから、任意の好きなサイズの AdView
を用意するだけで良い。
つまり、「アダプティブ」というネーミングをした段階でそこは既に解説済。何ひとつ語る必要なし。小学生じゃあるまいし、語らずともわかるよね〜?──というのが、Google の開発チームの原語版の解説を執筆した人たちの感覚なわけだろう。
で、さっさとプラスアルファの機能を盛り込んだサンプルコードの紹介へと移っていく。
まあそんなわけで、Google は文章にして解説してくれていないけど、要するに「任意の好きなサイズの AdView
を用意するだけ」。それがアダプティブバナーの使い方の本質。AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize
とか AdView
のサイズを決定するにあたっての、オマケの蛇足的機能に過ぎない。
その用意された AdView
に対して、そのサイズ(+画面が縦長か横長かの状態)に応じて AdMob のサーバー側が、適当なバナーを選んで送ってくれるよ、というのがアダプティブバナーなわけだ。例えば、横に十分長い AdView を用意すれば、通常の 320x50 のバナーだけでなく、468x60 のバナーが送られてくることもある。スペースが許す(最小サイズを上回っている)限り、選ばれたバナーが送られてきて、そのスペースの中でアスペクト比が保たれるように縦または横一杯まで拡大されて表示される。それがアダプティブバナーの特徴である(以前のスマートバナーの場合は、アスペクト比を保って拡大することはせず、ただ、横長に伸びるだけ)。
AdView のサイズの決め方
AdView のサイズの設定方法は AdSize
をセットする。サイズは dp 単位なので注意(px 単位ではない)。
AdView adView = new AdView(context);
(...)
adView.setAdSize(new AdSize(320, 100));
AdView
のサイズに合わせて拡大表示してくれるとは言っても、サイズによって表示できるバナーの種類には制限がある。そこで特にアスペクト比などを予め見積っておいて、できるだけイメージ通りにレイアウトするための工夫の一例が、例の AdMob の公式解説のサンプルコードの趣旨。
つまり、意図するバナーに最適化されたスペースを確保するには、意図するバナーのアスペクト比を予め把握しておくことが重要である。
バナーのサイズ一覧(dp 単位)
インタースティシャルはアダプティブとは関係がないので除くと、以下のようになる(ソース):
- 320x50: Mobile leaderboard
- 480x32: Mobile banner (landscape)
- 320x100: Large mobile banner
- 468x60: Banner
- 728x90: Leaderboard
- 300x250: Inline rectangle
レイアウト側のサイズ制限
AdView
の縦横のサイズがバナーの本来のサイズを上回っていれば、一応は ok なのだろうが、AdMob(Google)側の UI 的なポリシーとして、レイアウトされた広告のサイズが過度に大きい(縦幅が画面全体の 15% を超す)場合や、反対にあまり小さくなり過ぎる(50dp を下回る)場合は NG なので、そこも配慮する必要がある。アスペクト比とその最大値・最小値の考慮をして、横幅から縦幅を自動的に算出してくれる関数として用意されているのが、AdSize getCurrentOrientationAnchoredAdaptiveBannerAdSize (Context context, int width)
というわけである。
最大・最小を考慮することさえ忘れなければ、自分でアスペクト比を考慮して計算して AdSize
を決定しても同じことである。
コメント
コメントを投稿