第10章
広告を設定し、公開後も運用する
AdMobとAdSenseの使い分け、テスト広告、同意、権限分離、監視と更新の流れを学びます。
この章で学ぶこと
- Android・iOSのAdMobとWebのAdSenseを使い分ける
- 広告ID、同意、ストア申告を安全に設定する
- 公開後の監視、問い合わせ、更新、権限棚卸しを続ける
AdMobとAdSenseを分ける
| 配信先 | 主なサービス | 組み込み方法 |
|---|---|---|
| Android / iOSアプリ | AdMob | Mobile Ads SDKとアプリID・広告ユニットID |
| Webサイト | AdSense | サイト審査、Web用コード、ads.txtなど |
Flutter向けGoogle Mobile AdsプラグインはAndroidとiOS向けで、Webを対象にしません。公式クイックスタートを基準に設定します。
広告を入れる前に、利用者体験、対象年齢、プライバシー、通信量、審査、収益の見込みを比較してください。最初の版では広告を入れず、価値と継続利用を確認してから追加する判断もあります。
1. AdMobをAndroid・iOSへ設定する
AdMobでAndroid用とiOS用のアプリを別々に登録し、それぞれのアプリIDと広告ユニットIDを取得します。
flutter pub add google_mobile_ads
Androidではandroid/app/src/main/AndroidManifest.xmlのapplication内にAdMobアプリIDを設定します。
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy" />
iOSではios/Runner/Info.plistに設定します。
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-################~##########</string>
SDKを初期化してから広告を読み込みます。
await MobileAds.instance.initialize();
アプリIDと広告ユニットIDは用途が違います。プラットフォームや広告形式ごとに管理し、コードへ意味のない文字列として散らさず、設定クラスにまとめます。
開発中は必ずテスト広告を使う
開発者が本番広告をクリックしたり、表示を不自然に繰り返したりしてはいけません。Googleが公開するテスト広告ユニットID、またはテスト端末設定を使います。
debug / development → テスト広告ID
release / production → 本番広告ID
productionの広告IDへ切り替わる条件を自動テストまたはビルドログで確認します。
2. WebにAdSenseを設定する
AdSenseではサイトを追加し、所有確認、審査、プライバシー対応を行います。審査が通る前に表示されないことや、承認後も常に広告が配信されるとは限りません。
一般的な流れです。
- AdSenseへ公開サイトのURLを追加する。
- 指定された方法でサイト所有権を確認する。
- プライバシーポリシーと必要な同意管理を公開する。
- 審査を依頼する。
- 承認後、広告ユニットまたは自動広告を設定する。
ads.txtの内容と公開URLを確認する。
Flutter Webの画面へ広告スクリプトを直接混ぜる場合は、HTMLのライフサイクル、ルーティング、レイアウト、同意前の読み込みを検証する必要があります。まずWebサイト側の固定した広告枠で試し、規約とユーザー体験を確認してください。
3. 同意とストア申告を一致させる
広告SDKを追加すると、広告識別子、端末情報、IPアドレス、利用状況などの扱いが変わることがあります。
- 対象地域に応じた同意管理を実装する。
- 同意前に読み込んでよいSDK・データを確認する。
- Google PlayのData safetyを更新する。
- App StoreのApp Privacyを更新する。
- プライバシーポリシーへ広告事業者と目的を書く。
- 子ども向け、年齢不明、パーソナライズ制限の設定を確認する。
法的判断が必要な場合は、対象地域と事業内容を伝えて専門家へ確認します。生成AIの回答だけを法的根拠にしません。
4. 広告と支払いの権限を分ける
AdMob・AdSenseの画面を管理する権限と、支払いプロファイルを管理する権限は別です。
- 開発者には対象アプリの設定に必要な範囲だけを付ける。
- 売上・税務・銀行情報は会計担当へ限定する。
- 新しい利用者を招待できるAdminを少人数にする。
- 退会者をAdMob / AdSense本体とPaymentsの両方から確認する。
- 支払い先変更は複数人で照合する。
5. 公開後の運用サイクル
公開は終点ではありません。
監視 → 問い合わせ確認 → 優先順位付け → 修正
↑ ↓
公開記録 ← 段階公開 ← テスト ← 新しいビルド
毎日〜毎週
- クラッシュ、ログイン失敗、保存失敗、費用の急増を見る。
- ストア審査、ポリシー通知、問い合わせを確認する。
- 広告の無効トラフィックや配信制限の通知を見る。
毎月〜四半期
- Flutter、Firebase、広告SDKの更新とセキュリティ情報を確認する。
- Admin、Owner、支払い利用者、CIの鍵を棚卸しする。
- プライバシー申告と実装の差を確認する。
- バックアップと復旧手順を実際に試す。
- 使われていない機能、データ、広告枠を減らす。
障害時
- 影響範囲と開始時刻を記録する。
- 本番変更を止め、直前のリリースと監視値を見る。
- Hostingの切り戻し、段階公開の停止、機能フラグなど安全な手段を選ぶ。
- 利用者へ事実、回避策、次の更新時刻を伝える。
- 復旧後、原因と再発防止を記録する。
最終課題
自分のアプリについて、次を1つのリリース記録へまとめてください。
- 企画の1ページ仕様書と、最初の版に含めない機能
- GitコミットID、アプリのversion、3プラットフォームのビルド番号
- Firebaseのdevelopment / production対応表
- Webプレビュー、Android内部テスト、iOS TestFlightの確認結果
- 管理者、リリース担当、会計担当、問い合わせ担当
- 広告の有無、テスト方法、同意とプライバシー申告
- 公開後に見る指標と、障害時の停止・切り戻し方法
生成AIに記録の抜けをレビューさせた後、実際の管理画面と成果物を人が照合して完成です。