Refund Saver
ユーザーが返金を申請すると、ストアは判断を下す前に調査を行います。返金が正当かどうかを判断するために、ストアは開発者にそのユーザーのアクティビティ情報を求めます。この証拠がなければ、たとえ頻繁に利用されたサブスクリプションであっても、返金が認められてしまう可能性が高くなります。
Refund Saverは、これらのリクエストに自動で対応し、収益を守りながら不正なリクエストの却下率を高める機能です。App StoreとGoogle Playの両方に対応しており、自動更新サブスクリプション、買い切りサブスクリプション、消耗型アイテム、非消耗型アイテム(永続アクセス商品を含む)など、あらゆる種類のアプリ内課金をカバーしています。
キャンセル前にサブスクライバーを引き止めましょう。 リテンションメッセージングを使えば、Appleのサブスクリプションキャンセル画面内にカスタムメッセージを表示できます — キャンセルボタンを押した瞬間に、継続する理由を伝えられます。
Refund Saverの仕組み
-
ユーザーが返金リクエストを開始すると、ストアはトランザクションと使用状況の詳細を求める通知を送信します。
レスポンスを無視または遅延させた場合、ストアは返金を承認する可能性が高くなります。
-
Adapty Refund Saverはこれらの通知に自動的に応答し、必要なデータをストアに送信します。
この自動化により、不必要な返金の可能性を減らし、時間を節約しながら収益を守ることができます。
-
Adaptyは各結果(返金または却下)を記録します。そのデータがダッシュボードのRefund Saver分析を支えています。
ストアの違い
Refund Saverは両方のストアで動作しますが、それぞれ返金の処理方法が異なります。
| App Store | Google Play | |
|---|---|---|
| Refund Saverが応答する内容 | トランザクションに対する消費リクエスト | 注文に対する返金審査。ユーザーの銀行がチャージバックとして開始する |
| ユーザーの同意 | 必要 | 不要 |
| Adaptyが結果を知る方法 | App Storeが通知を送信する | GoogleがレビューをするまでAdaptyが注文ステータスをポーリングする |
Google Playでは、ユーザーが返金を受ける方法は2つあります。返金リクエストはあなたの入力なしにGoogleが判断するため、Refund Saverはこれを認識しません。チャージバックはこれとは異なります。ユーザーが銀行に支払いの取り消しを求め、紛争が解決される前にGoogleがあなたの意見を求め、Refund Saverが代わりに回答します。ユーザーが勝ったチャージバックでは、購入価格のあなたの取り分と、銀行のチャージバック手数料の両方を失うことになります。
ストア別の前提条件
App Store
ユーザーが Apple に返金を申請すると、Apple は調査を行います。決定を下す前に、Apple はコンサンプションリクエスト(ユーザーが購入をどのように使用したかに関する詳細情報の要求)を送信します。Refund Saver は、あなたが希望する結果とユーザーの消費データをもとにリクエストに回答します。
App Store で Refund Saver を使用するには、次の手順が必要です:
- App Store サーバー通知 V2 を有効にする: Refund Saver は Apple が廃止した V1 通知には対応していません。
- アプリ内課金キーを追加する: Refund Saver はアプリ内課金キーを使って Apple への回答に署名します。Adapty には App settings → iOS SDK で Issuer ID、Key ID、
.p8ファイルを設定し、Bundle ID も合わせて入力する必要があります。4 つのうちいずれかが欠けていると消費リクエストに回答できません。詳しくはアプリ内課金キーを生成するを参照してください。 - プライバシーポリシーに消費データの利用を開示する: Apple が開示を義務付けており、これは Adapty ではなくあなたの責任です。開示すべき内容については Apple の App Privacy Details を参照してください。
- データ共有についてユーザーの同意を取得する: これもあなたの責任です。Adapty がユーザーデータを共有する前に、Apple は有効な同意を取得することを求めています。詳しくはユーザーの同意を取得するを参照してください。
Google Play
Google Play で Refund Saver を使用するには、ストアを接続し RTDN を有効にしてください。どちらも標準の Google Play 連携の一部です: Google Play ストアの連携設定 と リアルタイム デベロッパー通知(RTDN)を有効にする。Google は各払い戻しレビューを RTDN を通じて通知するため、これを有効にしていない場合、レビューは未回答のまま処理されます。ユーザーの同意は不要です — 不正請求の異議申し立てには個人データの共有は伴いません。
Refund Saverを有効にする
Refund Saverは一度だけ有効にすれば設定完了です。有効にすると、App StoreとGoogle Playの両方からの返金リクエストにAdaptyが自動で対応します。ただし、それぞれのストアがAdaptyに正しく接続されており、ストアごとの前提条件を満たしている必要があります。
- Adapty ダッシュボードのRefund Saverセクションを開きます。
- Turn on refund saverをクリックします。
Refund Saverを設定する
機能を有効にしたら、Refund Saverを設定できます。設定は2つのレベルで適用されます:
- アプリレベルのデフォルト: 各ストアのデフォルト返金設定とデフォルトの同意ポリシー(同意の記録がないユーザーに対して Refund Saver が想定する同意状態)。どちらも Edit Refund saver preferences ウィンドウで設定します。
- ユーザーごとのオーバーライド: 特定のユーザーに対する返金設定と同意の値。設定した場合、アプリレベルのデフォルトより優先されます。設定はダッシュボード、SDK、またはサーバーサイド API から行えます(どの方法でも同じ値が書き込まれます)。同意の更新は SDK または API から行います。
各ストアの返金設定を指定する
返金設定とは、Adapty が返金リクエストに応答する際に推奨する内容です。Adapty はケースバイケースで判断するのではなく、そのストアのすべてのリクエストにこの設定を適用します。各ストアはそれぞれ独自の設定を持ちます。この設定はあくまでも推奨であり、最終的な判断はストアが行います。
- 設定を変更するには、Refund Saver セクションで Refund Saver Settings をクリックします。
- Edit Refund saver preferences ウィンドウで、Apple または Google タブを選択します。
- Default refund request preference オプションを選択します:
| オプション | 説明 |
|---|---|
| Decline first refund request, grant all next | (デフォルト)Refund Saver が処理するすべてのトランザクションに対して、最初はストアに返金を拒否するよう依頼します。同じトランザクションが再度表示された場合、Refund Saver は返金を承認するよう推奨します。このアプローチにより、不当な返金拒否によるユーザーの不満を軽減できます。ユーザーは再度返金をリクエストでき、承認される可能性が高くなります。 |
| Always decline | 同一トランザクションへの繰り返しリクエストを含む、すべての返金リクエストを拒否するようストアに依頼します。 |
| Always refund | すべての返金リクエストを承認するようストアに提案します。 |
| Grant prorated refund | 未使用分の購入金額のみをAppleが返金するよう提案します。これにより、ユーザーがすでに使用した分の収益を保持できます。App Store 専用オプションです — Googleタブにはこのオプションはありません。 |
| No preference | ストアに対して何も推奨しません。この場合、ストアは内部ポリシーとユーザー履歴に基づいて返金の可否を判断し、あなたの設定は影響しません。最も中立的なアプローチです。 |
適切な設定を選ぶ
すべてのリクエストを却下しても、返金が減るとは限りません。ストアはあなたの回答をあくまで「提案」として扱います。すべてのリクエストを却下するよう設定しても、Apple がより多くのリクエストを承認するケースがあると開発者から報告されています。また、同じ取引に対して繰り返し却下すると、ユーザーが再度リクエストを送る理由になります。多くのアプリでは、Decline first refund request, grant all next を選択することで、最初のリクエストを却下するメリットを得つつ、繰り返し却下のパターンを防ぐことができます。
日割り返金は、拒否と承認の中間の選択肢です。App Store のみで利用できます。支払い全体を拒否のリスクにさらすのではなく、購入のうち未使用の部分だけを返金し、残りを保持します。日割り返金は、ユーザーが一部使用した購入に適しています。たとえば、コインパックの半分をすでに使用している場合や、年間プランを2ヶ月目にキャンセルした場合などです。Google の返金レビューでは、拒否・承認・優先なしのいずれかしか選択できないため、Refund Saver では部分的な返金を要求できません。Play Console の注文管理から手動で発行することは可能です。
Adaptyが消費済み割合を計算する方法
按分返金は購入のうち未消費の部分をカバーするため、Appleはユーザーがすでに購入のどれだけを消費したかを把握する必要があります。
- 自動更新サブスクリプション: Apple が消費済みの割合を自動計算するため、Adapty は消費率を含めずにプリファレンスを Apple へ送信します。
- その他すべてのプロダクトタイプ: Adapty が消費済みの割合を計算し、プリファレンスとともに Apple へ送信します。Adapty は以下のいずれかのソースから割合を取得します。
- バーチャル通貨: 購入によって付与されたバーチャル通貨残高の消費済み割合を、付与されたすべての通貨で平均したもの。この割合の精度は、アプリがサーバーサイド API を通じて報告した消費データに依存します。
- アクセス期間: 期間の経過済み割合。購入がバーチャル通貨を付与しなかった場合に使用されます。
Appleが一部消費された購入に対して日割り計算での返金を承認するのに対し、Adaptyはそれ以外のケースで異なる設定を送信します:
- 完全に消費された購入の場合、AdaptyはAppleに返金を拒否するよう要求します。
- 未使用の購入の場合、AdaptyはAppleに全額返金するよう要求します。
- 仮想通貨もアクセス期間も持たない購入の場合、Adaptyには送信できる消費データがないため、設定なしでAppleに応答します。仮想通貨を付与しない消耗型アイテムはこのケースに該当します。
デフォルトの同意ポリシーを設定する
Default consent policy は、同意の値が記録されていないユーザーに適用されます。これらのユーザーの同意は、SDK またはサーバーサイド API を通じてアプリから報告されていません。このポリシーは、Refund Saver がこれらのユーザーをどのように扱うかを定義します。ユーザーの同意を取得する で選択した同意アプローチに合わせて設定してください。Edit Refund saver preferences ウィンドウの Apple タブで、Default consent policy オプションを設定します。
| オプション | 説明 |
|---|---|
| オプトアウト | (デフォルト)Adapty がユーザーの同意ステータスを把握していない場合、同意が得られたものとみなし、Refund Saver は返金関連データを Apple と共有します。 |
| オプトイン | (Apple 推奨)Adapty がユーザーの同意ステータスを把握していない場合、同意が得られていないものとみなし、Refund Saver はいかなるデータも Apple と共有しません。 |
ダッシュボードで特定のユーザーの返金動作を設定する
特定のユーザーに個別の設定を行いたい場合は、ユーザーのプロファイルを開き、左カラム下部にある Refund saver settings カードを確認してください。
ユーザーごとの設定は、両方のストアで同じ値が適用されます。Refund request preference を Grant refund、Grant prorated refund、Decline refund、または No preference に設定してください。Adapty はその値をApp StoreとGoogle Playの両方でそのユーザーの返金リクエストに適用します。Grant prorated refund にはGoogle Play相当の設定がないため、Google Playでは No preference が送信されます。
ユーザーごとの設定は、「最初の返金リクエストを拒否し、以降はすべて承認する」という動作を含む、アプリレベルのデフォルト設定より優先されます。
ユーザーの同意を取得する
同意は App Store にのみ適用されます — Google Play の返金レビューには個人データが含まれないため、同意は不要です。
ユーザーのデータ共有に関する同意の収集方法はお客様が決定しますが、Appleは個人データを共有する前に有効なユーザー同意を取得することを求めています。Appleはオプトインアプローチの使用を推奨しており、これはデータの使用方法を説明し、ユーザーに明示的なアクションを求めるアプリ内プロンプトを用いるものです。ユーザーがプロンプトを無視または拒否した場合、同意したとは見なされません。詳細については、Appleのガイドラインを参照してください。
アプリで明示的な同意が実用的でない場合は、オプトアウトアプローチを検討することもできます。これは、利用規約にデータ共有条項を含め、利用規約に同意することでデータ共有に同意したものとみなす方法です。ユーザーが同意を取り消す方法を明確に説明することも忘れずに。
以下は、共有する可能性のあるデータの種類を含むオプトアウトアプローチの条項例です。これはあくまで参考のためのサンプルです。最終版がすべての適用法およびAppleの要件に準拠していることを確認する責任はお客様にあります。
「アプリ内課金の返金リクエストを受け取った場合、Appleにユーザーのアプリ内課金アクティビティに関する情報を提供することがあります。これには、アプリインストールからの経過時間、総アプリ使用時間、匿名アカウント識別子、アプリ内課金が完全に消費されたかどうか、トライアル期間が含まれていたかどうか、総支出額、総返金額などの詳細が含まれる場合があります。」
アプローチを選択したら、ダッシュボードで対応するデフォルトの同意ポリシーを設定してください。
ユーザーの同意状況を確認する
ユーザーの同意選択が Adapty に反映されているか確認します。Adapty ダッシュボードでユーザーのプロファイルを開き、Refund saver settings カードの Allow data sharing 設定を確認してください。Yes または No はユーザーが記録した選択を示し、Not set は Refund Saver がデフォルトの同意ポリシーに従うことを意味します。
サーバーサイド API を使用して個別の払い戻しおよび共有設定を取得することもできます。
返金リクエストによる節約額を追跡する
Refund Saver セクションでは、Adapty が応答した返金リクエストの件数と、それぞれの解決結果を確認できます。特定のストアの数値を表示するには、ページ上部の Apple または Google タブを選択してください。All Platforms では両方のストアの合計が表示されます。
Googleは払い戻しレビューが解決されたときにAdaptyへ通知しないため、Adaptyはレビューが完了するまで注文ステータスをポーリングし続けます。そのため、Google Playの結果はApp Storeよりも遅れて表示されます。
Refund Saverセクションには、Refund Saverに到達したリクエストのみが表示されます。Googleがあなたの入力なしに決定したものを含む、アプリ全体のすべての払い戻しについては、Analyticsの払い戻し金額チャートと払い戻しイベントチャートをご覧ください。
アプリのコードからRefund Saverを管理する
アプリはiOS SDKを通じて、ユーザーごとに2つの値を書き込むことができます。
- 返金リクエストの優先設定: このユーザーの返金リクエストに対してAdaptyが回答する際に推奨する内容。この値はプロファイルに紐付くものであり、どちらのプラットフォームにも属しません。そのため、返金リクエストの優先設定はApp StoreとGoogle Playの両方に適用されます。
- データ共有への同意: AdaptyがこのユーザーのAPIの購入データをAppleに送信してよいかどうか。同意はApp Storeにのみ適用されます。
SDK を使用して、ユーザーが独自の UI(同意プロンプトや設定トグルなど)で行った選択を記録します。ダッシュボードとサーバーサイド API も同じ 2 つの値を書き込みます。Android には同等のメソッドがないため、マルチプラットフォームフレームワークはこれらの値を iOS のみに書き込みます。
ユーザーの返金設定を行う
ユーザーの操作に応じて、インストールごとにアプリのコードで返金設定を個別に行うことができます。この設定は、両方のストアでのユーザーの返金リクエストに適用されます。設定を行うには、以下のスニペットを使用してください:
SDK が受け付けるのは grant、decline、no-preference の値のみです。ユーザーに Grant prorated refund を設定するには、ダッシュボードまたはサーバーサイド API を使用してください。
ユーザーの同意を更新する
特定のユーザーが同意を与えたかどうかをAdaptyに伝えるには、updateCollectingRefundDataConsentメソッドを使用します。同意はAppleのみに送信されます。Google Playの返金レビューには同意フィールドが存在しません。この値はサーバー側のプロファイルに保存されるため、変更のたびに1回呼び出すだけで十分です。