1 回だけの購入のライフサイクル

1 回だけの購入商品の場合、ライフサイクルは定期購入商品よりもシンプルですが、それでもバックエンドで適切に処理する必要があるステータスと遷移イベントがいくつかあります。

図 1 1 回だけの購入のライフサイクルのステータスと遷移イベント

1 回限りのアイテムの新規購入

ユーザーが請求フローを完了すると、アプリは次のいずれかの方法で新規購入に関する情報を確認できます。

新規購入を受信したら、getPurchaseState メソッドまたは purchases.products.get in Play Developer API を使用して、新規購入の支払いステータスを確認します。

リアルタイム デベロッパー通知

ユーザーが 1 回限りのアイテムの購入または購入をキャンセルすると、Google Play から OneTimeProductNotification メッセージが送信されます。バックエンドの購入ステータスを更新するには、OneTimeProductNotification オブジェクトで提供される購入トークンを使用して purchases.products.get メソッドを呼び出します。このメソッドで、購入トークンに基づく、最新の購入と消費のステータスを取得できます。

トランザクション関連の RTDN は安全なバックエンドで処理する必要があります。

完了した取引を処理する

ユーザーが 1 回限りのアイテムの購入を完了すると、Google Play はタイプ ONE_TIME_PRODUCT_PURCHASEDOneTimeProductNotification メッセージを送信します。この RTDN を受領後に、バックエンドで 1 回限りのアイテムの購入を処理するの説明に従って購入を処理します。

キャンセルされた取引を処理する

1 回限りのアイテムの購入がキャンセルされると、リアルタイム デベロッパー通知を受信するように構成されている場合、Google Play はタイプ ONE_TIME_PRODUCT_CANCELEDOneTimeProductNotification メッセージを送信します。たとえば、ユーザーが必要な期間内に支払いを完了しなかった場合や、デベロッパーまたはお客様のリクエストによって購入が取り消された場合などです。バックエンド サーバーがこの通知を受け取ったら、purchases.products.get メソッドを呼び出して最新の購入ステータスを取得し、それに応じてユーザーの利用資格を含むバックエンドを更新します。

Purchased ステータスの 1 回限りのアイテムの購入が払い戻しを受ける場合は、Voided Purchases API を介して通知されます。

バックエンドで 1 回限りのアイテムの購入を処理する

新規購入を ONE_TIME_PRODUCT_PURCHASED RTDN 経由で検知した場合、PurchasesUpdatedListener からアプリ内で認識した場合、アプリの onResume() メソッドで購入を手動でフェッチした場合、いずれのケースでも、新規購入を処理する必要があります。セキュリティ強化のために、購入処理はバックエンドで処理することをおすすめします。

新規の 1 回だけの購入を処理する手順は次のとおりです。

  1. purchases.products.get エンドポイントをクエリして、1 回限りのアイテムの最新購入ステータスを取得します。購入でこのメソッドを呼び出すには、アプリまたは ONE_TIME_PRODUCT_PURCHASED RTDN のいずれかから、対応する purchaseToken が必要となります。
  2. getPurchaseState() を呼び出して、購入ステータスが PURCHASED であることを確認します。
  3. 購入を確認します
  4. ユーザーにコンテンツへのアクセスを許可します。購入に関連付けられたユーザー アカウントは、purchases.products.getobfuscatedExternalAccountId フィールドが購入時に setObfuscatedAccountId() を使用して設定されている場合、そちらから識別できます。
    1. 非消費型アイテムの購入の場合は、purchases.products.acknowledge メソッドを呼び出して、コンテンツの配布を承認します。acknowledgementState フィールドを確認して、その購入が以前に承認されていないことを確かめます。
    2. 消費型アイテムの場合は、purchases.products.consume メソッドを呼び出して、アイテムを消費済みとしてマークし、ユーザーがアイテムを消費した後で再度購入できるようにします。このメソッドは購入も承認します。

Play Billing Library には、利用できる購入の承認と消費メソッドもあり、アプリからの購入を処理できますが、使用できるバックエンドがある場合は、さらに安全性の高い実装のために、バックエンドで処理することをおすすめします。