私は「AdMobの広告を実装したけども、広告が表示されない!」という状況に何回か遭遇したことがあります。
その度にウェブで検索し情報を探したのですが、原因と対処方法について分かりやすくまとめられているサイトを見つけることはできませんでした。
そこで、この記事ではAdMobの広告が表示されないときのよくある原因と対処方法について分かりやすくまとめてみようと思います。
=== 目次 ===
最初に確認すべきこと
テスト広告が表示されるかどうか?を確認することで原因と対処方法をおおきく切り分けることができます。よって、テスト広告が表示されるかどうか?をまず最初に確認しましょう。この後のセクションでは①テスト広告ならば表示される場合 ②テスト広告でも表示されない場合 の2通りでよくある原因と対処方法を紹介します。
なお、テスト広告の表示方法は以下の記事を参照ください。
テスト広告ならば表示される場合
テスト広告であれば表示される場合は以下のようなケースが考えられます。エミュレーターを使用している
エミュレータでアプリを起動している場合は、正規の広告ユニットを指定しても絶対にテスト広告しか表示されません。注意してください。正規の広告ユニットコードを間違えている
正規の広告ユニットコードを間違えている場合は、当然、「テスト広告は表示されるが正規広告は表示されない」という事態になります。広告ユニットコードが正しく設定されているか?を検証するためには、AdMobのサイトで正規広告ユニットのリクエストが正しく増えているか?を確認すれば良いです。
※必ずしもリアルタイムで反映される訳ではないので、反映されない場合も30分程度は様子を見ましょう。
AdMobにアプリを追加してから時間が経過していない
AdMobにアプリを登録してから実際に広告が表示されるまでには、最大で1日程度の時間を要します。AdMobにアプリを登録した直後の場合には最低でも1日程度様子をみましょう。
広告のストックがなくなった
AdMobの広告にはストックの概念があり、ストックがなくなれば広告は表示はされなくなります。今まで表示されていて、急に広告が表示されない場合はこのケースの可能性が高いです。時間が経てばストックは補充され、広告も問題なく表示されるでしょう。
また、このストックの概念は「全てのユーザで1つのストック」という訳ではないようです。スマホやタブレットのように一定のユーザ属性に対していくつかのストックがあるようです。
例えば、「同一IPの環境でも、スマホなら広告が表示されるけど、タブレットでは表示されない」という現象が発生することがあります。(筆者経験済み。時間が経てば両方とも広告が表示されるようになった)
このケースの場合は以下のようにエラーコードを取得すると、エラーコード3が返ってきます。
AdView adv = findViewById(R.id.adv);
adv.setAdListener(new AdListener() {
@Override
public void onAdFailedToLoad(int i) {
int ErrorCode = i;
super.onAdFailedToLoad(i);
}
});
また、デバッグコンソールには以下のメッセージが表示されます。
I/Ads: Ad failed to load : 3
エラーコードについては以下のドキュメントに書かれています。
https://developers.google.com/android/reference/com/google/android/gms/ads/AdRequest#ERROR_CODE_NO_FILL
(複数人からの)広告リクエストが少ない
AdMobの広告は広告リクエスト時の情報を元にどの広告をストックするか?を決めています。広告リクエストが少ないうちは広告のストックがなく、広告が表示されない可能性があります。(※このリクエストは正規広告に対してです。テスト広告のリクエストを増やしても意味はありません)
私はこのケースに実際に遭遇したことがあり、AdMobチームに問い合わせたところ上記のような回答がありました。
また、アプリ公開後は一定のリクエストがたまると広告がちゃんと表示されるようになりました。
このケースの場合でもエラーコードは3となります。
複数人からのリクエストも必要かも…?
私の体験談なのですが、このケースの状態で、うっかり正規広告をデバッグ中に表示し、合計で100回以上のリクエストを送付してしまいました。しかしながら、それでも広告は表示されませんでした。
その後、正規広告が表示されないままアプリを公開したところ、Google Play側のテスト?で10人程度がAdMobにリクエストを送ったようで、その後、即座に正規広告が見えるようになりました。
よって、回数に加えて複数人からのリクエストも必要なのかもしれません。
位置情報取得が無効なのに位置情報を要求する広告がリクエストされている
よく原因は分かりませんが、①デバイス位置情報取得がONになっていない or ②位置情報取得の権限が許可されていないにもかかわらず、位置情報を要求する広告がリクエストされ、広告が表示されない場合があります。(筆者経験済み)その場合は以下の警告がログに表示されます。
W/ads: App does not have the required permissions to get location
私の場合は半日程度時間が経過すると、問題なく広告が表示されるようになりました。(もしかしたら、表示する広告をAIに学習するためにそういった広告を一時的に表示しようとしているのかもしれません)
位置情報取得の権限を取得する必要のないアプリの場合は、最初から位置情報要求広告を無効化することでこの問題を回避することができるかもしれません。
位置情報要求広告を無効化する方法は以下の記事を参照ください。
ちなみに、広告のみを目的として位置情報の権限を取得する行為はAdMobポリシー違反となる可能性があるのでご注意ください。
テスト広告でも表示されない場合
テスト広告でも表示されない場合はアプリや使用環境側の問題が考えられます。よくあるケースを以下に記載します。実装を間違っている
当たり前ですが、実装方法を間違っている場合は広告が表示されません。特に以下を忘れていないか確認しましょう。
- 広告アプリIDを付与し忘れていないか?
- AndroidManifest.xmlに広告アプリIDを追加しているか?(2018/10から追加)
広告の実装方法については以下の記事にまとめていますので、今一度、正しい実装がされているか?を確認しましょう。
サイズが制限されていてバナーを表示できない
AdMobのバナーサイズは以下の通りです。サイズ | 説明 | AdSize の定数値 |
320×50 | バナー | BANNER |
320×100 | バナー(大) | LARGE_BANNER |
300×250 | IAB レクタングル(中) | MEDIUM_RECTANGLE |
468×60 | IAB フルサイズ バナー | FULL_BANNER |
728×90 | IAB ビッグバナー | LEADERBOARD |
画面の幅×32|50|90 | スマートバナー | SMART_BANNER |
その場合には以下のようなメッセージがログに表示されます。
W/Ads: Not enough space to show ad. Needs 320x50 dp, but only has 288x495 dp.
SMART_BANNERの左右にmarginを付与している
adSizeでSMART_BANNERを指定している状態で、AdViewの左右にmarginを付与すると広告が表示されないようです。ネットに繋がっていない
当たり前ですがネットに繋がっていないと広告は表示されません。広告がブロックされている
ユーザーに広告ブロックされている場合にももちろん広告は表示されません。意図的に広告ブロックしていないつもりでも、アンチウイルスソフトの一部機能としてブロックされていることがあります。
デバッグ中に広告が表示されない場合は、デバッグ環境で広告をブロックしていないか?を確認しましょう。
アプリがブラックリストに入っている
StackOverFlowの情報を見ると、自分で正規広告を多数回クリックしたりするとブラックリスト入りして、広告が表示されないことがあるそうです。そのケースが疑われる場合にはAdMobに直接問い合わせましょう。
まとめ
この記事ではAdMobの広告が表示されないときのよくある原因と対処方法について分かりやすくまとめてみたつもりです。AdMobの広告が表示されなくて困っている方のご参考になれば幸いです。