アプリ内課金(IAP)のテストケースを設計・実行する


アプリ内課金(IAP)のテストケースを設計・実行する

アプリを申請する前にユニットテストを実行するには、Amazonが提供するApp Testerというツールを使用します。効果的なテストを行うために、アプリの利用中にユーザーが直面するさまざまなシナリオを、幅広くカバーする複数のテストケースを作成することをお勧めします。

アプリとAmazonアプリストアとのインタラクションはAPIライブラリに隔離されているため、アプリはApp Testerと対話していることに気づきません。App Testerによるレスポンスを制御できるので、どのようなレスポンス状態についてもアプリの反応をテストすることができます。

このページでは、アプリのIAP実装に関する大部分のユーザーシナリオをカバーする一連のテストケースを挙げ、App Testerを使用してそのテストケースを実行する方法について説明します。App Testerの詳細については、下記のページを参照してください。

テストケースの概要

アプリのIAP実装をテストする際は、できる限り多くのコードパスをカバーするようにテストケースを計画してください。以下のトランザクションタイプの一覧は、アプリのユーザーが直面する可能性があるさまざまなシナリオを十分にカバーしています。

  • ユーザーデータの取得(成功/失敗)
  • 商品データの取得(成功/失敗)
  • 購入リクエスト(成功/失敗/購入済み/無効なSKU)
  • 購入の更新リクエスト(成功/失敗)
  • アイテム付与完了の通知(成功/利用不可能)
  • 定期購入型アイテムの確認(有効/期限切れ)
  • レシートの検証(RVS)

ユーザーデータを取得する

AmazonアプリストアとApp TesterツールはどちらもユーザーIDでトランザクションをトラッキングします。アプリは複数のユーザーを同時に処理できなければならないので、ユーザーが区別される機能では、AndroidライフサイクルメソッドonResumeなどの適切なタイミングで、現在ログインしているユーザーIDを確認する必要があります。ユーザーデータを取得すると、SUCCESSFULレスポンスまたはFAILEDレスポンスが返されます。

それぞれのレスポンスを返すGet User Dataをテストするには:

  1. App Testerの [ユーザーアカウント設定] タブで、ユーザーIDが設定されていることを確認します。
  2. [GetUserData API Preference] を設定します。
    • SUCCESSFULレスポンスに対するテストを行うには、[DEFAULT] または [SUCCESSFUL] に設定します。
    • FAILEDレスポンスに対するテストを行うには、[FAILED] に設定します。
  3. getUserDataを呼び出します。
  4. onGetUserDataResponseを使用してレスポンスを処理します。

商品データを取得する

Get Product Dataのテストを実行すると、DEFAULTモードでは、App TesterがJSONファイルの商品データを返します。商品データを取得する際、SUCCESSFULまたはFAILEDレスポンスが返されます。

Get Product Dataをテストするには:

  1. App Tester用のJSONファイルに、テストするSKUと商品定義が格納されていることを確認します。
  2. [GetProductData API Preference] を設定します。
    • SUCCESSFULレスポンスに対するテストを行うには、[DEFAULT] または [SUCCESSFUL] に設定します。
    • FAILEDレスポンスに対するテストを行うには、[FAILED] に設定します。
  3. getProductDataを呼び出します。
  4. onGetProductDataResponseを使用してレスポンスを処理します。

購入

実装とテストを簡略化するために、Purchase APIは次の3つ種類のIAPアイテムに対して同じように機能します。

  • 定期購入型アイテム: ユーザーによる1回限りの購入
  • 非消費型アイテム: ユーザーによる1回限りの購入
  • 消費型アイテム: 同じユーザーによる複数回の購入が可能

Purchase APIをテストするには:

  1. App Tester用のJSONファイルに、テストするSKUと商品定義が格納されていることを確認します。
  2. [Purchase API Preference] を設定します。次の4つの条件をそれぞれテストします。
    • SUCCESSFULレスポンスに対するテストを行うには、[DEFAULT] または [SUCCESSFUL] に設定します。
    • FAILEDレスポンスに対するテストを行うには、[FAILED] に設定します。
    • ALREADY_PURCHASEDリクエストに対するテストを行うには、[ALREADY_PURCHASED] に設定します。
    • INVALID_SKUに対するテストを行うには、[INVALID_SKU] に設定します。
  3. purchaseを呼び出します。
  4. onPurchaseResponseを使用してレスポンスを処理します。
    購入が成功したコンテンツはApp Testerの「Manage Transactions」タブに表示されます。

または、一般的な購入ワークフローを通ることによって、「購入済み」状態をテストできます。

  1. App Tester用のJSONファイルに、テストするSKUと商品定義が格納されていることを確認します。
  2. [Purchase API Preference] を [DEFAULT] に設定します。
  3. 定期購入型アイテムSKUまたは非消費型アイテムSKUの購入を成功させます(消費型SKUは複数回購入できるので、このテストには適しません)。
  4. 同じSKUを使用して、purchaseを再度呼び出します。
  5. onPurchaseResponseを使用してレスポンスを処理します。
    購入が成功したコンテンツはApp Testerの「Manage Transactions」タブに表示されます。

購入の更新リクエスト

ユーザーが正しいコンテンツに確実にアクセスできるように、アプリがそのユーザーとの対話を(AndroidライフサイクルのonResumeメソッドで)開始したときにPurchase Update Request APIを呼び出します。SUCCESSFULレスポンスには、App Testerの [Manage Transactions] タブの内容に応じて、それまでのトランザクションのレシートが0個以上含まれています。

RVSを使用して、レシート内のトークンを検証できます。

購入の更新リクエストをテストするには:

  1. App Tester用のJSONファイルに、テストするSKUと商品定義が格納されていることを確認します。
  2. 構成したSKUの購入を成功させます。

  3. [GetPurchaseUpdates API Preference] を設定します。
    • SUCCESSFULレスポンスに対するテストを行うには、[DEFAULT] または [SUCCESSFUL] に設定します。
    • FAILEDレスポンスに対するテストを行うには、[FAILED] に設定します。
  4. getPurchaseUpdatesを呼び出します。
  5. onPurchaseUpdatesResponseを使用してレスポンスを処理します。

SUCCESSFULだが空のレスポンスを生成したい場合は、次のワークフローの手順を行います。

  1. App Tester用のJSONファイルに、テストするSKUと商品定義が格納されていることを確認します。
  2. 構成したSKUの購入を成功させます。
  3. [getPurchaseUpdates API Preference] を [DEFAULT] に設定します。
  4. [Manage Transactions] タブで、すべてのトランザクションを削除します。
  5. getPurchaseUpdatesを呼び出します。
  6. onPurchaseUpdatesResponseを使用してレスポンスを処理します。

アイテム付与完了を通知する

Notify Fulfillment APIを呼び出して、IAPで使用可能なレシート状態をテストします。次のワークフローに従って、消費型アイテムと非消費型アイテムの付与をテストできます。

アイテム付与完了の通知をテストするには:

  1. 消費型アイテムに対してpurchaseを呼び出します。
  2. 購入したアイテムのレシートに注目します。
  3. getPurchaseUpdateを呼び出します。
  4. 返された消費型アイテムのレシートに注目します。
  5. App Testerの [Manage Transactions] タブで、消費型アイテムが配信済みに設定されていることを確認します。
  6. notifyFullfilmentを呼び出します。
    • 「アイテム付与完了」の条件をテストするには、notifyFulfillmentを [SUCCESSFUL] に設定します。
    • 「利用不可能」の条件をテストするには、notifyFulfillmentを [UNAVAILABLE] に設定します。
  7. App Testerの [Manage Transactions] タブで、購入を確認します。
    • 「購入完了」状態をテストしている場合、消費型アイテムは「Fulfilled」と表示されます。
    • 「利用不可能」状態をテストしている場合、消費型アイテムは「Unavailable」と表示されます。

定期購入型アイテムの確認

App Testerを使用して、有効な定期購入型アイテムと期限切れの定期購入型アイテムの両方を確認できます。[Manage Transactions] タブから定期購入型アイテムのアクティブなトランザクションをキャンセルすると、App Testerはそのトランザクションを期限切れの定期購入型アイテムとして扱います。

有効な定期購入型アイテムに対するテストを行うには:

  1. 定期購入型SKUの購入を成功させます。
  2. [Manage Transactions] タブに移動して、トランザクションが表示されていることを確認します。
  3. getPurchaseUpdatesを呼び出します。
  4. onPurchaseUpdatesResponseを使用してレスポンスを処理します。
  5. 返されたレシートから、購入したSKUの最新のレシート(開始日付で判断)を検証します。
  6. 終了日付の値がnullであることを確認します。

期限切れの定期購入型アイテムに対するテストを行うには:

  1. 定期購入型SKUの購入を成功させます。
  2. [Manage Transactions] タブに移動して、トランザクションが表示されていることを確認します。
  3. [Manage Transactions] タブで、トランザクションをキャンセルします。

  4. getPurchaseUpdatesを呼び出します。
  5. onPurchaseUpdatesResponseを使用してレスポンスを処理します。
  6. 返されたレシートから、購入したSKUの最新のレシート (開始日付で判断) を検証します。
  7. 終了日付の値がnull以外であることを確認します。

レシートを検証する

Amazonが提供するRVSを使用して、バックエンドサーバーからの購入を検証できます。このサービスの詳細については、RVSのドキュメントを参照してください。

IAPレスポンスのマトリックス

次のマトリックスは、IAP APIレスポンスをApp Testerのプロパティなどのテスト条件にマッピングしたものです。

IAP APIレスポンス 非同期呼び出し AppTesterプロパティセット JSONの使用 説明
PurchaseRequestStatus.SUCCESSFUL purchase Purchase API、DEFAULTまたはSUCCESSFUL はい 購入がJSONファイル内にある有効なSKUに対するものである場合は、SUCCESSFULレスポンスが返されます。
PurchaseRequestStatus.FAILED purchase Purchase API、FAILED はい(アイテム情報を表示するため) [Preference] ページでこのプロパティが [FAILED] に設定されている場合、または購入確認画面が閉じられた場合、FAILEDレスポンスが強制的に返されます。
PurchaseRequestStatus.INVALID_SKU purchase Purchase API、INVALID_SKU いいえ [Preference] ページでこのプロパティが設定されている場合、購入リクエストに対してINVALID_SKUが返されます。
PurchaseRequestStatus.ALREADY_PURCHASED purchase Purchase API、ALREADY_PURCHASED はい [API Response Settings] タブでこのプロパティが [ALREADY_PURCHASED] に設定されている場合、またはSKUが以前に購入されていた場合、購入リクエストに対してALREADY_PURCHASEDが強制的に返されます。
GetProductDataStatus.SUCCESSFUL getProductData Get Product Data API、DEFAULTまたはSUCCESSFUL はい リクエストがJSONファイル内にある有効なSKUに対するものである場合は、SUCCESSFULレスポンスが返されます。
GetProductDataStatus.FAILED getProductData Get Product Data API、FAILED いいえ このプロパティが設定されている場合、商品データリクエストに対してFAILEDが返されます。
GetUserDataStatus.SUCCESS getUserData Get User Data API、DEFAULTまたはSUCCESSFUL いいえ [API Response Settings] タブでこのプロパティが設定されている場合は、常に、保存されているユーザーIDが返されます。
GetUserIdRequestStatus.FAILED getUserData Get User Data API、FAILED いいえ [API Response Settings] タブでこのプロパティが設定されている場合は、FAILEDレスポンスが返されます。
PurchaseUpdatesResponseStatus.SUCCESS getPurchaseUpdates Purchase Updates API、SUCCESSFUL いいえ [API Response Settings] タブでこのプロパティが設定されている場合は、常に、トランザクションログの内容が返されます。
PurchaseUpdatesResponseStatus.FAILED getPurchaseUpdates Purchase Updates API、FAILED いいえ [API Response Settings] タブでこのプロパティが設定されている場合は、FAILEDレスポンスが返されます。