概要
XcodeとSandboxでAppleが提供するテスト環境を使い、StoreKitフレームワークを使ってアプリ内課金の実装をテストします。包括的なテストには、次のようなメリットがあります。
-
シームレスな購入フローを実現し、アプリで優れたユーザー体験を提供する。
-
購入、復元、サブスクリプションオファーなど、すべてのシナリオに対応できる完全なロジックを実装する。
-
App Storeにアプリを公開した後の本番環境で、アプリの購入機能が正しく動作することを検証する。
初期開発からベータテストの段階にわたってアプリ内課金をテストするには、以下のツールが必要です。
- XcodeのStoreKitテスト
-
初期開発、継続的インテグレーション、デバッグに使います。
- Sandbox
-
App Store Connectで設定したデータを使ったシナリオのテストに使います。Sandboxの利用を始めるには、「Sandboxテスターアカウントの作成」を参照してください。
- TestFlight
-
内部および外部のテスターによるベータテストの管理に使います。詳しくは、「TestFlightでベータ版テストが簡単に」を参照してください。
必要なテストシナリオに対応し、テストしたい設定に基づいたツールを選択します。
開発の初期段階では、App Store Connectでアプリ内課金を構成する準備ができていないかもしれません。XcodeのStoreKitテストでは情報をローカルで構成できるため、Sandbox Apple IDを作成する前にStoreKitのトランザクションをテストできます。ネットワーク接続も必要ありません。Xcodeのシミュレータまたは実際のデバイスでアプリをテストできます。
App Store Connectでアプリ内課金を設定した後、Sandboxを使用して、本番環境のアプリで使用するプロダクト情報と同じ情報を使ってテストします。Sandboxのテストでは、トランザクションをクライアントからサーバまで、エンドツーエンドでテストできます。レシート検証やApp Storeサーバ通知など、アプリに必要なサーバ間の機能もテストできます。
TestFlightでは、チームメンバーや外部テスターからのフィードバックを取得したり、Sandbox環境を使ってアプリ内課金をテストしたりできます。Sandboxでのトランザクションでは、購入操作による支払いは発生しません。次の表は、必要な環境設定、機能、請求の有無をツールごとに比較したものです。
ツール |
App Store Connectの設定が必要 |
App Storeによって署名されたアプリレシートを提供 |
購入トランザクションのテスト時にユーザーへの請求が発生 |
---|---|---|---|
XcodeのStoreKitテスト |
× |
×(Xcodeによる署名) |
× |
Sandbox |
○ |
○ |
× |
TestFlight(Sandboxを使用) |
○ |
○ |
× |
テスト環境の制御
テストシナリオを設定して実行するには、多くの場合、テスト環境の制御が必要です。たとえば、同じテストを複数回実行するためにテストアカウントのリセットが必要な場合や、テストの条件に影響するアプリ外でのユーザー操作の再現が必要な場合があります。次の表は、各ツールでのテスト環境の制御機能を示したものです。
テストシナリオ |
Sandbox |
XcodeのStoreKitテスト |
---|---|---|
異なるストアフロントで価格帯とロケールが変わることをテストする |
○ |
限定(価格帯を含まない) |
購入履歴を消去する |
× |
○ |
サブスクリプションのアップグレード、ダウングレード、クロスグレード、および自動更新のキャンセルをテストする |
○ |
○ |
お試しオファーの対象資格をリセットする |
○ |
○ |
テスト用の強制的なStoreKitエラーを発生させる |
× |
○ |
サブスクリプション更新のテスト用に時間経過を速める/遅くする |
× |
○ |
一般的なStoreKitシナリオのテスト
アプリ内課金を提供するすべてのアプリで、購入の復元、ユーザーへのアプリ内課金の表示、基本的なトランザクションの処理をサポートする必要があります。次の表は、一般的なテストシナリオと、それらがSandboxまたはXcodeでテスト可能かどうかを示します。
テストシナリオ |
Sandbox |
XcodeのStoreKitテスト |
---|---|---|
購入を復元する |
○ |
○ |
○ |
○ |
|
消耗型または非消耗型のアプリ内課金を購入する |
○ |
○ |
繰り返しテストするために非消耗型のアプリ内課金を再購入する |
× |
○ |
自動更新サブスクリプションを購入する |
○ |
○ |
非自動更新サブスクリプションを購入する |
○ |
× |
アプリ内課金を返金する |
× |
○ |
ユーザーがアプリ外で操作を完了する必要がある場合の購入の中断をテストする |
○ |
○ |
支払い承認が拒否されたことによる購入の失敗をテストする |
× |
○ |
App Store Connectから構成済みのアプリ内課金を取得する |
○ |
×(StoreKit構成ファイルのデータが返される) |
サブスクリプションと「承認と購入のリクエスト」のテスト
アプリで提供するアプリ内課金によっては、自動更新サブスクリプション、お試しオファー、プロモーションオファー、「承認と購入のリクエスト」に関連するテストシナリオが必要な場合があります。次の表は、それらのテストシナリオと、それらがSandboxまたはXcodeでテスト可能かどうかを示します。
テストシナリオ |
Sandbox |
XcodeのStoreKitテスト |
---|---|---|
「承認と購入のリクエスト」トランザクションを開始し、承認待ち状態にする |
○ |
○ |
「承認と購入のリクエスト」トランザクションを承認または却下して承認待ち状態を解除する |
× |
○ |
自動更新サブスクリプションのお試しオファーを利用する |
○ |
○ |
自動更新サブスクリプションのプロモーションオファーを利用する |
○ |
○ |
サブスクリプションの更新を処理する |
○ |
○ |
サブスクリプションのキャンセルまたは返金を処理する |
× |
○ |
ユーザーによるサブスクリプションのキャンセルおよび自動更新の無効化に応答する |
○ |
○ |
期限切れになったサブスクリプションに応答する |
○ |
○ |
サブスクリプションのアップグレードまたはダウングレードを処理する |
○ |
○ |
同じ期間または異なる期間でのサブスクリプションのクロスグレードを処理する |
○ |
○ |
詳しくは、「承認と購入のリクエスト」に関する情報を参照してください。