App Storeの返金:開発者側に届く通知と対応
著者:Mehdi Azizi
公開・8 分
App Storeの返金はAppleだけが判断します。開発者にはCONSUMPTION_REQUESTが届き、12時間以内に回答でき、結果はREFUNDで知らされます。
App Storeでは、返金を認めるか断るかを決めるのはAppleで、開発者ではありません。 顧客はAppleのサイトか、あなたのアプリから申請します。Appleのサーバー通知を設定していれば、申請の時点でCONSUMPTION_REQUEST通知が届き、判断が出るとREFUNDまたはREFUND_DECLINEDが届きます。その間の12時間で、利用状況のデータとあなたの希望を送れます。ただし顧客が同意している場合に限ります。
返金が認められると、その購入は顧客の有効な権利から外れ、売上レポートにはマイナスで表示されます。このガイドでは、各ステップ、Appleに送れる内容、そして不正な申請に対してやってよいことを詳しく説明します。ルールは2026年11月3日に読み直したAppleのページに基づいています。実例は、10月に僕のアプリに設定したアラートから来ています。
App Storeの返金は誰が決める?
Appleだけです。Appleのサポートページが顧客側の流れを説明しています。reportaproblem.apple.comにログインし、「Request a refund」を選び、理由を入力して、対象の購入を選びます。Appleは返答まで24〜48時間待つよう案内しています。
顧客はあなたのアプリから返金を申請することもできます。StoreKitにはそのための申請シートがあり、iOS 15から使えます。Appleはアカウント設定やヘルプメニューから呼び出すよう勧めています。シートには購入内容と理由のリストが表示され、Appleは最大48時間で判断します。
どちらの場合も、あなたが承認する必要はありません。 できるのは情報と希望を伝えることだけで、それはAppleの判断材料のひとつになります。
ステップごとに双方から見えるもの
| ステップ | 顧客側 | 開発者側 |
|---|---|---|
| 申請 | Appleのフォームまたはアプリ内のシート | CONSUMPTION_REQUEST通知 |
| 12時間以内 | 待機 | 利用状況データの送信が可能 |
| 48時間以内 | Appleからの返答 | REFUNDまたはREFUND_DECLINED通知 |
| 承認後 | 支払い方法に返金 | 購入が有効な権利から外れ、ユニット数がマイナスに |
| 異議申し立て後 | Appleが返金を取り消し | REFUND_REVERSED通知、アクセスを復元 |
App Store Connectで見られるのは、すでに認められた返金だけで、場所はSales and Trendsです。申請そのものはサーバー通知でしか届きません。 通知がなければ、返金を後から知ることになります。
返金に関するサーバー通知
App Store Server Notifications V2のうち、ここで役立つのは5種類です。App Store Connectで登録したHTTPSのURLで受け取ります。本番用とサンドボックス用で1つずつです。
| 通知 | 内容 | やること |
|---|---|---|
CONSUMPTION_REQUEST | 顧客が返金を申請した | 同意があれば12時間以内に回答 |
REFUND | Appleが取引を返金した | 返金されたコンテンツやアクセスを取り消す |
REFUND_DECLINED | Appleが申請を却下した | 何もしない、アクセスは継続 |
REFUND_REVERSED | 顧客の異議申し立てを受け、Appleが返金を取り消した | 取り消したものを復元する |
REVOKE | ファミリー共有された購入が利用できなくなった | 家族メンバーのアクセスを取り消す |
サーバーは200〜206のHTTPコードで応答する必要があります。通知への応答に関するページによると、そうでない場合Appleは5回再送します。前回の試行から1、12、24、48、72時間後です。サンドボックスでは1回しか送りません。
Consumption API:Appleに伝えられること
申請が届いたら、Send Consumption Informationで回答できます。ルールはAppleの一文に尽きます。「Respond within 12 hours of receiving the CONSUMPTION_REQUEST notification.」APIのバージョン2は、サブスクリプションを含むすべての商品タイプに対応しています。
リクエストのフィールドは次のとおりです。
| フィールド | 必須 | Appleに伝える内容 |
|---|---|---|
customerConsented | はい | 顧客がデータ共有に同意した |
deliveryStatus | はい | 購入が提供され正常に動作しているか、または提供されなかった理由 |
sampleContentProvided | はい | 購入前にお試し、サンプル、説明を提供していたか |
consumptionPercentage | いいえ | 消費した割合。0〜100%を0〜100,000で表す |
refundPreference | いいえ | あなたの希望:DECLINE、GRANT_FULL、GRANT_PRORATED |
大事な補足が2つあります。deliveryStatusがDELIVEREDでない場合、消費割合はゼロでなければなりません。また、サブスクリプションの日割り返金では消費割合を省略します。Appleが計算します。
すべての前提は同意です。 Appleはこう書いています。「You must obtain valid consent from the customer before sharing their personal data with Apple in the Send Consumption Information API.」同意がなければ回答しません。また、Appleは広告トラッキングのダイアログで同意を取ることも禁止しています。「Don't use the AppTrackingTransparency prompt to obtain consent」
RevenueCatを使っている場合
RevenueCatを使うと、Appleの通知を受け取って申請に回答するのはRevenueCatで、Refund Controlという機能で行います。ポリシーは4つから選びます。全額返金を希望する、却下を希望する、利用状況データだけを送る、回答しない、です。
データ共有を有効にすることは、顧客の同意を得ていると認めることになります。RevenueCat自身がこう書いています。「Enabling consumption data sharing confirms that you obtained consent from your Customers.」また「Prefer no refund」は対象を絞ったグループに限定するよう勧めていて、この希望が大半の顧客に適用されると警告が出ます。
自分のサーバーでも通知を受け取りたい場合、RevenueCatのアプリ設定に「Apple Server Notification Forwarding URL」という項目があります。Appleの通知に関するRevenueCatのページで説明されています。僕が使っているのはこれです。RevenueCatでのサブスクリプションの組み立て方はRevenueCatとiOSのアプリ内サブスクリプションにあります。
収益とサブスクリプションへの影響
アクセスについて。 currentEntitlementsのドキュメントによると、「Products that the App Store has refunded or revoked don't appear in the current entitlements」です。アプリがcurrentEntitlementsで権利を確認していれば、返金されたアクセスは自動的に消えます。取引には取り消しの日付と理由がrevocationDateとrevocationReasonに入ります。
レポートについて。 売上レポートのヘルプによると、返金はユニット数と顧客価格がマイナスで表示されます。サブスクリプションについては、サブスクリプションデータのページが全額返金と一部返金をイベントとして数え、日次ユニットから差し引きます。
評価について。 ガイドライン5.6.4は、過剰な返金申請を品質不足の兆候のひとつに挙げています。返金率が高いことは単にお金の損失ではありません。Appleは行動規範を守っているかの判断にそれを考慮することがあります。
僕の例:アプリに設定したアラート
2026年10月12日、僕はアプリにアラートを設定しました。RevenueCatがAppleの通知をdevoria.frのルートに転送します。そこでAppleの署名を検証し、金額を含まないアラートを僕に送ります。結果だけでなく、申請が届いた瞬間を見たかったんです。
10月18日、最初の本物の申請がトレードシミュレーターのTradaZenに届きました。7日間の無料トライアル終了時に支払われた年額サブスクリプションです。理由は「意図しない購入」。学びは3つです。
- 同じ申請が何度も届くことがあります。 同じ夜に同じアラートを3回受け取りました。それ以来、アラートは通知タイプと取引IDで重複排除しています。
- 判断は1日以内に出ました。 Appleは申請から約22時間後に却下しました。顧客はアクセスを保持しました。
- 却下で終わりではありません。 同じ顧客が2日後、同じ取引で再申請しました。
トライアル終了時の「意図しない購入」による申請は、Appleへの回答では防げません。最初の支払いの前に、ペイウォールで防ぐものです。
ルールを破らずに不正な申請を減らす
許されていること:
- 申請ごとに正確なデータで回答する(顧客が同意している場合)。
- 対象を絞った希望を伝える。 たとえば全員に却下を希望するのではなく、すでに消費された購入に対して却下を希望する。
- 各
REFUNDを顧客アカウントに紐づける。 返金通知に関するAppleのページが、繰り返される返金を見つけるために推奨しています。 - 購入前に何を買うのかをはっきり伝える。 ガイドライン3.1.2(c)は、サブスクリプションを勧める前に、その価格で何が得られるかを説明するよう求めています。
禁止されていること:
- 申請を却下させるために虚偽のデータを送ること、または同意なしに回答すること。
- 広告トラッキングのダイアログで同意を取ること。Appleがはっきり除外しています。
- 購入に罠を仕掛けること。ガイドライン5.6は、意図しない購入に誘導することや、提供されないものに課金することを禁止しています。
- 返金を申請した顧客に圧力をかけること。同じルールが、威圧のない誠実な顧客対応を求めています。
いちばん効く手はやはり事前の対策です。価格、最初の支払い日、解約方法を示すペイウォールです。避けるべきミスはペイウォールのミスに、トライアルのルールはApp Storeの無料トライアルにまとめています。
本番前にテストする
申請のテストに関するページによると、サンドボックスとXcodeのStoreKitテストは返金申請に対応しています。サンドボックスでは、どの理由を選んでも自動的に承認されます。却下をシミュレートするには「Other」を選んでDECLINEと入力します。日割り返金ならGRANT_PRORATEDと入力します。サンドボックスでは、利用状況の回答を5分以内に送る必要があります。
返金されにくいサブスクリプション
iOS & Android Kitは僕のアプリのコードをベースにしていて、オンボーディング、ペイウォール、サブスクリプションが実装済みです。App Storeまで4つのステップを自分のペースで進められます。組み立ての全体はiOSのアプリ内サブスクリプションのページで、サブスクリプションに関するAppleのルールはガイドライン3.1.2で詳しく説明しています。
ペイウォールを公開する前に、無料の診断を受けてください。あなたのプロジェクトを本当に止めているものがわかり、僕のApple審査リジェクト対策チェックリストも届きます。
よくある質問
開発者はApp Storeの返金を拒否できますか?
できません。Appleだけが決めます。利用状況データと、たとえばDECLINEなどの希望を送れますが、それは判断材料のひとつにすぎません。最終決定はAppleです。
開発者は返金申請の通知を受け取れますか?
はい、App Store Server Notifications V2を設定していれば受け取れます。Appleは申請時にCONSUMPTION_REQUESTを、判断時にREFUNDまたはREFUND_DECLINEDを送ります。通知がなければ、レポートで認められた返金しか見えません。
Appleが返金申請を処理するのにどれくらいかかりますか?
Appleは顧客に24〜48時間と案内しています。StoreKitのドキュメントでは最大48時間です。あなたの側では、利用状況データを送れるのは12時間以内です。
返金後、アクセスはどうなりますか?
返金された購入は顧客の有効な権利から外れます。StoreKit 2のcurrentEntitlementsに返されなくなります。その後Appleが返金を取り消した場合はREFUND_REVERSEDが届くので、アクセスを復元する必要があります。
Appleに回答するには顧客の同意が必要ですか?
はい。AppleはConsumption APIでデータを共有する前に有効な同意を求めています。同意がなければ通知には回答しません。広告トラッキングのダイアログで同意を取ることはできません。
返金は僕のアプリに不利に働きますか?
その可能性はあります。ガイドライン5.6.4は過剰な返金申請を品質不足の兆候のひとつに挙げていて、Appleは行動規範の遵守を判断する際にそれを考慮することがあります。

