UnityのAdMobでテスト広告が表示されないときに確認すること

白い背景の中央に配置した公式AdMobロゴ

AdMobのプラグインを入れてコードも追加したのに、広告が表示されない。そんなときは、設定をまとめて変更する前に「コードが動いているか」「読み込みが成功したか」「表示した広告をすぐ消していないか」の順で確認すると、調べる場所を絞れます。

この記事は、UnityでAdMobを設定する導入記事にあるAndroidの固定サイズバナーを前提にした、切り分け用のガイドです。

1. 最初に「どこまで動いたか」を分ける

広告が見えないだけでは、原因は決められません。次の表を上からたどり、現在の状態に合う箇所を確認します。この順番は、本記事で提案する調査手順です。

確認できたこと 次に調べる場所
ビルドが完了しない・アプリが起動しない ビルドログ、SDKの重複、Android依存ライブラリ、アプリIDの設定
アプリは起動するが、自分で入れた開始ログが出ない 実行シーン、GameObjectとコンポーネントの有効状態、プラットフォーム分岐
SDKの初期化までは進むが、広告リクエストが出ない 初期化後の呼び出し、同意取得の状態、処理途中の例外
読み込み失敗のログが出る エラーのdomain・code・message、通信、IDと広告形式
読み込み成功のログは出るが、画面に見えない HideやDestroyの呼び出し、シーン切替、バナーの位置とサイズ
公式のテスト広告は出るが、自分の広告ユニットは出ない テストデバイス設定と、AdMob側のアプリ・広告ユニットの状態

設定を1つ変更したら再確認し、変更前後のログを残します。複数箇所を同時に変えると、どの修正が効いたのか分からなくなります。

2. Android用の「アプリID」と「広告ユニットID」を照合する

この2つは入力場所が異なります。導入記事と同じテスト構成に戻す場合は、次の組み合わせを確認します。

用途 Androidのテスト用ID
UnityのGoogle Mobile Ads設定に入れるアプリID ca-app-pub-3940256099942544~3347511713
固定サイズバナーのコードに入れる広告ユニットID ca-app-pub-3940256099942544/6300978111

アプリIDは~、広告ユニットIDは/を含みます。AndroidでiOS用のIDを使ったり、バナーでインタースティシャル用のIDを使ったりしていないかも確認します。バナー用IDは、公式の「テスト広告」の形式別一覧と照合してください。公式:テスト広告、公式:Android導入ガイドのサンプルアプリID

UnityのGoogle Mobile Ads設定。AndroidアプリID欄に公式のテスト用アプリIDが入力されている。

Googleが用意したテスト広告ユニットは、自分のAdMobアカウントに紐付きません。そのため、まず公式のテストIDで確認し、その後に自分の広告ユニットでの確認へ進むと、調査対象を分けやすくなります。公式:テスト広告の仕組み

3. 実行シーンとスクリプトを確認する

Hierarchyに広告用のGameObjectがあり、対象スクリプトが付いているか確認します。別のシーンだけに置いている場合や、GameObject・コンポーネントが無効の場合は、そのスクリプトの開始処理へ進めません。

UnityのInspector。Adsオブジェクトに有効なTestBannerコンポーネントが付いている。

導入記事のコードは、Android端末での確認を目的にしています。UNITY_ANDROIDなどの条件付きコンパイルがある場合は、Windows向けのEditor実行とAndroidビルドで通る処理が異なります。コードが出すプラットフォームに関するログも読みます。

Google Mobile Ads Unity PluginにはEditor用の模擬広告がありますが、実機の通信・Android依存ライブラリ・実際の広告表示まで確認できるものではありません。公式では、Editorの模擬広告はGUIの下に表示される点も案内されています。公式:Unity Editorでのテスト

4. 読み込み失敗のログを残す

広告リクエストの前に失敗イベントを登録しておくと、表示されない理由を調べやすくなります。すでに失敗イベントを登録している場合は、その処理に診断情報を追加します。

以下は、既存のBannerView変数bannerViewに対して使う実機未検証の診断用断片です。単独では実行できません。

bannerView.OnBannerAdLoadFailed += error =>
{
    Debug.LogError(
        "AdMob load failed: " + error.ToString());

    var response = error.GetResponseInfo();
    if (response != null)
    {
        Debug.Log("AdMob response: " + response.ToString());
    }
};

LoadAdErrorには、domain・code・messageなどの情報があります。エラー番号だけで原因を決めず、OSとdomain、メッセージを合わせて確認します。 この断片はログを出す処理だけです。失敗イベントからUnityのUIやGameObjectを操作する場合は、メインスレッドで処理する必要があります。公式:広告読み込みエラー、公式:Unityオブジェクトとコールバック

ログに合わせた確認例

  • 形式やプラットフォームの不一致:固定サイズバナーのAndroid用IDを使っているか照合します。
  • 通信に関するエラー:端末の接続を確認し、接続先やネットワークを変えたときに結果が変わるか記録します。
  • 自分の広告ユニットの承認・配信に関するメッセージ:AdMobのアプリ状態やポリシーセンターを確認します。
  • 読み込みイベントが出ない:LoadAd()まで到達したか、直前の例外や同意取得の処理を確認します。

同意取得の処理で広告リクエストまで進まない場合は、UMPの同意取得を実装する方法で起動時の順序を確認してください。

承認や広告形式などのメッセージは公式ヘルプで照合できます。すべての表示失敗を「審査待ち」と判断して待つのは避け、実際のメッセージに沿って対応します。公式:オンボーディングの一般的な問題

5. Androidのビルドエラーは、広告の読み込みと分けて調べる

APKやAABを作成できない場合は、まずビルドログに出た最初の具体的なエラーを確認します。Unityのビルド失敗と、起動後の広告読み込み失敗では、調べる場所が異なります。

UnityのGoogle Mobile Ads設定。Enable Gradle build pre-processorが有効になっている。

SDKを.unitypackageとUPMの両方から追加していると、同じプラグインや依存ライブラリが重複する場合があります。導入方法を切り替えた履歴がある場合は、公式の移行手順と実際のファイルを照合します。ログを読まずにプラグインのフォルダやGradle設定をまとめて削除せず、変更前にプロジェクトを保存します。公式:導入方法の切り替え

6. 読み込み成功後に見えない場合

OnBannerAdLoadedが出たら、その後の表示処理と破棄処理を確認します。

  • 読み込み直後にHide()やDestroy()を呼んでいないか。
  • シーン切替で広告用オブジェクトが破棄され、OnDestroy()でバナーも破棄されていないか。
  • 新しいバナーを作る処理と古いバナーを破棄する処理が重なっていないか。
  • バナーのサイズと配置が表示先に合っているか。

Googleは、バナーがAndroid側のレイアウトに対して大きすぎる場合、表示されずエラーが記録されることを案内しています。まず導入記事と同じAdSize.Bannerと標準の位置指定で確認し、独自のサイズ・座標はその後に調べます。公式:バナーのサイズとライフサイクル

7. 自分の広告ユニットを確認する段階では

公式のテスト広告が表示できたら、自分の広告ユニットを使う確認へ進みます。その際は端末をテストデバイスに設定します。Googleのテスト広告は収益確認用ではなく、導入・動作確認用です。公式:テストデバイスの設定

詳細な調査にはAd inspectorも使えます。AdMobアカウント・アプリの設定などが必要で、起動できるのはテストデバイスです。初回の固定サイズバナーの切り分けを終えてから、広告ユニットやメディエーションの診断に使います。公式:Ad inspector

テストバナーが表示できたことと、公開に必要な設定が揃ったことは、それぞれ確認します。本番配信に向けて開発者サイト側の設定も準備する場合は、app-ads.txtの設定を参照してください。

まとめ

テスト広告が出ないときは、開始処理、ID、初期化、読み込みログ、表示・破棄の順で確認します。エラーを記録してから1箇所ずつ変更すると、原因を絞りやすくなります。

次の情報があれば、他の人にも状況を伝えやすくなります。

  • UnityとGoogle Mobile Ads Unity Pluginのバージョン
  • Androidのビルド・端末で確認したか
  • 使用したIDの種類と広告形式
  • SDK初期化、広告リクエスト、読み込み結果のログ
  • 直前に変更した設定と、その前後の結果

ログを共有するときは、テスト端末の識別子など公開不要な情報を取り除きます。

参考コードのライセンス:Apache 2.0。