くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

RevenueCat入門 その14 | Sandbox環境でのテスト(iOS)

前回の続き。課金テスト用のsandbox環境まわりのiOS編(*´ω`*)

Sandbox Testing

アプリ内課金のテストは、sandbox環境を利用して確認できる。
RevenueCat自体は、本番環境かsandbox環境を判断するので、設定は特に不要。
ただ、各ストアでの設定などは必要になる。

Sandbox Limitations

一般的に、本番環境とsandbox環境は、同じように動作する。
ただメタデータなどは異なることもあるので、購入フローのみをテストするのがよいっぽい。

  • Store APIが返す、地域ごとの価格が正しくないことがある
  • Store APIが返す、課金アイテムの名前や説明が正しくないことがある

そのため、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 runVSCodeからの実行ではダメっぽい。。

また、キャンセルや返金のイベントが保存されないため、
アクティブなサブスクがないことは検知できるが、
RevenueCat上で各イベントを確認することができないらしい。

SimulatorでテストできるようにStore Kitの設定が記載されているが、
Flutterだと制限事項が多いので、一旦、省略。。

Make a Purchase

購入のテスト。
購入しようとすると、テストアカウントでサインインが必要な場合がある。

Appleは、購入や復元するたびに、Apple IDのサインインが要求するときがある。
SDKpurchase()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でも復元されてしまう。

完全に新規ユーザのテストをしたい場合は、
必ずログアウトして、新しいアカウントを作成しなおす必要がある。


以上!! 結構ハマりそうなことが書かれている。。
実際にやるときは、気を付けないと。。(*´ω`*)