前回の続き。課金テスト用のsandbox環境まわりのiOS編(*´ω`*)
Sandbox Testing
アプリ内課金のテストは、sandbox環境を利用して確認できる。
RevenueCat自体は、本番環境かsandbox環境を判断するので、設定は特に不要。
ただ、各ストアでの設定などは必要になる。
Sandbox Limitations
一般的に、本番環境とsandbox環境は、同じように動作する。
ただメタデータなどは異なることもあるので、購入フローのみをテストするのがよいっぽい。
そのため、sandbox環境では購入フローのテストをメインにする。
たとえば、以下のような部分。
- 購入の開始
- 購入の完了
- 購入によりコンテンツがアンロックされたことを確認
Apple App Store & TestFlight
iOSでの設定/準備
Sandbox Considerations
sandbox環境での注意点
sandbox環境やTestFlight環境では、
課金アイテムの名前や価格などが正確に反映されないことがよくあるらしい
Create a Sandbox Test Account
sandbox環境用のテストアカウントの作成
iOSの場合、sandbox環境のアカウントが必要らしい
App Store Connectでの作業
「Users and Access(ユーザとアクセス) > Sandboxタブ > テストアカウント」から
Apple Developerのガイドはこれ
メールアドレス形式であれば、なんでもよさそうだけど、
すでにApple IDになっているメールアドレスは不可
また、このガイドでは「所有者を確認できるメールアドレス」が推奨っぽい?
(メールの受信テストなどを想定している?)
Localization
特定の地域でテストする場合は、テストアカウントの国/地域を変更すればOK
Testing on Device
実機でのテスト方法
Add the Sandbox Test Account to Your Device
iOS12移行では、テストアカウントでのログインは不要
テストアカウントの追加はそれぞれ以下の通り
- iOS12+
Settings > [Your Account] > App Store > Sandbox Account
- iOS13+
Settings > App Store > Sandbox Account
- macOS 11.5.2+
App Store > Preferences > Sandbox Account
テストアカウントの資格情報は、development buildのアプリで、
購入するまで表示されないらしい。
もし、テストアカウントを追加するオプションが表示されない場合、
sandbox環境で購入を試してみるといいっぽい。
iOS 14+ Only: Testing on the Simulator
iOS 14以降だと、シミュレータでもテストができるようだけど、
制限事項も多い。。
Apple Developerのガイドはこれ
ただ、Xcodeから実行した場合のみのようで、
Flutterのflutter run
やVSCodeからの実行ではダメっぽい。。
また、キャンセルや返金のイベントが保存されないため、
アクティブなサブスクがないことは検知できるが、
RevenueCat上で各イベントを確認することができないらしい。
SimulatorでテストできるようにStore Kitの設定が記載されているが、
Flutterだと制限事項が多いので、一旦、省略。。
Make a Purchase
購入のテスト。
購入しようとすると、テストアカウントでサインインが必要な場合がある。
Appleは、購入や復元するたびに、Apple IDのサインインが要求するときがある。
SDKのpurchase()
やrestorePurchases
などを呼び出すと発生。
Face ID/Touch IDなどの種類は制御できない。
Appleのsandbox環境は遅いことで有名らしい。
購入が完了するまでに15秒以上かかることも。
本番環境では、だいたい数秒以内に完了するとのこと。
Verify the Transaction Appears in the Dashboard
RevenueCat上での購入履歴の確認
購入が成功すると、RevenueCatですぐ確認できるよう。
ナビゲーションバーのSandbox data
にチェックがない場合は、表示されない
Working with Subscriptions
サブスクの動作確認
sandbox環境では、自動更新の周期が短くなる。
テストアカウントの設定で変更可能で、
デフォルトは「5分ごとに月次更新」
これにより、簡単にサブスクの更新/失効などを確認・テストできる
ただ、更新間隔が早すぎると、RevenueCat管理画面で反映されない場合がある。
Deleting Test Users
新規インストールの確認をする際、
RevenueCat管理画面で該当の顧客やレシートを削除するとよい。
ユーザ削除に関するドキュメントはこれ
パフォーマンス上の理由で、1顧客あたりのApp Storeのサブスクは100までしか受領しないらしい。
本番だと定期購読100個はほぼないが、sandboxだと発生する場合がある。
その場合は、アカウントを削除すると解決できる。
Deleting local data
ローカルになるキャッシュデータは、再インストールすれば削除される。
ただ、macOSの場合は、UserDefaultsを手動で削除しないといけない。。
TestFlight
TestFlightを使う場合、Appleのドキュメントに書かれていない、
いろいろ問題が起こる場合があるっぽい。
Common Errors
macOSで購入する際、「Account Not In This Store」というエラーが表示される場合、
以下の対応をおこなうとよいよう
- 地域を推奨地域に変える
- App Storeからサインアウトする
- TestFlightアプリを再起動する
- 再度、購入を試してみて、プロンプトが表示されたらサインインする
MAKE SURE TO LOG OUT OF THE SANDBOX USER ON YOUR TESTING DEVICE
テストユーザでは、テスト端末から必ずログアウトする
RevenueCatからユーザを削除しても、Appleの購入履歴は削除されない。
受信したレシートやメタデータのみ削除される。
なので、購入や復元をすると、RevenueCatでも復元されてしまう。
完全に新規ユーザのテストをしたい場合は、
必ずログアウトして、新しいアカウントを作成しなおす必要がある。
以上!! 結構ハマりそうなことが書かれている。。
実際にやるときは、気を付けないと。。(*´ω`*)