開発

Flutter × AdMob 完全ガイド
ID管理・広告の種類・単価と使いどころ

· SEADICE

AdMobのIDはアプリごと・広告種類ごとに発行され、リリース時にテスト用IDを本番IDに差し替える必要がある。同じ種類の広告なら複数箇所で使い回せる。

FlutterでAdMob広告を実装していると、次々と疑問が湧いてくる。「テスト用IDはリリースのたびに変えるの?」「広告の種類ごとに別々のID?」「設置場所が複数あったら都度作成が必要?」「そもそも6種類ある広告のどれを使えばいいの?」この記事ではTOITEのリリース作業で実際に調べたことをすべてまとめた。

テスト用IDとは何か

テスト用IDはGoogleが提供する共通IDで、どのアプリからでも使える。実際の広告が表示されるが収益は発生せず、開発中は必ずこのIDを使うことがGoogleポリシーで定められている。

AdMobには、開発中に使うためのテスト用広告ユニットIDが用意されている。

// iOS テスト用(Googleが公式に提供)
バナー:             ca-app-pub-3940256099942544/2934735716
インタースティシャル: ca-app-pub-3940256099942544/4411468910
リワード:           ca-app-pub-3940256099942544/1712485313

このIDはどのアプリからでも使える共通のテスト用IDだ。実際の広告が表示されるが収益は発生しない。開発中は必ずこのIDを使うことがGoogleのポリシーで定められている(本番IDで開発中にクリックすると無効なクリックと判定されてアカウント停止になる可能性がある)。

本番リリース時に変える必要があるもの

本番リリース時に変えるべきIDは、iOS Info.plistのアプリID・AndroidManifest.xmlのアプリID・コード内の各広告ユニットIDの3種類だ。

1. GADApplicationIdentifier(アプリID)

iOSのInfo.plistに記述するAdMobのアプリID。アプリ1本につき1つ発行される。

<!-- ios/Runner/Info.plist -->
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX</string>

テスト用アプリIDはca-app-pub-3940256099942544~1458002511。本番リリース時はAdMobコンソールで登録した自分のアプリのIDに差し替える。

2. 広告ユニットID(バナー・インタースティシャル・リワードそれぞれ)

広告の種類ごとに個別のIDが発行される。使っている広告の種類分だけ変える。

// 本番IDに差し替える箇所(例: ad_service.dart)
static String get banner => Platform.isAndroid
    ? 'ca-app-pub-XXXX/XXXXXXXXXX'  // Androidの本番バナーID
    : 'ca-app-pub-XXXX/XXXXXXXXXX'; // iOSの本番バナーID

AndroidとiOSで別々のIDが発行されるため、プラットフォームごとに分けて記述する必要がある。

なぜアプリごとに異なるのか

AdMobはアプリ単位で収益を管理するため、IDはアプリごとに別発行される。アプリBのIDをアプリAで使い回すことはできない。

AdMobの収益はアプリ単位で管理される。どのアプリでどれだけ広告が表示・クリックされたかを追跡するために、アプリとユニットが紐づく仕組みになっている。

つまり構造はこうだ:

AdMobアカウント
└── アプリA(App ID: ca-app-pub-XXXX~AAAA)
    ├── バナー広告ユニット(ca-app-pub-XXXX/0001)
    ├── インタースティシャル(ca-app-pub-XXXX/0002)
    └── リワード(ca-app-pub-XXXX/0003)
└── アプリB(App ID: ca-app-pub-XXXX~BBBB)
    ├── バナー広告ユニット(ca-app-pub-XXXX/0004)
    └── リワード(ca-app-pub-XXXX/0005)

1つのAdMobアカウントで複数のアプリを管理できるが、IDはアプリごとに別々に発行される。アプリBのIDをアプリAに使い回すことはできない。

AdMobコンソールでの設定手順

admob.google.comでアプリを追加し、広告ユニットを種類ごとに作成して、発行されたIDをコードに反映する。

  1. admob.google.com にアクセス
  2. アプリを追加 → iOS / Android を選択 → アプリ名を入力
  3. アプリIDをメモca-app-pub-XXXX~XXXX形式)→ Info.plistに記述
  4. 広告ユニットを作成 → バナー・インタースティシャル・リワードをそれぞれ作成
  5. 各ユニットIDをコード内に反映

注意: App Store審査中も本番IDを使う。テスト用IDのまま提出するとポリシー違反ではないが、審査後に差し替えると再ビルド・再申請が必要になる。最初から本番IDで提出するのが効率的。

Androidの場合はAndroidManifest.xmlも変える

AndroidはiOSのInfo.plistとは別に、AndroidManifest.xmlにもアプリIDを記述する必要がある。

<!-- android/app/src/main/AndroidManifest.xml -->
<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX"/>

iOSのInfo.plistとAndroidのAndroidManifest.xml、それぞれ別々に差し替える必要がある。

まとめ

リリース前にAdMob関連で変えるべきものをチェックリストにするとこうなる。

新しいアプリを作るたびにこの作業が必要になる。テスト用IDのままリリースしてしまうと収益が発生しないので、デプロイ前のチェックリストに必ず入れておくといい。

同じアプリ内で複数箇所に広告を置くとき、IDは都度作成が必要か

都度作成は不要だ。同じ種類の広告なら1つのIDを複数箇所で使い回せる。

AdMobのIDは「設置場所」ではなく「広告の種類」に紐づいている。バナーを3つの画面に貼っても同じバナーIDを使えばいい。

// 同じIDを複数のWidgetで使い回してOK
final banner1 = BannerAd(adUnitId: AdService().bannerAdUnitId, ...);
final banner2 = BannerAd(adUnitId: AdService().bannerAdUnitId, ...);

ただし、画面ごとの収益内訳を細かく分析したい場合は場所別にIDを作ることもできる。通常は種類ごとに1つで十分だ。

AdMobの広告6種類を比較する

収益単価が最も高いのはリワード系($3〜10 CPM)で、バナー($0.1〜0.5 CPM)の10〜20倍になることがある。ただし表示回数はバナーが圧倒的に多い。

種類 単価目安 UXへの影響 向いているアプリ
バナー 低($0.1〜0.5 CPM) 低・常時表示 とりあえず全アプリ
インタースティシャル 中($1〜3 CPM) 高・全画面で強制 画面遷移が多いアプリ
リワード 高($3〜10 CPM) 低・ユーザーが選択 回数制限があるアプリ
リワードインタースティシャル 高($3〜8 CPM) 中・全画面だが報酬あり リワードの自動表示版(ベータ)
ネイティブアドバンス 中($1〜4 CPM) 低・UIに溶け込む リスト・フィード型アプリ
アプリ起動 中($1〜3 CPM) 中・起動時に毎回表示 頻繁に起動するツール系

単価が高いのはリワード系

ユーザーが自分から「見る」を選択するリワード広告は、視聴完了率が高くエンゲージメントが強いため単価が最も高い。バナーの10〜20倍になることもある。

ただし表示回数はバナーが圧倒的に多い

単価が高くてもリワードは「ユーザーが能動的に選ぶ」場面でしか表示されない。バナーは画面を開くたびに表示されるため、MAUが大きくなると収益の柱になる。

TOITEで採用した3種類の理由

実際にTOITEに実装したのはバナー・インタースティシャル・リワードの3種類だ。

ネイティブはリスト画面がなく活かしにくい。アプリ起動広告は教育系アプリには重すぎる。この判断で今は十分だと思っている。

まとめ

リリース前にAdMob関連で変えるべきものをチェックリストにするとこうなる。

新しいアプリを作るたびにこの作業が必要になる。テスト用IDのままリリースしてしまうと収益が発生しないので、デプロイ前のチェックリストに必ず入れておくといい。

← ブログ一覧に戻る