すべての記事
Deep dive読了まで 8 分

有料アプリの返金はサーバーに届かない。だからアプリ自身が気づく必要がある

買い切り型の有料アプリの返金は、サーバーが受け取るどの通知も経由しません。Google は購入者に2時間の返品期間を与えてアプリをアンインストールし、Apple は契約に基づき90日以内であれば返金でき、どちらも証拠を求めません。各ストアが何を伝えてくれるか、何を失うのか、アプリ内でどう確認するかを解説します。

木の机の上に置かれたスマートフォンと、破れたストアのレシート、数枚の硬貨。有料アプリの返金を表すイメージ

要点

  • 有料アプリの返金は、アプリ内課金ではなく、アプリのダウンロードそのものの代金が対象です。Apple も Google も、これに対するサーバー通知を文書化していません。
  • Google Play Console ヘルプによると、購入者は有料アプリの購入後、最大2時間以内であれば返品して全額返金を受けられます。返品できるのは同じアプリにつき1回だけです。
  • Google Play の返金ポリシーによると、アプリは返金の一環としてアンインストールされ、同じアプリを再購入した購入者は2回目の返金を受けられません。
  • Apple の App Store Server Notifications V2 の REFUND タイプが対象とするのは、消耗型、非消耗型、自動更新サブスクリプション、非更新サブスクリプションです。アプリの購入はこのリストに含まれていません。
  • Apple Developer Program 使用許諾契約の Schedule 2 第6.3条により、Apple はダウンロードから90日以内にキャンセルした購入者に返金でき、開発者はその金額を Apple に補填します。
  • Apple の StoreKit ドキュメントには、アプリ購入の署名付き記録である AppTransaction に revocationDate が記載されており、アプリはこれをデバイス上で確認できます。
  • CONSUMPTION_REQUEST も Google Play の orders.reviewrefund も、アプリのダウンロード購入については文書化されていません。そのため有料アプリの返金は、開発者の証拠なしに判断されます。

買い切り型の有料アプリの返金は、ほとんどの返金ツールが見張っていない裏口を通ります。購入者が返品するのがアプリ内で買ったものではなくアプリそのものである場合、Apple と Google はあなたへの支払いからその代金を差し引きますが、サーバーには通知を1通も送りません。Google は少なくともアプリをアンインストールします。iOS では、Apple 公式フォーラムの開発者たちが、返金を受けた購入者がそのままアプリを使い続けていると報告しています。有料アプリを販売しているなら、有料アプリの返金はレポート上のマイナスの1行としてしか目にしない唯一の返金です。アプリがデバイス上で確認しない限りは。

Google Play と App Store における有料アプリ返金のルール

どちらのストアも、ダウンロード購入を独自のルールを持つ独立した商品として扱います。各ストアのドキュメントの内容は次のとおりです。

ルールGoogle PlayApp Store
迅速なセルフサービス返品購入後最大2時間以内、全額返金文書化なし
より長い申請期間購入者は48時間以内に申請可能、その後は開発者に連絡開発者契約の Schedule 2 に基づき、Apple はダウンロードから90日以内に返金可能
返品できる回数アプリごとに1回。再購入分は再度返金できない文書化なし
アプリはどうなるか返金の一環としてアンインストール文書化なし。返金後も購入者が使い続けていると開発者が報告
開発者による返金可能。全額返金のみ、Play Console から不可
あなたへのサーバー通知文書化なし文書化なし
あなたへの証拠の要求文書化なし文書化なし

Google Play の2時間返品の仕組み

Google の Play Console ヘルプははっきり書いています。有料アプリを購入したユーザーは、最大2時間以内であれば返品して全額返金を受けられ、返品できるのはアプリにつき1回だけです。Google の消費者向け返金ポリシーはさらに、購入内容によっては48時間以内であれば返金を受けられる場合があること、アプリは返金の一環としてアンインストールされること、同じアプリを再購入した人はその返金を受けられないことを付け加えています。48時間を過ぎると、Google は購入者を開発者に案内します。

Apple による有料アプリの返金方法

App Store では、購入者は reportaproblem.apple.com から Apple に申請し、理由を選び、該当するアプリを選択します。Apple によると、24時間から48時間以内に更新があるとのことです。App Store の購入をあなたが自分で返金することはできません。上限を決めているのはあなたの契約です。Apple Developer Program 使用許諾契約の Schedule 2 第6.3条は、購入者がダウンロードから90日以内にキャンセルを希望した場合、またはアプリがあなたの仕様や適用法令に適合しない場合、Apple は全額を返金でき、あなたはその金額を Apple に補填するかクレジットを付与すると定めています。

有料アプリの返金がサーバーに一切届かない理由

両ストアが送る返金シグナルは、すべてアプリ内課金のために作られています。Apple は notificationType を、通知のきっかけとなったアプリ内課金または外部購入のイベントと説明しています。その REFUND タイプが対象とするのは、消耗型、非消耗型、自動更新サブスクリプション、非更新サブスクリプションのいずれかです。Get Refund History が返すのは、顧客が返金を受けたアプリ内課金です。アプリのダウンロードは、どのリストにも含まれていません。

Google も同じです。リアルタイム デベロッパー通知が対象とするのは、定期購入、1回限りのアイテム、無効化された購入であり、無効化された購入の productType は定期購入か1回限りの購入のどちらかです。Voided Purchases API は、1回限りのアプリ内注文と定期購入に適用されると説明しており、遡れるのは30日だけです。

有料アプリの返金で CONSUMPTION_REQUEST は届くか

届きません。Apple のドキュメントによると、CONSUMPTION_REQUEST が送られるのは、顧客が消耗型のアプリ内課金または自動更新サブスクリプションの返金を求めたときです。これは、両ストアを通じて開発者に証拠を求める、たった2つの返金フローのうちの1つです。もう1つは Google Play のチャージバック審査で、24時間以内に orders.reviewrefund で回答しますが、これも同じアプリ内課金の通知経路で届きます。どちらもアプリのダウンロードについては文書化されていません。有料アプリの返金は、あなたが送れるものを一切参照せずに判断されます。

返金を受けた購入者はアプリを使い続けられるか

Google Play では、ポリシー上アプリはアンインストールされます。iOS では、Apple のフォーラムにまさにこの点を尋ねる開発者のスレッドがあります。2025年3月のスレッドにはこうあります。「ユーザーが買い切り型の有料アプリを返金しても、アプリにはまだアクセスできる」。2022年の別のスレッドは、購入、インストール、返金をしたうえで使い続ける購入者がいるのではないかと疑っています。2025年6月の3つ目のスレッドは、App Store Server Notifications V2 がそもそもアプリ単位の返金を報告するのかを尋ねています。3つとも Apple からの回答はありません。

有料アプリの返金で失うお金

支払い側の影響は予測できます。Google の Play Console ヘルプによると、返金時には Google がサービス手数料を返すため、支払いから差し引かれるのは定価ではなくあなたの取り分です。Google があなたに支払った後の返金は今後の支払いから差し引かれ、残高が48時間以上マイナスのままだと、Google があなたの銀行口座から引き落とすことがあります。Apple 側では、契約上、価格と同額を補填することになっています。実際には、RevenueCat が2022年に、Apple が差し引いたのは Extended Partner Share と表示される手数料控除後の金額だったと報告しており、Apple は自身の取り分を受け取っていませんでした。

戻ってこないのは、その購入者に提供するためにすでに支払ったコストです。例で説明します。$6.99 の有料写真アプリが、クラウドのモデルでフィルターを処理し、プロジェクトをクラウドストレージに同期しているとします。その購入者を連れてきた広告にも、あなたはお金を払っています。

コスト項目Google Play で戻るかApp Store で戻るか
$6.99 のうちあなたの取り分支払いから差し引かれる支払いから差し引かれる
ストアのサービス手数料またはコミッションGoogle からあなたに返されるRevenueCat の報告によると、請求されない
すでに使われたクラウド推論と API 呼び出し戻らない戻らない
同期済みプロジェクトのストレージ戻らない戻らない
購入者獲得のための広告費戻らない戻らない
購入者が使い続ける場合の継続的なサーバーコスト終了。アプリはアンインストール済みアプリが確認するまで続く

iOS で高くつくのは、この最後の行です。アプリを手元に残した返金済みの購入者はバックエンドを呼び出し続け、返金後のすべての推論リクエスト、同期、API 呼び出しが、収益の裏付けのないコストになります。サーバーコストのない有料アプリなら、返金は1件の売上を失うだけです。バックエンドのあるアプリでは、膨らみ続ける請求書になりかねません。

アプリ内で有料アプリの返金を検出する方法

サーバーには何も届かないので、確認はデバイス上で始めて、その結果をサーバーに伝える必要があります。

iOS では AppTransaction の revocationDate を読む

AppTransaction は、顧客がそのアプリを購入したことを示す App Store の署名付き記録です。Apple の StoreKit ドキュメントには現在、アプリ購入の取り消し日と説明される revocationDate プロパティが記載されています。起動時に AppTransaction.shared を読み取り、結果を検証し、revocationDate が nil でなければ返金済みのダウンロードとして扱います。署名付きの値をサーバーに送り、そのアカウントへのサービス提供を止められるようにします。

  • Apple によると、appTransactionID は返金や再購入の後も同じ Apple アカウントで変わりません。記録のキーにすれば、再び支払った購入者を識別できます。
  • AppTransaction.refresh() は App Store から新しい記録を取得しますが、サインインのプロンプトが表示されます。Apple は、「復元」ボタンをタップするなど、ユーザーが明示的に操作した後にだけ呼び出すよう推奨しています。
  • 署名付きの値はデバイス上にあります。Apple のドキュメントにはこれに関するサーバー通知の記載がないため、サーバーが知ることができるのはアプリが報告した内容だけです。
ノートパソコンの前で、画面に南京錠が表示されたスマートフォンを持つ開発者。有料アプリの返金後にアクセスを確認している

Android では Play Integrity にライセンス判定を問い合わせる

ほとんどのケースは Google のアンインストールで片付きますが、たとえばバックアップからサイドロードしたコピーのように、アンインストール後も残るものがあります。Play Integrity API は、ログイン中のアカウントについて appLicensingVerdict を返します。LICENSED はユーザーがアプリの利用資格を持つことを意味します。UNLICENSED は持たないことを意味し、Google は GET_LICENSED ダイアログを表示するよう提案しています。UNEVALUATED は、ユーザーが Google Play にログインしていないなどの理由で Google が確認できなかったことを意味します。Google はまた、一部の古いデバイスではアンインストール後も利用資格が残ると注記しており、LICENSED がすべてのデバイスで有効な購入の証明になるわけではありません。

サーバーを門番にする

クライアント側の確認はパッチで無効化されることがあります。守る価値があるのはバックエンドが行う有料の処理です。そこで、最後の報告が返金だったアカウント、UNLICENSED 判定だったアカウント、あなたが決めた猶予期間を過ぎても判定がないアカウントからの呼び出しを、バックエンドが拒否するようにします。これで、返金が無料の計算資源に化けるのを防げます。

有料アプリをアプリ内課金に移行すべきとき

ビジネスモデルの変更に関する Apple 自身のガイダンスは、有料アプリからアプリ内課金付きの無料アプリへ移行し、AppTransaction の originalAppVersion を使って有料版を購入した人にプレミアム機能を提供し続ける方法を説明しています。この移行が返金の面でもたらす利点は具体的です。価格を非消耗型やサブスクリプションに載せれば、返金はサーバーが対応できる REFUND 通知や無効化された購入として届き、App Store でのサブスクリプションの返金リクエストは CONSUMPTION_REQUEST を発生させます。これらはまさに RefundHalt が受け取り、12時間および24時間の期限内に回答するシグナルです。有料ダウンロードでは、そのどれも得られません。

よくある質問

Google Play で購入者が有料アプリを返品できる期間は?
Google の Play Console ヘルプによると、購入後最大2時間以内であれば全額返金を受けられ、アプリにつき1回だけです。Google の返金ポリシーには、48時間以内であれば返金を受けられる場合があり、それを過ぎると Google は購入者を開発者に案内するとも書かれています。アプリは返金の一環としてアンインストールされます。
有料アプリが返金されたとき、Apple はサーバーに通知しますか?
文書化された通知はありません。Apple の App Store Server Notifications はアプリ内課金のイベントを対象としており、REFUND タイプに記載されているのは消耗型、非消耗型、自動更新サブスクリプション、非更新サブスクリプションだけです。アプリはデバイス上で AppTransaction の revocationDate を読み取り、サーバーに報告できます。
返金を受けた購入者は有料の iOS アプリを使い続けられますか?
Apple のフォーラムの開発者たちは使い続けられると報告しており、Apple のドキュメントにも返金後にアプリを削除する手順は書かれていません。起動時に AppTransaction の revocationDate を確認し、返金済みのダウンロードを報告したアカウントへのサービス提供をサーバー側で止めてください。
有料アプリを自分で返金できますか?
Google Play ではできます。Play Console から有料アプリの全額返金を行えますが、一部返金はできません。また Google はサービス手数料を返します。App Store ではできません。App Store の購入を返金できるのは Apple だけです。
利用状況の証拠を使って有料アプリの返金に異議を申し立てられますか?
できません。Apple の CONSUMPTION_REQUEST は消耗型と自動更新サブスクリプションについて文書化されており、orders.reviewrefund による Google Play のチャージバック審査は、アプリ内アイテムと定期購入のための通知経路で届きます。どちらのストアも、アプリの購入そのものについて証拠を提出するフローを文書化していません。

出典と参考資料

RefundHalt

App Store と Google Play の返金を自動処理

続きを読む

次の返金リクエストは、すでに向かってきています。

異議を申し立てられなかった返金について、もう 1 通のサポートメールを読む時間で RefundHalt を設定できます。