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

Antigravity に任せた App Open 広告が、課金画面やリワード動画から戻るたびに出てしまう

Antigravity のエージェントに App Open 広告を実装させると、自前のリワード動画や Google Play の課金シートから戻った瞬間にも広告が出ます。AdMob のポリシー違反にも触れるこの挙動を、前面復帰の理由を記録するフォアグラウンド調停役で抑える設計を、動く Kotlin と検証手順つきで解説します。

antigravity403admob16app-open-adandroid25monetization15

プレミアム記事

個人開発で運営している壁紙アプリに App Open 広告を足そうとして、実装そのものは Antigravity のエージェントに任せました。出てきたコードは数十行で動き、ホーム画面から戻ると広告が出ます。ところが実機で触っていると、自分のリワード動画を見終えて戻った瞬間にも App Open 広告が重なって出るのです。課金シートを閉じた直後にも出ます。読者からすれば「広告を見たのに、また広告」という最悪の体験です。

原因はエージェントを責められません。App Open 広告の素朴な実装は「アプリが前面に戻ったら出す」であり、エージェントはその通りに書いただけです。抜けていたのは、前面に戻った理由を問わないという一点でした。ここを埋めないと、AdMob のポリシー(自社の全画面コンテンツの直後に App Open を出さない、という趣旨)にも抵触します。

「前面復帰のたびに出す」がなぜ事故になるのか

App Open 広告は本来、ユーザーがアプリを離れて戻ってきたとき、つまりコンテンツを待つ自然な隙間に出すための枠です。問題は、Android の Activity から見ると「ユーザーがホームに行って戻った」も「自分が出した全画面広告から戻った」も、同じ onStart として観測される点にあります。

私が踏んだ事故を整理すると、出してはいけない復帰は主に4種類でした。

  • 自前のインタースティシャル/リワード動画から戻ったとき(広告→広告の二重表示・ポリシー抵触)
  • Google Play の課金シートを閉じたとき(購入直後に広告は不信感に直結します)
  • Chrome Custom Tabs で外部リンクを開いて戻ったとき
  • コールドスタート時(起動スプラッシュと App Open が二重に走る)

逆に出してよいのは、ユーザーが自分の意思でアプリを離れて戻ってきたときだけです。この区別を onStart 単体では作れないのが核心です。

エージェントが書く素朴な実装と、その盲点

Antigravity に「App Open 広告を入れて」と頼むと、おおむね次の骨格が出てきます。ProcessLifecycleOwner でプロセス全体の前面化を監視し、戻ってきたら show() を呼ぶ形です。

// エージェントが最初に出してくる典型形(このままだと事故る)
class MyApp : Application(), DefaultLifecycleObserver {
    private lateinit var appOpenAdManager: AppOpenAdManager
 
    override fun onCreate() {
        super<Application>.onCreate()
        MobileAds.initialize(this)
        appOpenAdManager = AppOpenAdManager(this)
        ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    }
 
    // ★ ここが盲点: 「なぜ前面に戻ったのか」を一切問わない
    override fun onStart(owner: LifecycleOwner) {
        appOpenAdManager.showAdIfAvailable(currentActivity)
    }
}

このコードは、ホーム復帰でもリワード動画からの復帰でも等しく onStart で発火します。エージェントの出力をレビューするとき、私は「動くか」より先に「どの経路で前面に戻ってもこれが正しいか」を問うようにしています。App Open 広告に関してはここで必ず引っかかります。

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

この記事の続きを読む

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

この記事で得られること
リワード動画や課金シートから戻るたびに App Open 広告が二重表示されていた問題を、復帰要因を識別する調停役で止められるようになる
ProcessLifecycleOwner の ON_START だけに頼った素朴な実装が、なぜ AdMob のポリシー違反と離脱を生むのかを理解し、抑制条件を自分の手で設計できる
コールドスタート・全画面広告・課金フロー・外部リンクからの復帰を切り分ける Kotlin 実装を、自分のアプリにそのまま組み込める
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-06-25
「広告を見たら壁紙を解放」をエージェントがクライアント側だけで付与していた — リワード報酬をSSVで検証し直した記録
リワード広告を見たら壁紙を解放する機能を Antigravity のエージェントに頼んだら、解放フラグをクライアント側だけで書き込む実装が返ってきました。なぜそれでは足りないのか、AdMob のサーバーサイド検証(SSV)で報酬付与を検証し直し、二重付与まで止めた設計を記録します。
アプリ開発2026-06-21
戻るボタンで広告が出る/出ないが安定しない — 入れ子のifを独立ガードのリストに作り替えた記録
戻るボタン押下時のインタースティシャル表示判定が、入れ子のif文で優先度が暗黙化して壊れていました。各条件を理由つきの独立ガードに分解し、決定表からテストを生成した設計をまとめます。
アプリ開発2026-06-19
ATT を取る前に広告SDKを初期化していた — 初回起動だけ eCPM が下がる順序の罠
iOS の AdMob メディエーションを4本のアプリへ広げたとき、初回セッションだけ広告収益が落ちる現象に気づきました。原因は ATT 許諾と MobileAds 初期化の順序です。順序が効く理由と、Antigravity にその順序を監査させた実装記録をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →