---
title: "Refund Saver"
description: "Adapty Refund Saverを使用して払い戻しを最小化し、収益を最大化しましょう。"
---

ユーザーが払い戻しをリクエストすると、Appleは調査を行います。**払い戻しが正当かどうか**を判断するために、Appleはそのユーザーのアクティビティに関する情報を開発者に求めます。この証拠がなければ、頻繁に利用されているサブスクリプションでも払い戻しが承認される可能性が高くなります。

**Refund Saver**はAppleの消費情報リクエストに[自動的に](https://developer.apple.com/documentation/appstoreserverapi/send-consumption-information-v1)対応し、収益を守りながら、不正なリクエストが**拒否される可能性を高めます**。自動更新サブスクリプション、買い切りサブスクリプション、消耗型アイテム、非消耗型アイテム（永続アクセス商品を含む）など、Appleのすべてのアプリ内課金タイプに対応しています。

## Refund Saverの仕組み \{#how-refund-saver-works\}

1. ユーザーが払い戻しリクエストを開始すると、App Storeはトランザクションと利用状況の詳細を求める通知を送信します。

    この通知を**無視**したり**遅延**したりすると、Appleは払い戻しを**承認**する可能性が高くなります。

2. Adapty Refund Saverはこれらの通知を自動的に処理し、Appleに必要なデータを提供します。

    この自動化により、不要な払い戻しの発生を抑えながら、時間の節約と収益の保護を実現します。

3. Adaptyは各結果（払い戻し済みまたは拒否）を記録します。そのデータがダッシュボードのRefund Saver分析を支えます。

:::info

Refund Saverを使用することで、払い戻しリクエストによる収益損失の最大40%を守ることができます。

:::

## Refund Saverを使用するための要件 \{#requirements-to-use-refund-saver\}

この機能を使用するには、以下の前提条件を満たしていることを確認してください。

1. **App Store Connectのプライバシーポリシーを更新する：**
   アプリのプライバシーポリシーに、消費データの収集と使用についての開示が必要です。これにより、ユーザーがアプリをダウンロードする前にプライバシー慣行を理解できます。詳しくは[Appleのアプリプライバシーの詳細](https://developer.apple.com/app-store/app-privacy-details/)を参照してください。
2. **アプリ内でデータ共有に関するユーザーの同意を取得する：**
   Appleは、ユーザーの個人データを共有する前に有効な同意を取得することを義務付けています。ユーザーデータをAppleと共有するのは開発者であるため、この同意の取得は開発者の責任です。詳細はAppleの[ガイドライン](https://developer.apple.com/documentation/appstoreserverapi/send-consumption-information)を参照してください。
3. **Server Notifications V2を有効にする：**
   V1通知はサポートされていないため、Apple Developerアカウントでサーバー通知V2が有効になっており、Adaptyで正しく設定されていることを確認してください。まだ有効にしていない場合は、[App Storeサーバー通知の有効化](enable-app-store-server-notifications)ガイドの手順に従ってください。

## Refund Saverを有効にする \{#turn-on-refund-saver\}

1. Adapty ダッシュボードで[Refund Saver](https://app.adapty.io/refund-saver)セクションを開きます。

2. **Turn on Refund Saver**をクリックして機能を有効にします。

## デフォルトの払い戻し動作を設定する \{#set-a-default-refund-behavior\}

Appleは、各払い戻しリクエストへの対応時に開発者が希望する結果を指定することを許可しています。この設定の目的は、払い戻しの拒否と承認の適切なバランスを見つけて、正当な払い戻しのみが行われるようにすることです。なお、この設定はあくまで結果に影響を与えるためのものであり、最終的な判断はAppleが行います。

Adaptyはこの設定に対応していますが、すべての払い戻しリクエストに同じ値を使用します。

1. 設定を変更するには、**Edit refund preference**をクリックします。
   

2. **Edit refund preference**ウィンドウで、**Default refund request preference**オプションを選択します。

   | オプション | 説明 |
   | -------------------------------------------- | ------------------------------------------------------------ |
   | Always decline | （デフォルト）デフォルトのオプションで、通常は払い戻しを最小化する最良の結果をもたらします。 |
   | Decline first refund request, grant all next | Refund Saverが処理するすべてのトランザクションに対して、最初はAppleに払い戻しを拒否するよう求めます。ただし、同じトランザクションが再度現れた場合は、常に払い戻しを承認するよう推奨します。このアプローチにより、不当な払い戻し拒否によるユーザーの不満を最小化できます。ユーザーは単に再度リクエストするだけで払い戻しを受けられる可能性があります。 |
   | Always refund | すべての払い戻しリクエストをAppleが承認するよう推奨します。 |
   | No preference | Appleに対して何も推奨しません。この場合、Appleはあなたの設定からの影響を受けず、内部ポリシーとユーザー履歴のみに基づいて払い戻し結果を決定します。最も中立的なアプローチです。 |

## ダッシュボードで特定ユーザーの払い戻し動作を設定する \{#set-refund-behavior-for-a-specific-user-in-the-dashboard\}

アプリ全体のデフォルトのRefund Saver動作を設定していても、特定のユーザーに個別の設定を行いたい場合があります。Adapty ダッシュボードでは、ユーザーのプロファイルからこれを行うことができます。左下にある**Refund Saver Preferences**セクションを使用してください。

:::note
ユーザーごとの設定はアプリレベルのデフォルト（「Decline first refund request, grant all next」の動作を含む）より優先されます。
:::

## SDKで特定ユーザーの払い戻し動作を設定する \{#set-refund-behavior-for-a-specific-user-in-the-sdk\}

ユーザーのアクションに応じて、インストールごとに個別に払い戻し設定をアプリコードで行うことができます。以下のスニペットを使用して設定を行ってください。

<Tabs groupId="current-os" queryString>

<TabItem value="swift" label="iOS (3.4.1+)" default>

```swift showLineNumbers code
do {
  try await Adapty.updateRefundPreference(<PREFERENCE_VALUE>) // possible values: .noPreference, .grant, .decline
} catch {
  // handle the error
}
```
</TabItem>
<TabItem value="flutter" label="Flutter (3.4.0+)" default>

```javascript showLineNumbers code
try {
  // possible values: AdaptyRefundPreference.noPreference, AdaptyRefundPreference.grant, AdaptyRefundPreference.decline
  await Adapty().updateRefundPreference(<PREFERENCE_VALUE>);
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
  // handle the error
}
```
</TabItem>
<TabItem value="rn" label="React Native (3.4.0+)" default>

```typescript showLineNumbers
try {
    await adapty.updateRefundPreference(<PREFERENCE_VALUE>); // possible values: RefundPreference.NoPreference, RefundPreference.Grant, RefundPreference.Decline
} catch (error) {
    // handle the `AdaptyError`
}
```
</TabItem>
<TabItem value="unity" label="Unity (3.3.0+)" default>
```csharp showLineNumbers
Adapty.UpdateAppStoreRefundPreference(<PREFERENCE_VALUE>, (error) => {
  if (error != null) {
    // handle the error
    return;
  }
});
```
</TabItem>
</Tabs>

:::note
Server-side APIを使用して[個別の払い戻し設定を行う](api-adapty/operations/setRefundSaverSettings)こともできます。
- ユーザーがボタンをクリックして設定を行うなど、設定がクライアントの操作に直接紐づいている場合はSDKを使用してください。
- サーバーサイドの処理が必要な場合や、アプリケーションのアーキテクチャに適している場合はAPIを使用してください。
:::

## ユーザーの同意を取得する \{#obtain-user-consent\}

データ共有に関するユーザーの同意をどのように収集するかはお客様次第ですが、Appleは個人データを共有する前に有効なユーザーの同意を取得することを義務付けています。Appleは**オプトインアプローチ**を推奨しており、データの使用方法を説明し、明示的なユーザーアクションを求めるアプリ内プロンプトを使用します。ユーザーがプロンプトを無視または拒否した場合、同意したとは見なされません。詳細はAppleの[ガイドライン](https://developer.apple.com/documentation/appstoreserverapi/send-consumption-information)を参照してください。

アプリで明示的な同意が実用的でない場合は、**オプトアウトアプローチ**を検討することもできます。これは、利用規約にデータ共有条項を含め、利用規約に同意することでデータ共有に同意したものとみなす方法です。ユーザーが同意を取り消す方法を明確に説明することも忘れずに。

以下は、共有する可能性のあるデータの種類を含むオプトアウトアプローチの条項例です。これはあくまで参考のためのサンプルです。最終版がすべての適用法およびAppleの要件に準拠していることを確認する責任はお客様にあります。

*「アプリ内購入の払い戻しリクエストを受け取った場合、ユーザーのアプリ内購入アクティビティに関する情報をAppleに提供することがあります。これには、アプリのインストールからの経過時間、総アプリ使用時間、匿名のアカウント識別子、アプリ内購入が完全に消費されたかどうか、トライアル期間が含まれていたかどうか、総支出額、総払い戻し額などの詳細が含まれる場合があります。」*

選択したアプローチに応じて、**Edit refund preferences**メニューの**Default consent policy**オプションを設定してください。

<p> </p>

| オプション | 説明 |
| ------- | ------------------------------------------------------------ |
| Opt-out | （デフォルト）Adaptyがユーザーの同意状態を把握していない場合、同意が**与えられた**と見なし、Refund Saverは払い戻し関連データをAppleと**共有します**。 |
| Opt-in | Adaptyがユーザーの同意状態を把握していない場合、同意が**与えられていない**と見なし、Refund Saverはデータを**共有しません**。これはAppleが推奨するアプローチです。 |

## SDKでユーザーの同意を更新する \{#update-user-consent-in-the-sdk\}

特定のユーザーが同意を与えたかどうかをAdaptyに伝えるには、`updateCollectingRefundDataConsent`メソッドを使用します。この値はプロファイルごとにサーバーサイドで保持されるため、同意が変更された場合のみ呼び出す必要があります。

<Tabs groupId="current-os" queryString>

<TabItem value="swift" label="iOS (3.4.1+)" default>

 ```swift showLineNumbers
do {
  try await Adapty.updateCollectingRefundDataConsent(<CONSENT_VALUE>) // true = consent is explicitly provided, false = consent is explicitly revoked
} catch {
  // handle the error
}
 ```

</TabItem>

<TabItem value="flutter" label="Flutter (3.4.0+)" default>

```dart showLineNumbers
try {
  // true = user gave consent, false = user revoked consent
  await Adapty().updateCollectingRefundDataConsent(<CONSENT_VALUE>);
} on AdaptyError catch (adaptyError) {
  // handle the error
} catch (e) {
  // handle the error
}
```

</TabItem>

<TabItem value="rn" label="React Native (3.4.0+)" default>

```typescript showLineNumbers
try {
    await adapty.updateCollectingRefundDataConsent(<CONSENT_VALUE>); // true = consent is explicitly provided, false = consent is explicitly revoked
} catch (error) {
    // handle the `AdaptyError`
}
```

</TabItem>

<TabItem value="unity" label="Unity (3.3.0+)" default>
```csharp showLineNumbers
Adapty.UpdateAppStoreCollectingRefundDataConsent(<CONSENT_VALUE>, (error) => {
  if (error != null) {
    // handle the error
    return;
  }
});
```
</TabItem>
</Tabs>

:::note
Server-side APIを使用して[個別のデータ共有設定を行う](api-adapty/operations/setRefundSaverSettings)こともできます。
- ユーザーがボタンをクリックして設定を行うなど、設定がクライアントの操作に直接紐づいている場合はSDKを使用してください。
- サーバーサイドの処理が必要な場合や、アプリケーションのアーキテクチャに適している場合はAPIを使用してください。
:::

## ユーザーの同意を確認する \{#check-user-consent\}

ユーザーの現在の同意状態はいつでも確認できます。Adapty ダッシュボードでユーザーのプロファイルを開き、左下の**Refund Saver Preferences**セクションにある**Allow data sharing**設定を確認してください。

:::note
Server-side APIを使用して[個別の払い戻しと共有の設定を取得する](api-adapty/operations/getRefundSaverSettings)こともできます。
:::

## 制限事項 \{#limitations\}

- **AppleのApp Storeのみ対応：** Refund SaverはAppleのApp Storeへの払い戻しリクエストにのみ対応しています。Google Playは払い戻しに対する消費データ分析を提供していません。Google Playでの払い戻し決定はGoogleのポリシーとユーザーが提供する情報のみに基づいています。
- **Server Notifications V2が必要：** Refund SaverはApp Store Server Notifications V1とは互換性がありません。現在AdaptyでV1を使用している場合はV2に切り替える必要があります。詳細は[App Storeサーバー通知をAdaptyに送信する](enable-app-store-server-notifications)ガイドを参照してください。V2に切り替えることで、より正確で包括的なデータが提供され、Adaptyの分析も向上します。