開発者コンソール

IAPのベストプラクティス:ユーザーの購入傾向の追跡


IAPのベストプラクティス:ユーザーの購入傾向の追跡

このガイドでは、アプリを最大限に活用するための戦略として、レシートのキャンセル率をモニタリングすることでユーザーの購入傾向を追跡する方法について概説します。

AmazonアプリストアUserIdの使用

UserIdは、IAPを使用するユーザーごとに一意の識別子です。UserIdを取得するには、PurchasingServiceクラスのメンバーであるgetUserData()メソッドを呼び出します。詳細については、ユーザー情報の取得を参照してください。

Unityでアプリを実装した場合は、IAmazonExtensionsを実装してUserIdを取得します。詳細については、UnityマニュアルでAmazonアプリストアとAmazon Undergroundストア:拡張機能を参照してください。または、Amazon IAPプラグインのgetUserData()メソッドを使用する方法もあります。その場合の詳細については、GetUserDataを参照してください。

ユーザーの購入履歴および傾向を追跡するには、ユーザーのAmazonアプリストアUserIdを開発者側のID管理システムに紐付けます。Login with AmazonなどのIDプラットフォームを統合することで、アプリにIDシステムを導入してください。ほかのサービス(Facebookのログインサービスなど)を使用したり、独自のシステムを作成したりする方法もあります。

IAPのレシート検証

ユーザーが購入を完了したら、onResume()呼び出しでレシートを処理します(その際、ユーザー側の操作は不要です)。詳細については、getPurchaseUpdatesメソッドの実装を参照してください。 

レシート検証サービス(RVS)を統合してレシートを検証します。RVSは、以下を指定して呼び出します。 

  • receiptId: 購入ごとに一意の識別子です。receiptIdは、onPurchaseResponse()コールバックで以下のように取得します。

       @Override
       public void onPurchaseResponse(PurchaseResponse purchaseResponse) {
          switch (purchaseResponse.getRequestStatus()) {
              case SUCCESSFUL:
                  receiptId = purchaseResponse.getReceipt().getReceiptId();
                  PurchasingService.notifyFulfillment(purchaseResponse.getReceipt().getReceiptId(),
                  FulfillmentResult.FULFILLED);
                  break ;
              case FAILED:
                  break ;
          }
       }
    
  • userId: ユーザーごとに一意の識別子です。userIdは、onUserDataResponse()コールバックで以下のように取得します。

      @Override
      public void onUserDataResponse(UserDataResponse response) {
          final UserDataResponse.RequestStatus status = response.getRequestStatus();
          switch (status) {
              case SUCCESSFUL:
                  currentUserId = response.getUserData().getUserId();
                  currentMarketplace = response.getUserData().getMarketplace();
                  break;
              case FAILED:
              case NOT_SUPPORTED:
                  // 失敗時の処理を適切に行います。
                  break;
          }
      }
    

RVSリクエストの構文は次のとおりです。

https://<RVSサーバーのURL>/version/<オペレーションのバージョン番号>/verifyReceiptId/developer/<共有シークレット>/<UserId>/receiptId/<ReceiptId>

リクエストとレスポンスの例

RVS本番サーバーでレシートを検証するリクエストの例を以下に示します。 

https://appstore-sdk.amazon.com/version/1.0/verifyReceiptId/developer/2:smXBjZkWCxDMSBvQ8HBGsUS1PK3jvVc8tuTjLNfPHfYAga6WaDzXJPoWpfemXaHg:iEzHzPjJ-XwRdZ4b4e7Hxw==/user/LRyD0FfW_3zeOlfJyxpVll-Z1rKn6dSf9xD3mUMSFg0=/receiptId/wE1EG1gsEZI9q9UnI5YoZ2OxeoVKPdR5bvPMqyKQq5Y=:1:11

リクエストが成功すると、RVS APIからレスポンスコード(HTTP 200)が返されます。リクエストが成功した場合のレスポンスの例を以下に示します。

{
    "betaProduct": false,
    "cancelDate": null,
    "parentProductId": null,
    "productId": "com.amazon.iapsamplev2.gold_medal",
    "productType": "CONSUMABLE",
    "purchaseDate": 1399070221749,
    "quantity": 1,
    "receiptId": "wE1EG1gsEZI9q9UnI5YoZ2OxeoVKPdR5bvPMqyKQq5Y=:1:11",
    "renewalDate": null,
    "term": null,
    "termSku": null,
    "testTransaction": true
}

レシート検証

レシートを検証するには、cancelDateフィールドとrenewalDateフィールドを確認します。

  • 消費型アイテムまたは非消費型アイテムの購入の場合、両方のフィールドがnullか、cancelDatepurchaseDateより前であれば、レシートは有効となります。
  • 定期購入型アイテムの購入の場合、cancelDateフィールドがnullであれば、レシートは有効となります。

キャンセルされたレシートの例を以下に示します。

{
    "betaProduct": false,
    "cancelDate": 1583136000000,
    "parentProductId": null,
    "productId": "com.amazon.iapsamplev2.gold_medal",
    "productType": "CONSUMABLE",
    "purchaseDate": 1583049600000,
    "quantity": 1,
    "receiptId": "wE1EG1gsEZI9q9UnI5YoZ2OxeoVKPdR5bvPMqyKQq5Y=:1:11",
    "renewalDate": null,
    "term": null,
    "termSku": null,
    "testTransaction": true
}

その他の推奨事項

  1. アクティブなレシートごとに72時間以内にRVSを呼び出すプロセスを作成して、キャンセルされたレシートの傾向をモニタリングします。
  2. リクエストのスロットリングを回避するために、ポーリングの頻度を10トランザクション毎秒(TPS)未満に保ちます。

次のステップ

上記の戦略を実行すると、ユーザーの購入傾向を追跡する信頼性の高いプロセスを作成でき、重要な収益源の確保に役立てることができます。IAPおよびその実装方法について詳しくは、アプリ内課金(IAP)についてを参照してください。