サブスクリプションのアップグレード返金はすべてストアが決めることであり、あなたが決めることではない。しかもあなたの収益から直接差し引かれる
顧客が上位プランに移ると、ストアは旧プランの未使用日数についてサブスクリプションのアップグレード返金を行い、あなたの収益を自動的に減らします。App Store と Google Play でアップグレード返金がどう動くのか、そして Apple がなぜその金額をあなたのサーバーに渡さないのかを解説します。

要点
- サブスクリプションのアップグレード返金は自動です。顧客がサイクルの途中で上位プランに移ると、ストアはあなたに尋ねることなく旧プランの未使用日数をクレジットまたは返金し、その金額はあなたがすでに計上した収益から出ていきます。
- App Store ではアップグレードは即時に有効になり、Apple は元のサブスクリプションの日割り分を返金します。ダウングレードは次回の更新日まで待ち、返金は一切ありません。
- Apple はアップグレード返金の金額をあなたのサーバーに送りません。アップグレード後のトランザクションには isUpgraded のフラグが立ちますが、価格フィールドは依然として新プランの満額を示すため、App Store Server Notifications から計算した収益は過大になります。
- 日割りのアップグレード返金が計上される唯一の場所は App Store Connect の財務レポートです。Apple のスタッフによれば、この金額は App Store Server API、Notifications、StoreKit のいずれからも取得できません。
- アップグレードの際、Google Play はカードにお金を戻しません。未使用の期間をクレジットするか、価格の差額を請求するかのいずれかで、どちらになるかはあなたが設定した置き換えモードによります。既定は WITH_TIME_PRORATION です。
- アップグレード返金は顧客からの返金申請ではありません。CONSUMPTION_REQUEST もチャージバックの審査もないため、12 hours や 24 hours の猶予もなく、争う相手もいません。これは照合するものであって、戦うものではありません。
- 置き換えモードは収益に関わる判断です。WITH_TIME_PRORATION は追加の有料期間を顧客に渡し、あなたはそれを上位プランのコストで提供することになります。一方 CHARGE_PRORATED_PRICE は差額を今すぐ請求します。したがって既定を誤ると、アップグレードのたびに利益が少しずつ漏れていきます。
顧客がアップグレードをタップし、あなたの five dollar プランから ten dollar プランへ移り、あなたはより大きな売上を計上します。ちょうどその瞬間、ストアはあなたには決して見えない別のことをします。旧プランですでに支払い済みの日数について、その顧客にサブスクリプションのアップグレード返金を渡し、その金額はあなたの収益から出ていきます。誰もあなたに尋ねません。App Store では、サーバーが受け取るイベントの中にその金額を見つけることさえできません。
これはあなたが戦える返金ではありません。Apple の CONSUMPTION_REQUEST でもなければ、Google Play のチャージバック審査でもありません。これは日割り計算であり、両ストアが人々にプラン変更を許す仕組みそのものに組み込まれていて、契約者が一段上のプランへ移るたびに自動で走ります。以下では、各ストアでアップグレード返金が実際には何なのか、Apple がなぜその金額をあなたのサーバーに渡さないのか、そして Google Play の設定を誤ると何を失うのかを解説します。
サブスクリプションのアップグレード返金とは実際には何か
アップグレード返金は、顧客が支払ったが使わない時間についてストアが清算するものです。苦情、紛争、あなたの返金ポリシーとは何の関係もありません。プラン変更という仕組みだけを根拠に発火します。
これは日割り計算であって、顧客の苦情ではない
契約者が請求期間の途中で上位プランに移るとき、彼はすでにその期間の終わりまで旧価格で支払っています。ストアは未使用の部分について彼を埋め合わせます。Apple は元のサブスクリプションの日割り返金を行います。Google Play は未使用分の価値を新プランへクレジットします。どちらもあなたが応答できるフローを通らず、どちらもあなたの承認を待ちません。
発火させるのはアップグレードだけ
変更の方向がお金の動きを決めます。App Store では、アップグレードは同じサブスクリプショングループ内でより上位にランクされた製品への移動であり、その移動だけが即時かつ返金付きです。ダウングレードはより下位のランクへの移動であり、次回の更新時に有効になり返金はありません。クロスグレードは同じランクの製品間での移動であり、そのタイミングは関わる期間の長さによります。App Store Connect で製品のランクを間違えると、あなたがアップグレードだと思っている変更が別のもののように振る舞います。
| App Store の変更 | 有効になる時点 | お金に何が起きるか |
|---|---|---|
| 上位プランへのアップグレード | 即時 | Apple が元のサブスクリプションの日割り分を返金 |
| 下位プランへのダウングレード | 次回の更新日 | 返金なし、より低い価格で更新 |
| クロスグレード、前払いの期間が同じ | 即時 | 新しいサブスクリプションが開始、有料サービスは継続 |
| クロスグレード、期間が異なる | 次回の更新日 | サイクル途中の返金なし |
App Store がなぜアップグレード返金をあなたのサーバーから隠すのか
ここが収益レポートを壊す部分です。Apple はアップグレード返金を行いますが、いくら返金したのかをあなたのサーバーには決して伝えません。
isUpgraded だけが唯一の信号で、価格は誤っている
新しいトランザクションは isUpgraded が true に設定された状態で届き、プラン変更が起きたことを伝えます。そのトランザクションの価格フィールドは、Apple が旧プランから取り戻した金額ではなく、依然として新プランの満額の表示価格を示します。どの App Store Server Notification も返金の数字を運びません。Apple 自身の開発者フォーラムでの言葉を借りれば、日割り返金の金額は App Store Server API、Notifications、StoreKit のいずれからも取得できず、財務会計のあらゆる目的における出所は App Store Connect のレポートです。
財務レポートだけが正直な記録
App Store Connect の財務および売上レポートは、日割りのアップグレード返金を計上します。なぜなら、それらのレポートこそ Apple が実際にあなたに支払う金額を左右するからです。そのため、これまでに一度でも上位プランへ移った契約者については、それらが信頼できる出所になります。会計はレポートから組み立て、サーバーイベントは収益ではなく利用権の信号として扱ってください。

それが金額としてあなたに何を負わせるか
アップグレード返金は丸め誤差ではありません。それは実際の収益であり、Google Play ではさらに、未使用の期間をどれだけ手放すかをあなたが選ぶことになります。
返金はあなたがすでに計上した収益
あなたの 9.99 月額プランの契約者が、30 day cycle の day 20 に 19.99 へアップグレードするとします。月のおよそ3分の1が未使用なので、Apple は元の 9.99 のうち約 3.33 を返金します。あなたは売上全体を失うわけではありません。あなたは、顧客が前払いしたが使わない部分を返すのです。重要なのは、この返しが自動であり、旧い売上に降りかかることです。だからあなたがすでに数えた収益は、あとから縮みます。それをサイクル途中で上位プランへ移る契約者ごとに掛け合わせれば、それは支払いで見つける穴ではなく、あなたが本来見えるべき一行になります。
Google Play では置き換えモードこそが本当のコストのてこ
アップグレードの際、Google Play はカードにお金を戻しません。未使用の期間をいくつかの方法のいずれかで清算し、あなたは購入フローを起動するときに置き換えモードを渡すことでどれを使うかを選びます。この選択が、顧客に有料期間を渡すのか、差額を請求するのかを決めます。Google はアップグレードには CHARGE_PRORATED_PRICE を、ダウングレードには DEFERRED を推奨していますが、ライブラリの既定は WITH_TIME_PRORATION です。したがって、あなたが一度も設定していないフローが、静かに期間をクレジットしています。
| Google Play の置き換えモード | 有効になる時点 | 未使用の期間に何が起きるか |
|---|---|---|
| WITH_TIME_PRORATION(既定) | 即時 | 新プランの追加期間としてクレジット、次回の請求日は後ろへずれる |
| CHARGE_PRORATED_PRICE(アップグレードのみ) | 即時 | 残り期間の価格差額を今すぐ請求、請求日は変わらない |
| WITHOUT_PRORATION | 即時 | 今は何も清算せず、新価格は次回の更新から始まる |
| CHARGE_FULL_PRICE | 即時 | 新プランの満額を今すぐ請求、残りの価値は繰り越しまたは日割り |
| DEFERRED | 次回の更新 | 現在のプランは満了まで走り、その後に新プランが始まる |
アップグレード返金であなたの帳簿を驚かせないために
日割り計算をオフにすることはできませんし、そうしたくもないはずです。なぜなら、それこそがプラン変更を顧客にとって公正にするものだからです。あなたにできるのは、それを見て、値付けし、実際に争える返金とは切り離しておくことです。
Apple のアップグレードを財務レポートと照合する
返金の金額は決してあなたのサーバーに届かないため、App Store Connect の財務および売上レポートが、日割りのアップグレード返金が現れる唯一の場所です。契約者の収益を毎期それらのレポートと照合し、Server Notifications の累計から収益を計算しないでください。isUpgraded のフラグは変更が起きたことを伝えます。レポートはそれがいくらかかったかを伝えます。
Google Play の置き換えモードを意図して選ぶ
すべてのプラン変更について、置き換えモードを意図して渡してください。アップグレードで価格差額を今すぐ回収したいときは CHARGE_PRORATED_PRICE を使います。残りの期間を顧客に与えるつもりのときだけ WITH_TIME_PRORATION を残します。ダウングレードには DEFERRED を使い、期間が終わるまで現在の収益を保ちます。既定は一つの判断であり、誤った既定はアップグレードのたびに利益を少しずつ手放します。
アップグレード返金を、争える返金と分けておく
アップグレード返金は設計上、自動かつ最終です。それは顧客がお金を返せと言っているのではありません。あなたが実際に影響を及ぼせるのは顧客が起こす返金です。そこでは Apple が CONSUMPTION_REQUEST を送り、応答に 12 hours を与え、Google Play は orders.reviewrefund を通じてチャージバック審査を開き、24 hours の猶予を与えます。二つが決して混ざらないよう、データにタグを付けてください。一方はあなたが照合する一行。もう一方は、時間に追われながらあなたが答える一行です。
要するに
顧客がサブスクリプションをアップグレードすると、ストアは彼のために未使用の期間を自動で清算します。Apple は旧プランの日割り分を即座に返金し、その数字を決してあなたのサーバーに送らないため、App Store Connect の財務レポートが唯一正確な記録です。Google Play は、あなたが設定した置き換えモードに応じて期間をクレジットするか差額を請求し、既定は有料期間を顧客に渡し、あなたがコストで提供します。そのどれも CONSUMPTION_REQUEST やチャージバック審査を通らないため、争うものは何もありません。アップグレード返金を照合し、Google Play のモードを意図して設定し、それをあなたがまだ戦える返金と分けておいてください。
よくある質問
- サブスクリプションのアップグレード返金は私の承認を求めますか。
- いいえ。サブスクリプションのアップグレード返金は自動です。顧客がサイクルの途中で上位プランに移ると、ストアは旧プランの未使用の期間を自ら清算し、あなたへの要求も応答の猶予もありません。Apple は元のサブスクリプションの日割り分を返金し、Google Play はあなたが設定した置き換えモードに応じて未使用の期間をクレジットするか価格差額を請求します。
- なぜアップグレード後、私の App Store の収益が支払額と一致しないのですか。
- Apple がアップグレード返金の金額をあなたのサーバーに送らないからです。アップグレード後のトランザクションは isUpgraded が true に設定された状態で届きますが、価格フィールドは依然として新プランの満額を示し、どの App Store Server Notification も返金を含みません。サーバーイベントから計算した収益は新しい売上を数え、旧プランの返金を取りこぼすため、App Store Connect の財務レポートと照合するまで過大なままです。
- 顧客がアップグレードするとき、Google Play はカードにお金を戻しますか。
- いいえ。Google Play は未使用の期間を現金の返金ではなくクレジットとして扱います。置き換えモードに応じて、残りの期間を新プランへクレジットして次回の請求日を後ろへずらすか、残り期間の価格差額を請求します。既定モードは WITH_TIME_PRORATION で、期間をクレジットします。
- サブスクリプションのアップグレード返金に異議を申し立てられますか。
- いいえ。アップグレード返金は顧客からの返金申請ではありません。Apple からの CONSUMPTION_REQUEST も Google Play からのチャージバック審査もないため、12 hours や 24 hours の猶予もなく、送るものもありません。アップグレード返金は照合するものです。あなたが異議を申し立てるのは、顧客が起こした返金とチャージバックだけです。
- ダウングレードは顧客に返金を与えますか。
- いいえ。App Store ではダウングレードは次回の更新日に有効になり、返金は一切ありません。顧客は有料期間が終わるまで上位のレベルを保つからです。Google Play でダウングレードを扱う推奨の方法は DEFERRED 置き換えモードで、現在のプランを満了まで保ち、その後に下位のプランを開始します。
- アップグレードにはどの Google Play 置き換えモードを使うべきですか。
- Google はアップグレードには CHARGE_PRORATED_PRICE を推奨します。これは残り期間の価格差額を即座に請求し、請求日を変えません。既定の WITH_TIME_PRORATION はその代わりに、未使用の期間を上位プランでの追加サービスとしてクレジットするため、その期間を手放すつもりのときにだけ使ってください。
出典と参考資料
- Apple Developer: Auto-renewable subscriptions (upgrade, downgrade, and crossgrade behavior and prorated refunds)
- Apple Developer Forums: Retrieving the prorated refund amount after an upgrade (Apple staff on isUpgraded, the price field, and financial reports as the source)
- Android Developers: BillingFlowParams.SubscriptionUpdateParams.ReplacementMode (all replacement mode constants)
- Android Developers: About subscriptions (proration, default replacement mode, upgrade and downgrade recommendations)
- Google Play Developer API: Method orders.reviewrefund (chargeback review, 24 hours)
- Apple Developer: Send Consumption Information (CONSUMPTION_REQUEST response window)
RefundHalt
App Store と Google Play の返金を自動処理
続きを読む
子どもによる無断アプリ内課金はほぼ必ず親へ返金され、その負担は開発者が負う
子どもが親のスマートフォンでコインパックを買うと、Apple も Google もそれを返金し、どちらも事前に開発者へ確認しません。規制当局がそう設計させたのです。こうした無断アプリ内課金の返金が各ストアでどう処理されるのか、お金が動く15分の猶予、そして実際にいくらの損失になるのかを解説します。
アプリ返金の税金はもともとあなたのものではないので、返金で失うのはあなたの取り分であって、レシートに載る合計額ではありません
アプリ内購入を返金すると、レシートには価格と税金が戻ったように表示されます。その税金は最初からあなたのお金ではありませんでした。Apple と Google が merchant of record として税金を集めて納付し、返金時にはあなたの取り分に触れることなく元に戻します。返金が実際にいくらかかるのか、そして税金があなたのものになる唯一の設定について解説します。