広告つきFlutterアプリを
iOSにリリースするまでにやること全部
AdMob広告つきFlutterアプリのiOSリリースには、AdMob登録・ATT実装・プライバシーポリシー公開・App Store Connectのプライバシー申告の8ステップが必要だ。コードを書き終えただけでは申請できない。
TOITEのリリース作業で実際にやった手順を全部まとめた。
全体の流れ
AdMob登録→本番ID反映→ATT実装→プライバシーポリシー公開→ビルド→App Store Connect登録→Transporterアップロード→プライバシー申告の8ステップで完了する。
- AdMobでアプリと広告ユニットを登録する
- 本番の広告IDをコードに反映する
- ATT(App Tracking Transparency)を実装する
- プライバシーポリシーを公開する
- flutter build ipa でビルドする
- App Store Connect でアプリを登録する
- Transporter でアップロードする
- App Store Connect でプライバシー申告・審査情報を入力する
1. AdMobでアプリと広告ユニットを登録する
admob.google.comでアプリを追加し、使う広告種類ごとに広告ユニットを作成する。iOSとAndroidは別登録が必要で、同種類の広告なら複数箇所で1つのIDを使い回せる。
登録後、使う広告の種類ごとに広告ユニットを作成する。TOITEで使った3種類:
- バナー: ナビゲーションバー上に常時表示
- インタースティシャル: 利用回数切れ時に全画面表示
- リワード: ユーザーが「見る」を選択して回数を追加獲得
発行されるIDは2種類。アプリID(~で区切られる)と広告ユニットID(/で区切られる)。
注意: 同じ種類の広告を複数箇所に配置する場合、IDは1つを使い回せる。設置場所ごとに作成する必要はない。
2. 本番の広告IDをコードに反映する
差し替える箇所はInfo.plistのGADApplicationIdentifier・コード内の各広告ユニットID・AndroidManifest.xmlの3箇所だ。テスト用IDのままリリースすると収益が発生しない。
Info.plist(アプリID):
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX</string>
コード内の広告ユニットID:
static String get banner => Platform.isAndroid
? 'ca-app-pub-XXXX/XXXXXXXXXX' // Android
: 'ca-app-pub-XXXX/XXXXXXXXXX'; // iOS
リワード広告の報酬数はAdMobコンソールで設定した値(reward.amount)がコードに渡される。UIの表示文言と一致させておくこと。
3. ATT(App Tracking Transparency)を実装する
iOS 14.5以降、IDFAへのアクセスにはユーザー許可が必要だ。app_tracking_transparencyパッケージを追加し、AdMob初期化より前に許可ダイアログを表示すること。
app_tracking_transparency パッケージを追加する。
# pubspec.yaml
dependencies:
app_tracking_transparency: ^2.0.7
アプリ起動時に許可ダイアログを表示する。AdMob初期化より前に呼ぶ。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await AppTrackingTransparency.requestTrackingAuthorization();
await MobileAds.instance.initialize();
runApp(const MyApp());
}
Info.plist に使用目的の文言も必要だ。
<key>NSUserTrackingUsageDescription</key>
<string>より関連性の高い広告を表示するためにトラッキングを使用します。</string>
4. プライバシーポリシーを公開する
App Store審査にはプライバシーポリシーの公開URLが必須だ。収集データの種類・第三者提供先(AdMob・Firebase等)・データ削除方法・連絡先を記載してデプロイしておく。
記載すべき内容:
- 収集するデータの種類(カメラ・広告識別子など)
- 第三者への提供先(AdMob・Firebase・Anthropicなど)
- データの削除方法
- お問い合わせ先
5. flutter build ipa でビルドする
flutter build ipa --releaseを実行するとbuild/ios/ipa/に.ipaファイルが生成される。本番IDへの差し替えを必ず事前に完了させること。
flutter build ipa --release
6. App Store Connect でアプリを登録する
appstoreconnect.apple.comで新規Appを登録し、バンドルIDをXcodeのプロジェクトと一致させる。この手順を先に完了させないとTransporterのアップロードがエラーになる。
appstoreconnect.apple.com → 「マイApp」→「+」→「新規App」
- プラットフォーム: iOS
- バンドルID: Xcodeのプロジェクトと一致するものを選択
- SKU: 任意の文字列(変更不可)
7. Transporter でアップロードする
TransporterアプリにipaをドラッグするだけでApp Store Connectにアップロードされる。App Store Connectへのアプリ登録(手順6)が先に完了している必要がある。
8. プライバシー申告と審査情報を入力する
AdMobを使う場合「デバイスID」をトラッキング目的として申告しないと審査提出ボタンが押せない。ATT実装とプライバシー申告は必ずセットで対応すること。
App Store Connect → アプリ → 「アプリのプライバシー」から申告する。AdMobを使う場合に申告が必要なデータタイプ:
- 写真またはビデオ(カメラ・ライブラリを使う場合)
- 使用状況データ
- 診断データ
- デバイスIDまたはその他のID → 「トラッキング」にチェック必須
ハマりポイント: NSUserTrackingUsageDescription が Info.plist に含まれている場合、「デバイスID」をトラッキング目的として申告しないと審査提出ボタンが押せない。プライバシー申告とATT実装は必ずセットで対応すること。
その他に必要な入力:
- スクリーンショット(iPhone 6.9インチ必須)
- アプリ説明文・キーワード・サブタイトル
- サポートURL・プライバシーポリシーURL
- 年齢制限(広告ありの場合は該当項目にチェック)
リリース前チェックリスト
全10項目を確認してからApp Store審査に提出すること。特に本番IDへの差し替えとデバイスIDのトラッキング申告は見落としやすい。
- AdMobにアプリを登録し、本番IDを取得した
- Info.plist の GADApplicationIdentifier を本番IDに差し替えた
- コード内の広告ユニットIDを全種類本番IDに差し替えた
- ATT許可ダイアログを実装した(app_tracking_transparency)
- プライバシーポリシーを公開した
- flutter build ipa --release が通った
- App Store Connect にアプリを登録した
- Transporter でアップロードした
- プライバシー申告でデバイスIDをトラッキング目的に設定した
- スクリーンショット・説明文・URLを入力した