サンドボックステスト
Adapty ダッシュボードとモバイルアプリの設定が完了したら、アプリ内課金のテストを実施しましょう。
注意: テストツールはいずれも、プロダクトの購入テスト時にユーザーへの課金は行いません。App Store はテスト環境での購入や返金に関するメールを送信しません。
サンドボックスのトランザクションはすべてのアナリティクスチャートから除外されます。 個々のプロファイルページやイベントフィードには引き続き表示されます。
アプリ内課金テストを進めるにあたり、以下を確認してください。
- ストア連携、プロダクトの追加、Adapty SDK の連携に関するクイックスタートガイドが完了していること。
- プロダクトが App Store Connect で Ready to submit としてマークされていること。
サンドボックステスト
アプリ内課金のテストは実機で行うことをお勧めします。サンドボックス購入はシミュレーターでも実行できますが、支払いダイアログや生体認証プロンプトを含むすべてのフローを完全にテストするには実機が必要です。
アプリ内課金のテスト方法は主に 2 つあります。
- Xcode でビルドしてテストデバイスで実行する: 開発者や QA エンジニアに適しています。
- TestFlight でサンドボックステストアカウントを使用する: その他の方に適しています。
どちらの方法も以下のガイドで説明しています。
ステップ 1. App Store Connect でサンドボックステストアカウントを作成する
購入履歴をクリーンな状態に保つため、新しいサンドボックステストアカウントを作成してください。既存のアカウントを再利用すると、以前に購入したプロダクトが引き続き利用可能なため、それらのプロダクトの購入テストが行えません。
新しいサンドボックステストアカウントは数クリックで作成できます。
- App Store Connect の Users and Access > Sandbox > Test Accounts に移動し、+ をクリックします。
- テストユーザーの詳細を入力します。テストする Country or Region を必ず設定してください。これはリージョンのプロダクト利用可否や購入通貨に影響します。
- Gmail や iCloud をお使いの場合は、プラス記号サブアドレッシングを使って既存のメールアドレスを再利用できます。
- 実際には存在しないランダムなメールアドレスも使用できますが、後でテストデバイスにサインインする際に 2 段階認証(2FA)を拒否するようにしてください。
- Create をクリックします。
ステップ 2. デベロッパーモードを有効にする
テストデバイスでデベロッパーモードがすでに有効になっている場合、または Mac デバイスをお持ちでない場合は、このステップをスキップしてください。
Xcode がインストールされた Mac とテストデバイスのケーブルが必要です。
- Mac で Xcode を開きます。TestFlight でアプリ内課金をテストする場合は、Xcode がインストールされていれば十分で、アプリを開く必要はありません。
- ケーブルを使ってテストデバイスを Mac に接続します。
- テストデバイスで Settings > Privacy & Security > Developer Mode に移動し、Developer Mode をオンにします。
ステップ 3. TestFlight からアプリをダウンロードする
このステップは TestFlight でテストする場合にのみ適用されます。Xcode でアプリをビルドする場合はスキップしてください。
TestFlight へのアプリの提出については、Apple のドキュメントを参照してください。
TestFlight アプリをダウンロードする前に、テストデバイスで本番の Apple アカウントにサインインしていることを確認してください。その後、TestFlight からテストするアプリをダウンロードします。
ダウンロードしたらアプリを開かないでください。次のステップに進んでください。 誤って開いてしまった場合は、テストデバイスからアプリを削除して再度ダウンロードしてください。そうしないと購入履歴がクリーンな状態にならず、アプリ内課金のテストでエラーが発生する可能性があります。
ステップ 4. サンドボックステストアカウントに切り替える
Mac をお使いでない方へ
macOS をお使いでない場合、Xcode を使ってサンドボックスアカウントに切り替えることはできません。ただし、テストデバイス上で直接切り替えることができます。
- テストデバイスで Settings > Your Apple Account > Media & Purchases に移動します。
- ポップアップメニューから Sign Out を選択します。
- TestFlight からダウンロードしたアプリを開き、プロダクトを購入しようとします。
- サインインを求められたら、サンドボックスアカウントの認証情報を入力してサンドボックス環境に切り替えます。
サンドボックスアカウントに切り替えるには:
- テストデバイスで Settings > Your Apple Account > Media & Purchases に移動します。
- ポップアップメニューから Sign Out を選択します。
- Settings > Developer に移動します。Developer オプションが表示されない場合は、ステップ 2 で有効にしているか確認してください。
- Sandbox Apple Account セクションまでスクロールし、Sign In をタップします。
- サンドボックス Apple アカウントの認証情報でサインインします。
ステップ 5. 購入履歴をクリアする
新しいサンドボックステストアカウントを作成して切り替えたばかりの場合は、このステップをスキップできます。このステップは同じサンドボックステストアカウントを使って繰り返しテストする場合にのみ適用されます。
- テストデバイスで Settings > Developer > Sandbox Apple Account に移動します。
- ポップアップメニューから Manage を選択します。
- Account Settings に移動し、Clear Purchase History をタップします。
このステップは同じサンドボックステストアカウントを使ってテストを繰り返すたびに必要です。この場合、サンドボックステストアカウントからサインアウトした後、再度サインインしてテストデバイス上の購入履歴キャッシュをクリアする必要があります。
ステップ 6. Xcode でビルドして実行する
このステップは Xcode ビルドでテストする場合にのみ適用されます。TestFlight を使用する場合はスキップしてください。
- テストデバイスを Mac に接続します。
- Xcode を開きます。
- ツールバーの Run をクリックするか、Product > Run を選択して、接続されたデバイスでアプリをビルドして実行します。
ビルドが成功すると、Xcode はデバイス上でアプリを起動し、デバッグエリアにデバッグセッションを開きます。
これでデバイス上でのテストの準備が整いました。
ステップ 7. テスト購入を行う
アプリを開き、ペイウォールからテスト購入を行います。
完了したら、テスト購入の検証の記事で結果を確認してください。
ステップ 8. テストを続ける
テスト環境の準備が整いました。再度テストしたい場合は、サンドボックスアカウントの購入履歴をクリアしてください。
テストに関する問題
以下はアプリテスト時によく発生する問題です。
TestFlight の問題
サンドボックステストアカウントなしで TestFlight を使用している場合は購入履歴をクリアできないため、さまざまな問題や誤ったテスト結果が生じます。
誤ってサンドボックステストアカウントへの切り替えを忘れてアプリを一度でも開いてしまうと、TestFlight は購入履歴を本番の Apple アカウントに紐付けてしまい、予期せぬ問題が発生します。
修正するには、以下の手順に従ってください。
- テストデバイスからアプリを削除します。
- サンドボックステストの手順に従います。
アプリを再インストールするだけでなく、サンドボックステストアカウントに切り替え、購入履歴をクリアし、サンドボックステストアカウントを使ってアプリを起動することが重要です。
共有アクセスレベルの問題
同じサンドボックステストアカウントを使って繰り返しテストすると、テストユーザーの共有アクセスレベルで予期しない動作が発生することがあります。
ユーザーが継承されたアクセスレベルを持っているか確認するには、Adapty ダッシュボードの Profiles & Segments からユーザーのプロファイルを開いてください。
ユーザーが継承されたアクセスレベルを持っている場合は、正確なテスト結果を得るために以下の手順に従ってください。
- 親プロファイルを削除します。
- テストデバイスからアプリを削除します。
- TestFlight からアプリをダウンロードします。
- サンドボックステストアカウントに切り替えます。
- 購入履歴をクリアします。
- アプリを開いてテスト購入を行います。
購入履歴のクリアがストア側の購入をリセットします。親プロファイルの削除は Adapty 側の記録を削除するだけです。再利用したアカウントがアクセスを保持し続ける理由と、実際に機能するリセット方法については、テスターのサブスクリプションのリセットを参照してください。
TestFlight でのアプリの更新
TestFlight アプリが更新された場合:
- テストデバイスからアプリを削除します。
- TestFlight からアプリをダウンロードします。
- サンドボックステストアカウントに切り替えます。
- 購入履歴をクリアします。
- アプリを開いてテスト購入を行います。
テスターのサブスクリプションのリセット
サンドボックス環境では、購入は Adapty プロファイルではなく Apple サンドボックスアカウントに紐付けられます。プロファイルに対して行う操作(削除やアクセスレベルの編集)は、ストアアカウントから購入を削除しません。次回の再インストールや同期時に、SDK は同じトランザクションを再紐付けし、テスターは再びアクセスを得ます。
以下の表は、各リセット操作が何を変更するか、またその後テスターがどうなるかを示しています。
| 操作 | Adapty プロファイル | Apple サンドボックスアカウント | テスターのその後のアクセス |
|---|---|---|---|
| Adapty ダッシュボードでプロファイルを削除 | 削除済み | 変更なし | 復元される — 再インストール時に新しいプロファイルが同じトランザクションチェーンを再紐付け |
| Delete profile API でプロファイルを削除 | 削除済み | 変更なし | 復元される — ダッシュボードでの削除と同じ |
| Add access level で過去の有効期限を追加 | 次の同期時に上書き | 変更なし | 次の更新時に復元される — 有効なサブスクリプションが将来の有効期限を再適用 |
| Revoke access level API を呼び出す | 即時失効、access_level_updated(is_active=false)が発火 | 変更なし | 次の更新や再インストール時に復元される — サンドボックスのリセットとして信頼性が低い |
| サンドボックスアカウントでサブスクリプションをキャンセル | 直接変更なし | サブスクリプションキャンセル済み | 更新が停止し、現在の期間が終了するとアクセスが終了。テスターは再度プロダクトを購入可能 |
| 新しい Apple サンドボックスアカウントでサインイン | 新しいプロファイル | 新しい空のアカウント | クリーン — 繰り返しテストに推奨 |
テスターをクリーンな状態にリセットする
購入フローの繰り返しテストには、テストごとに新しい Apple サンドボックスアカウントを使用してください。アカウントの作成はステップ 1、デバイスでの切り替えはステップ 4 に従ってください。既存のサンドボックスアカウントを再利用する場合は、先に購入履歴をクリアしてください。Adapty プロファイルを削除してもクリアされません。
既存テスターのアクセスを削除する
テスターのアクセスを削除するには、有効期限を過去に設定したり Revoke access level API を呼び出したりしないでください。サンドボックスでは、サブスクリプションは数分ごとに自動更新されます。更新のたびに同じトランザクションチェーンに将来の有効期限が復元されるため、アクセスは自動的に復活します。Revoke access level API は access_level_updated(is_active=false)イベントを発火しますが、次の更新でそれが上書きされます。
アクセスを実際に停止するには、ストア側でサブスクリプションをキャンセルしてください。テストデバイスで Settings > Developer > Sandbox Apple Account に移動し、Manage を選択して、サブスクリプションをキャンセルします。更新が停止し、現在の期間が終了するとアクセスが終了します。
プロファイルを削除するとアクセスが復活する理由
テスターがアプリを再インストールすると、Adapty はサンドボックスアカウントの購入履歴を受け取り、新しいインストールを既存の購入に紐付けます。購入は削除したプロファイルではなく、ストアアカウントに紐付いています。
- 匿名プロファイル:
customer_user_idなしで再インストールすると、有料アクセス共有の設定に関わらず、常にストアアカウントのアクセスレベルを継承します。 - 識別済みプロファイル: アクセスが新しい
customer_user_idに引き継がれるかどうかは、有料アクセス共有の設定によります。
Adapty がこれらのプロファイルをチェーンとして紐付ける仕組みについては、プロファイルの仕組みを参照してください。
テストサブスクリプション
サンドボックステストアカウントを使ってアプリをテストする際、サンドボックス内の各テスターのサブスクリプション更新レートを設定できます。サブスクリプション更新レートの編集について詳しくは、Apple の公式ドキュメントを参照してください。
デフォルトでは、サブスクリプションは停止するまで最大 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 分 |
テストトランザクションが Event feed に表示されるまで最大 10 分かかることに注意してください。
サンドボックスは、更新・請求リトライ・グレース期間のアプリとバックエンドの処理を確認するために使用してください。本番環境の更新タイミングを予測するためのものではありません。上記の加速・上限付きスケジュールは本番環境とは異なります。バックエンドテスト用にサーバーでトランザクションを再実行するには、Set transaction API を使用してください。
テストオファー
オファーのテストでは、適格性が正しく機能するために、すべてのユーザーレシートを削除する必要があります。
オファーをテストする最も確実な方法は、まったく新しいサンドボックステストアカウントを使用することです。同じサンドボックステストアカウントを使って繰り返しテストすると、予期しない動作が発生する可能性があります。
同じサンドボックステストアカウントを使って繰り返しテストする場合は、適格性関連の問題を避けるため、必ず購入履歴をクリアしてください。