---
title: "サンドボックステスト"
description: "サンドボックス環境で購入をテストして、スムーズなトランザクションを確認しましょう。"
---

Adapty ダッシュボードとモバイルアプリの設定が完了したら、アプリ内課金のテストを実施しましょう。

**注意:** テストツールはいずれも、プロダクトの購入テスト時にユーザーへの課金は行いません。App Store はテスト環境での購入や返金に関するメールを送信しません。

---
no_index: true
---
import Callout from '../../../components/Callout.astro';

<Callout type="note">
**サンドボックスのトランザクションはすべてのアナリティクスチャートから除外されます。** 個々のプロファイルページやイベントフィードには引き続き表示されます。
</Callout>

:::info
アプリ内課金テストを進めるにあたり、以下を確認してください。
- ストア連携、プロダクトの追加、Adapty SDK の連携に関する[クイックスタート](quickstart)ガイドが完了していること。
- プロダクトが App Store Connect で [**Ready to submit**](InvalidProductIdentifiers#step-2-check-products) としてマークされていること。
:::

## サンドボックステスト \{#sandbox-testing\}

<div style={{
    maxWidth: '560px',
    margin: '0 auto 2rem',
    position: 'relative',
    aspectRatio: '16/9',
    width: '100%'
}}>
    <iframe
        style={{
            position: 'absolute',
            top: 0,
            left: 0,
            width: '100%',
            height: '100%'
        }}
        src="https://www.youtube.com/embed/hq4PRU-vuik?si=m5F5Sj6iLEJ-2q6n"
        title="YouTube video player"
        frameBorder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
        referrerPolicy="strict-origin-when-cross-origin"
        allowFullScreen
    />
</div>

:::info
アプリ内課金のテストは実機で行うことをお勧めします。サンドボックス購入はシミュレーターでも実行できますが、支払いダイアログや生体認証プロンプトを含むすべてのフローを完全にテストするには実機が必要です。
:::

アプリ内課金のテスト方法は主に 2 つあります。

- **Xcode でビルドしてテストデバイスで実行する**: 開発者や QA エンジニアに適しています。
- **TestFlight でサンドボックステストアカウントを使用する**: その他の方に適しています。

どちらの方法も以下のガイドで説明しています。

### ステップ 1. App Store Connect でサンドボックステストアカウントを作成する \{#step-1-create-sandbox-test-account-in-app-store-connect\}

:::warning
購入履歴をクリーンな状態に保つため、新しいサンドボックステストアカウントを作成してください。既存のアカウントを再利用すると、以前に購入したプロダクトが引き続き利用可能なため、それらのプロダクトの購入テストが行えません。
:::

新しいサンドボックステストアカウントは数クリックで作成できます。

1. App Store Connect の [**Users and Access** > **Sandbox** > **Test Accounts**](https://appstoreconnect.apple.com/access/users/sandbox) に移動し、**+** をクリックします。

  <img src="/assets/shared/img/add-sandbox-user.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

2. テストユーザーの詳細を入力します。テストする **Country or Region** を必ず設定してください。これはリージョンのプロダクト利用可否や購入通貨に影響します。

:::tip
- Gmail や iCloud をお使いの場合は、[プラス記号サブアドレッシング](https://www.wikihow.com/Use-Plus-Addressing-in-Gmail)を使って既存のメールアドレスを再利用できます。
- 実際には存在しないランダムなメールアドレスも使用できますが、後でテストデバイスにサインインする際に 2 段階認証（2FA）を拒否するようにしてください。
:::

  <img src="/assets/shared/img/57c3a7c-apple_new_test_account.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

3. **Create** をクリックします。

### ステップ 2. デベロッパーモードを有効にする \{#step-2-enable-the-developer-mode\}

:::note
テストデバイスでデベロッパーモードが**すでに有効になっている**場合、または **Mac デバイスをお持ちでない**場合は、このステップをスキップしてください。
:::

Xcode がインストールされた Mac とテストデバイスのケーブルが必要です。

1. Mac で Xcode を開きます。TestFlight でアプリ内課金をテストする場合は、Xcode がインストールされていれば十分で、アプリを開く必要はありません。
2. ケーブルを使ってテストデバイスを Mac に接続します。
3. テストデバイスで **Settings > Privacy & Security > Developer Mode** に移動し、**Developer Mode** をオンにします。

### ステップ 3. TestFlight からアプリをダウンロードする \{#step-3-download-the-app-from-testflight\}

:::info
このステップは TestFlight でテストする場合にのみ適用されます。Xcode でアプリをビルドする場合はスキップしてください。
:::

TestFlight へのアプリの提出については、[Apple のドキュメント](https://developer.apple.com/documentation/StoreKit/testing-in-app-purchases-with-sandbox#Prepare-for-sandbox-testing)を参照してください。

TestFlight アプリをダウンロードする前に、テストデバイスで本番の Apple アカウントにサインインしていることを確認してください。その後、TestFlight からテストするアプリをダウンロードします。

:::danger
ダウンロードしたらアプリを開かないでください。次のステップに進んでください。
誤って開いてしまった場合は、テストデバイスからアプリを削除して再度ダウンロードしてください。そうしないと購入履歴がクリーンな状態にならず、アプリ内課金のテストでエラーが発生する可能性があります。
:::

### ステップ 4. サンドボックステストアカウントに切り替える \{#step-4-switch-to-sandbox-test-account\}

<Details>
    <summary>Mac をお使いでない方へ</summary>

    macOS をお使いでない場合、Xcode を使ってサンドボックスアカウントに切り替えることはできません。ただし、テストデバイス上で直接切り替えることができます。
1. テストデバイスで **Settings > Your Apple Account > Media & Purchases** に移動します。
2. ポップアップメニューから **Sign Out** を選択します。
3. TestFlight からダウンロードしたアプリを開き、プロダクトを購入しようとします。
4. サインインを求められたら、サンドボックスアカウントの認証情報を入力してサンドボックス環境に切り替えます。

</Details>

サンドボックスアカウントに切り替えるには：

1. テストデバイスで **Settings > Your Apple Account > Media & Purchases** に移動します。
2. ポップアップメニューから **Sign Out** を選択します。
3. **Settings > Developer** に移動します。**Developer** オプションが表示されない場合は、[ステップ 2 で有効にしているか](#step-2-enable-the-developer-mode)確認してください。

  <img src="/assets/shared/img/devmode.png"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '400px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

4. **Sandbox Apple Account** セクションまでスクロールし、**Sign In** をタップします。

  <img src="/assets/shared/img/sandbox-acc.png"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '400px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

5. サンドボックス Apple アカウントの認証情報でサインインします。

### ステップ 5. 購入履歴をクリアする \{#step-5-clear-purchase-history\}

新しいサンドボックステストアカウントを作成して切り替えたばかりの場合は、このステップをスキップできます。このステップは同じサンドボックステストアカウントを使って繰り返しテストする場合にのみ適用されます。

1. テストデバイスで **Settings > Developer > Sandbox Apple Account** に移動します。
2. ポップアップメニューから **Manage** を選択します。
3. **Account Settings** に移動し、**Clear Purchase History** をタップします。

:::danger
このステップは同じサンドボックステストアカウントを使ってテストを繰り返すたびに必要です。この場合、[サンドボックステストアカウントからサインアウト](#step-4-switch-to-sandbox-test-account)した後、再度サインインしてテストデバイス上の購入履歴キャッシュをクリアする必要があります。
:::

### ステップ 6. Xcode でビルドして実行する \{#step-6-build-in-xcode-and-run\}

:::info
このステップは Xcode ビルドでテストする場合にのみ適用されます。TestFlight を使用する場合はスキップしてください。
:::

1. テストデバイスを Mac に接続します。
2. Xcode を開きます。
3. ツールバーの **Run** をクリックするか、**Product > Run** を選択して、接続されたデバイスでアプリをビルドして実行します。

ビルドが成功すると、Xcode はデバイス上でアプリを起動し、デバッグエリアにデバッグセッションを開きます。

これでデバイス上でのテストの準備が整いました。

### ステップ 7. テスト購入を行う \{#step-7-make-test-purchase\}

アプリを開き、ペイウォールからテスト購入を行います。

完了したら、[テスト購入の検証](validate-test-purchases)の記事で結果を確認してください。

### ステップ 8. テストを続ける \{#step-8-keep-testing\}

テスト環境の準備が整いました。再度テストしたい場合は、[サンドボックスアカウントの購入履歴をクリア](https://developer.apple.com/help/app-store-connect/test-in-app-purchases/manage-sandbox-apple-account-settings/)してください。

## テストに関する問題 \{#testing-issues\}

以下はアプリテスト時によく発生する問題です。

### TestFlight の問題 \{#testflight-issues\}

**サンドボックステストアカウントなしで TestFlight を使用している場合**は購入履歴をクリアできないため、さまざまな問題や誤ったテスト結果が生じます。

誤って[サンドボックステストアカウントへの切り替え](#step-4-switch-to-sandbox-test-account)を忘れてアプリを一度でも開いてしまうと、TestFlight は購入履歴を本番の Apple アカウントに紐付けてしまい、予期せぬ問題が発生します。

修正するには、以下の手順に従ってください。

1. テストデバイスからアプリを削除します。
2. [サンドボックステスト](#sandbox-testing)の手順に従います。

:::note
アプリを再インストールするだけでなく、サンドボックステストアカウントに切り替え、購入履歴をクリアし、サンドボックステストアカウントを使ってアプリを起動することが重要です。
:::

### 共有アクセスレベルの問題 \{#shared-access-levels-issues\}

同じサンドボックステストアカウントを使って繰り返しテストすると、テストユーザーの[共有アクセスレベル](sharing-paid-access-between-user-accounts)で予期しない動作が発生することがあります。

ユーザーが継承されたアクセスレベルを持っているか確認するには、Adapty ダッシュボードの [Profiles & Segments](https://app.adapty.io/profiles/users) からユーザーのプロファイルを開いてください。

  <img src="/assets/shared/img/profile-access-level-origin.webp"
  style={{
    border: '1px solid #727272', /* border width and color */
    width: '700px', /* image width */
    display: 'block', /* for alignment */
    margin: '0 auto' /* center alignment */
  }}
/>

ユーザーが継承されたアクセスレベルを持っている場合は、正確なテスト結果を得るために以下の手順に従ってください。

1. 親プロファイルを削除します。
2. テストデバイスからアプリを削除します。
3. [TestFlight からアプリをダウンロードします](#step-3-download-the-app-from-testflight)。
4. [サンドボックステストアカウントに切り替えます](#step-4-switch-to-sandbox-test-account)。
5. [購入履歴をクリアします](#step-5-clear-purchase-history)。
6. [アプリを開いてテスト購入を行います](#step-6-make-test-purchase)。

:::note
購入履歴のクリアがストア側の購入をリセットします。親プロファイルの削除は Adapty 側の記録を削除するだけです。再利用したアカウントがアクセスを保持し続ける理由と、実際に機能するリセット方法については、[テスターのサブスクリプションのリセット](#resetting-a-testers-subscription)を参照してください。
:::

### TestFlight でのアプリの更新 \{#updating-app-in-testflight\}

TestFlight アプリが更新された場合：

1. テストデバイスからアプリを削除します。
2. [TestFlight からアプリをダウンロードします](#step-3-download-the-app-from-testflight)。
3. [サンドボックステストアカウントに切り替えます](#step-4-switch-to-sandbox-test-account)。
4. [購入履歴をクリアします](#step-5-clear-purchase-history)。
5. [アプリを開いてテスト購入を行います](#step-6-make-test-purchase)。

## テスターのサブスクリプションのリセット \{#resetting-a-testers-subscription\}

サンドボックス環境では、購入は Adapty プロファイルではなく **Apple サンドボックスアカウント**に紐付けられます。プロファイルに対して行う操作（削除やアクセスレベルの編集）は、ストアアカウントから購入を削除しません。次回の再インストールや同期時に、SDK は同じトランザクションを再紐付けし、テスターは再びアクセスを得ます。

以下の表は、各リセット操作が何を変更するか、またその後テスターがどうなるかを示しています。

| 操作 | Adapty プロファイル | Apple サンドボックスアカウント | テスターのその後のアクセス |
| :--- | :--- | :--- | :--- |
| Adapty ダッシュボードでプロファイルを削除 | 削除済み | 変更なし | **復元される** — 再インストール時に新しいプロファイルが同じトランザクションチェーンを再紐付け |
| [Delete profile API](api-adapty/operations/deleteProfile) でプロファイルを削除 | 削除済み | 変更なし | **復元される** — ダッシュボードでの削除と同じ |
| **Add access level** で過去の有効期限を追加 | 次の同期時に上書き | 変更なし | 次の更新時に**復元される** — 有効なサブスクリプションが将来の有効期限を再適用 |
| [Revoke access level API](api-adapty/operations/revokeAccessLevel) を呼び出す | 即時失効、`access_level_updated`（`is_active=false`）が発火 | 変更なし | 次の更新や再インストール時に**復元される** — サンドボックスのリセットとして信頼性が低い |
| サンドボックスアカウントでサブスクリプションをキャンセル | 直接変更なし | サブスクリプションキャンセル済み | 更新が停止し、現在の期間が終了するとアクセスが終了。テスターは再度プロダクトを購入可能 |
| 新しい Apple サンドボックスアカウントでサインイン | 新しいプロファイル | 新しい空のアカウント | **クリーン** — 繰り返しテストに推奨 |

### テスターをクリーンな状態にリセットする \{#reset-a-tester-to-a-clean-state\}

購入フローの繰り返しテストには、テストごとに新しい Apple サンドボックスアカウントを使用してください。アカウントの作成は[ステップ 1](#step-1-create-sandbox-test-account-in-app-store-connect)、デバイスでの切り替えは[ステップ 4](#step-4-switch-to-sandbox-test-account) に従ってください。既存のサンドボックスアカウントを再利用する場合は、先に[購入履歴をクリア](#step-5-clear-purchase-history)してください。Adapty プロファイルを削除してもクリアされません。

### 既存テスターのアクセスを削除する \{#remove-access-from-an-existing-tester\}

テスターのアクセスを削除するには、有効期限を過去に設定したり Revoke access level API を呼び出したりしないでください。サンドボックスでは、サブスクリプションは数分ごとに自動更新されます。更新のたびに同じトランザクションチェーンに将来の有効期限が復元されるため、アクセスは自動的に復活します。Revoke access level API は `access_level_updated`（`is_active=false`）イベントを発火しますが、次の更新でそれが上書きされます。

アクセスを実際に停止するには、ストア側でサブスクリプションをキャンセルしてください。テストデバイスで **Settings > Developer > Sandbox Apple Account** に移動し、**Manage** を選択して、サブスクリプションをキャンセルします。更新が停止し、現在の期間が終了するとアクセスが終了します。

### プロファイルを削除するとアクセスが復活する理由 \{#why-deleting-the-profile-brings-access-back\}

テスターがアプリを再インストールすると、Adapty はサンドボックスアカウントの購入履歴を受け取り、新しいインストールを既存の購入に紐付けます。購入は削除したプロファイルではなく、ストアアカウントに紐付いています。

- **匿名プロファイル**: `customer_user_id` なしで再インストールすると、[有料アクセス共有](sharing-paid-access-between-user-accounts)の設定に関わらず、常にストアアカウントのアクセスレベルを継承します。
- **識別済みプロファイル**: アクセスが新しい `customer_user_id` に引き継がれるかどうかは、有料アクセス共有の設定によります。

Adapty がこれらのプロファイルをチェーンとして紐付ける仕組みについては、[プロファイルの仕組み](how-profiles-work#parent-and-inheritor-profiles)を参照してください。

## テストサブスクリプション \{#test-subscriptions\}

サンドボックステストアカウントを使ってアプリをテストする際、サンドボックス内の各テスターのサブスクリプション更新レートを設定できます。サブスクリプション更新レートの編集について詳しくは、[Apple の公式ドキュメント](https://developer.apple.com/help/app-store-connect/test-in-app-purchases/manage-sandbox-apple-account-settings)を参照してください。

デフォルトでは、サブスクリプションは停止するまで最大 12 回更新されます。スケジュールは以下の通りです。

| サブスクリプション期間 | 1 週間 | 1 ヶ月 | 2 ヶ月 | 3 ヶ月 | 6 ヶ月 | 1 年 |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| サブスクリプション更新速度 | 3 分 | 5 分 | 10 分 | 15 分 | 30 分 | 1 時間 |
| 請求リトライ期間 | 10 分 | 10 分 | 10 分 | 10 分 | 10 分 | 10 分 |
| 請求グレース期間 | 3 分 | 5 分 | 5 分 | 5 分 | 5 分 | 5 分 |

:::note
テストトランザクションが [Event feed](validate-test-purchases) に表示されるまで最大 10 分かかることに注意してください。
:::

サンドボックスは、更新・請求リトライ・グレース期間のアプリとバックエンドの処理を確認するために使用してください。本番環境の更新タイミングを予測するためのものではありません。上記の加速・上限付きスケジュールは本番環境とは異なります。バックエンドテスト用にサーバーでトランザクションを再実行するには、[Set transaction API](api-adapty/operations/setTransaction) を使用してください。

## テストオファー \{#test-offers\}

オファーのテストでは、適格性が正しく機能するために、すべてのユーザーレシートを削除する必要があります。

オファーをテストする最も確実な方法は、まったく新しい[サンドボックステストアカウント](#step-1-create-sandbox-test-account-in-app-store-connect)を使用することです。同じサンドボックステストアカウントを使って繰り返しテストすると、予期しない動作が発生する可能性があります。

:::danger
同じサンドボックステストアカウントを使って繰り返しテストする場合は、適格性関連の問題を避けるため、必ず[購入履歴をクリア](#step-5-clear-purchase-history)してください。
:::