ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-06-19上級

ATT を取る前に広告SDKを初期化していた — 初回起動だけ eCPM が下がる順序の罠

iOS の AdMob メディエーションを4本のアプリへ広げたとき、初回セッションだけ広告収益が落ちる現象に気づきました。原因は ATT 許諾と MobileAds 初期化の順序です。順序が効く理由と、Antigravity にその順序を監査させた実装記録をまとめました。

antigravity432ios35admob16att2monetization15

プレミアム記事

AdMob メディエーションを iOS の4アプリに広げた直後、Firebase のダッシュボードで妙な段差を見つけました。日次の eCPM は安定しているのに、「セッション初回のインプレッション」だけ fill rate が一段低いのです。クラッシュもなく、広告は出ている。ただ、新規インストール直後の最初の1〜2枠だけ、明らかに単価の低い広告で埋まっていました。

原因にたどり着くまで数日かかりました。結論から書くと、ATT(App Tracking Transparency)の許諾ダイアログを出す前に広告SDKを初期化していた、という初期化順序の問題でした。コードはコンパイルも通るし、警告も出ません。だからこそ気づきにくい種類の不具合です。

この記事は、私が個人開発で運用している壁紙・ヒーリング系のアプリ群で実際に踏んだこの順序の罠を、なぜ効くのかという仕組みと、Antigravity に初期化シーケンスを監査させた手順とあわせて記録したものです。

初回セッションだけ収益が落ちる、という違和感

メディエーション構成では、各広告ネットワークが入札のために端末のシグナルを参照します。iOS で最も効くシグナルが IDFA(広告識別子)です。ATT で「トラッキングを許可」が得られた端末では IDFA が返り、得られない端末ではゼロ埋めの値になります。

ここで重要なのは、IDFA の値が「いつ確定するか」です。ATT の許諾結果が出る前に広告リクエストが走ると、その時点では IDFA がまだ取得できません。広告SDKは「トラッキング不可」とみなして入札を組み立てます。結果として、初回リクエストだけ非ターゲティング在庫に寄り、単価が落ちる。これが、私が見た「初回だけ fill rate が低い」の正体でした。

2回目以降のセッションでは、すでに ATT の結果が OS に記録されているため IDFA がすぐ返り、段差は消えます。だから日次平均では埋もれてしまい、セグメントを「初回 / 2回目以降」で割って初めて見える種類の劣化でした。

なぜ順序がそこまで効くのか

関係する4つの登場人物を、依存の向きで並べておきます。

要素役割初期化順序での位置
ATTrackingManagerトラッキング許諾を取り、IDFA の可否を決める最初
IDFA許諾後に確定する広告識別子ATT の結果に従属
GMA SDK(MobileAds)許諾結果を見て入札・配信を組むATT の
SKAdNetwork許諾に依らないアトリビューション経路SDK が自動処理

依存の向きは一方通行です。ATTrackingManager が結果を出す → IDFA が確定する → MobileAds がその状態で入札を組む。この順序が崩れると、MobileAds は「まだ何も決まっていない状態」で走り出します。

公式ドキュメントは「ATT のリクエストは広告をロードする前に」と書いていますが、実際にハマるのは「リクエストを出した直後」と「許諾が返った後」の区別です。requestTrackingAuthorization はコールバックで結果を返す非同期APIなので、呼び出した直後はまだ何も確定していません。許諾のコールバックの中で MobileAds を起動しないと、順序を守ったつもりでレースに負けます。私が最初に書いたコードは、まさにこの「呼んだ直後に MobileAds を起動する」形でした。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
初回起動だけ fill rate と eCPM が落ちる原因を、ATT・IDFA・MobileAds 初期化の順序という一点に絞って今日特定できる
ATTrackingManager と MobileAds.start の正しい順序を、レースを避ける完成形の Swift コードごと自分のアプリに移植できる
散らばった初期化呼び出しの順序チェックを Antigravity のエージェントに任せ、配信ポリシーの判断は人が握る線引きを持ち帰れる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

アプリ開発2026-06-30
Antigravity に任せた App Open 広告が、課金画面やリワード動画から戻るたびに出てしまう
Antigravity のエージェントに App Open 広告を実装させると、自前のリワード動画や Google Play の課金シートから戻った瞬間にも広告が出ます。AdMob のポリシー違反にも触れるこの挙動を、前面復帰の理由を記録するフォアグラウンド調停役で抑える設計を、動く Kotlin と検証手順つきで解説します。
アプリ開発2026-06-28
メディエーションを増やしたら iOS の計測が静かに痩せた — SKAdNetwork ID のズレを4アプリで揃える
メディエーションに新しいパートナーを足したのに iOS の収益が伸びず、SKAdNetwork ID の登録漏れが原因だった実体験。Info.plist の SKAdNetworkItems を4アプリで突き合わせ、Antigravity エージェントに照合させて人間が採否を決める運用を紹介します。
アプリ開発2026-06-25
「広告を見たら壁紙を解放」をエージェントがクライアント側だけで付与していた — リワード報酬をSSVで検証し直した記録
リワード広告を見たら壁紙を解放する機能を Antigravity のエージェントに頼んだら、解放フラグをクライアント側だけで書き込む実装が返ってきました。なぜそれでは足りないのか、AdMob のサーバーサイド検証(SSV)で報酬付与を検証し直し、二重付与まで止めた設計を記録します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →