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

レビュー導線を出したのに何も表示されない — Play In-App Review の数量制限と「表示保証なし」前提の設計

Play In-App Review API は launchReviewFlow が成功しても、ダイアログが表示されたとは限りません。数量制限・表示保証なし・テストでの無音化という3つの罠を解きほぐし、満足の瞬間に出して衝突を避ける発火設計を、Antigravity に実装させる手順とあわせて記録します。

in-app-reviewAndroid27monetization15Kotlin4Antigravity377

✦ プレミアム記事

癒し系の自作アプリに Play の In-App Review を組み込んだ日のことを、今でもよく覚えています。launchReviewFlow を呼ぶと addOnCompleteListener がきちんと成功で返ってきます。ログにも「review flow finished」と出ます。なのに、画面には星のダイアログが一度も出てこないのです。

実機を変え、アカウントを変え、何十回と試しても同じでした。コードは正しく動いているように見えるのに、肝心のレビュー導線だけが沈黙している。個人開発で長くアプリを触ってきた私自身でも、このときは半日ほど「自分の実装が壊れている」と思い込んで原因を探し続けました。

結論から言えば、壊れていたのは実装ではなく、私の前提のほうでした。Play In-App Review は「呼べば出る」API ではありません。出すかどうかを最終的に決めるのは Google 側で、しかもその判断はこちらからは見えません。この記事は、その「表示保証なし」を前提に置いたときに初めて正しく組める発火設計を、実装コードとあわせてまとめたものです。

「成功コールバック」が表示保証にならないという契約

最初に頭を入れ替えるべきなのは、launchReviewFlow の完了が「ダイアログが表示された」ことを意味しない、という点です。公式の挙動として、レビューフローが実際に表示されたかどうかをアプリ側に伝える API は存在しません。完了リスナーが返すのは「フローが終わった」という事実だけで、その中身(表示された/数量制限で出さなかった/既にレビュー済みだった)は区別できません。

// ❌ よくある誤解 — 完了したから「出た」と思い込む実装
manager.launchReviewFlow(activity, reviewInfo)
    .addOnCompleteListener { task ->
        // task.isSuccessful == true でも、ダイアログは出ていないかもしれない
        // ここで「レビュー済みフラグ」を立ててはいけない
        markReviewedAndNeverAskAgain()   // ← これが沈黙の温床になる
    }

私が半日溶かした原因の半分はこれでした。完了コールバックで「もう聞かない」フラグを永続化していたため、一度フローを回しただけで二度と発火しない状態を、自分で作り込んでいたのです。正しくは、コールバックでは何もしない(あるいは内部の発火クールダウンだけを進める)。レビューが完了したかどうかをこちらで判定しようとしないことが出発点になります。

こちらが知りたいことAPI が返すか取るべき設計
ダイアログが表示されたか返さないUX を表示有無に依存させない
ユーザーが星を付けたか返さない付与後の特典・分岐を作らない
数量制限で抑制されたか返さない(成功扱い)クールダウンで再発火に備える
フローが終わったか返す次画面への遷移再開にだけ使う

数量制限という見えない壁

次の壁が数量制限(quota)です。In-App Review は、同一ユーザーに対してレビュー導線を出せる頻度に上限を設けています。短期間に何度も launchReviewFlow を呼んでも、上限を超えた分は静かに無視され、ダイアログは出ません。しかも前述のとおり、無視されたことはコールバックからは分かりません。成功として返ってきます。

ここが個人開発者にとって本当に厄介なところです。検証中はアプリを何度も起動し、何度もレビュー条件を満たします。その結果、開発中の自分のアカウントが真っ先に数量制限に当たり、「実装したのに出ない」という最初の症状にぴったり一致してしまうのです。

私の癒し系アプリでは、自前のポリシーで条件を満たして発火させたうち、実際に星のダイアログまで到達したのは多い週でも40%前後でした。残りの60%は数量制限や Google 側の判断で静かに見送られています。この数字を「異常」ではなく「正常」として受け止められるかどうかが、最初の落とし穴を回避できるかの分かれ目になります。

設計上の含意は明確です。発火回数は API の制限に頼って絞るのではなく、アプリ側で意図的に間引くこと。私は癒し系アプリで、レビュー導線を「セッションをまたいで一定間隔が空いたとき」かつ「満足のシグナルが出たとき」にだけ発火するようにしています。API の quota はあくまで最後の安全網で、こちらの発火ポリシーがその手前で十分に絞っているのが理想です。

✦

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

この記事の続きを読む

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

この記事で得られること
✦launchReviewFlow が成功してもダイアログは出ていないかもしれない、という API の本当の契約を理解し、コールバックに UX を依存させない実装ができる
✦数量制限・ReviewInfo の寿命・内部テストでの無音化という3つの罠を踏まずに、レビュー導線を本番で機能させられる
✦広告やペイウォールと衝突させず、満足のピークでだけ発火させる engagement ベースのトリガー設計を、自分のアプリに移植できる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

▣ アプリ開発2026-05-25
Antigravity の Inline Edit と Agent モードを壁紙アプリ運用で1ヶ月使い分けた所感
壁紙アプリ4本の実運用で Antigravity の Inline Edit と Agent モードを1ヶ月使い分けた所感です。実測値・AGENTS.md への判断軸の固定・dSYM 一括統一・クレジット消費まで、現実的な運用設計を共有します。
▣ アプリ開発2026-09-29
Cloudflare をパージしても古い壁紙が届き続けた原因は、オリジン側で JPEG を握っていた XPageSpeed
同じ URL に上書きした壁紙画像が、Cloudflare をパージしても古いまま届き続けた運用の記録です。ローカル・オリジン・エッジの三者を突き合わせて層を名指しする検査、プレフィックスパージの使いどころ、Xserver の XPageSpeed を .htaccess で安全に切る書き方まで扱います。
▣ アプリ開発2026-09-19
見積書 PDF の自動化を一度にまとめて頼み、4 つに割り直すまで
受託の見積書を毎回コピーして作っていた手作業を、Antigravity に頼んで小さな PDF 出力ツールへ移した記録です。最初に全部をまとめて頼んで作り直すことになった理由と、データ・計算・見た目・保存の 4 つに割って渡し直した順番を、動くコードと一緒に書き残します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます