技術系TIPS
PR

【Google】アプリ内課金の1回限りの購入ライフサイクル

saratogax
記事内に商品プロモーションを含む場合があります

下記で Google のアプリ内課金について紹介しました。

あわせて読みたい
【Google】アプリ内課金の購入ライフサイクルと通知(RTDN)
【Google】アプリ内課金の購入ライフサイクルと通知(RTDN)

購入レシートを元に状態把握するのは昔から変わりませんが、以下のようなイベント発生時に API やリアルタイムデベロッパー通知(以降、RTDN)を使ってハンドリングする必要があります。

  • 購入完了
  • キャンセル
  • 払い戻し

また、購入処理を Android アプリで完結するのではなく、バックエンドで購入レシートの整合性を確認したり、GooglePlay の API で状態をチェックするとセキュリティ的にも安心ですね。

ここでは、「1回限りの購入」のライフサイクルについて紹介します。

1回限りの購入のライフサイクル

「1回限りの購入」は、定期購入(サブスクリプション)商品と比較してライフサイクルはシンプルですが、バックエンドで適切に処理すべきステータスと遷移イベントが存在します。

新規の1回限りの購入商品

ユーザーが購入フローを完了した後、アプリは下記の方法で購入情報を取得できます。

  • GooglePlay Console で RTDN を設定し、「サブスクリプションと使い切り商品のすべての通知を取得する」を有効にする
  • PurchasesUpdatedListener インターフェースを実装して購入の更新を自動的に受け取る
  • BillingClient.queryPurchasesAsync() メソッドを呼び出す

新しい購入情報を受け取ったら、Android アプリの getPurchaseState メソッド、または GooglePlay Developer API の purchases.products.get を使用して購入の支払い状態を確認します。

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

1 回限りの購入商品の RTDN は、GooglePlay Concole で有効化していない限り送信されません。

ユーザーが 1 回限りの購入商品を購入またはキャンセルした場合、GooglePlay は OneTimeProductNotification メッセージを送信します。

バックエンドの購入ステータスを更新するには、OneTimeProductNotification オブジェクトに含まれる購入トークンを使用して purchases.products.get メソッドを呼び出します。

このメソッドは、購入トークンに基づいて最新の購入状態と消費状態を提供します。

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

バックエンドでの使い切り商品の購入処理

新規の使い切り商品の購入は、`ONE_TIME_PRODUCT_PURCHASED` RTDN、`PurchasesUpdatedListener`、またはアプリの onResume() メソッドで手動取得のいずれの方法で検出された場合でも、処理する必要があります。

セキュリティ上の理由から、購入処理はバックエンドで行うことを推奨します。

新規の使い切り商品の購入を処理する手順は以下の通り。

  • purchases.products.get エンドポイントに問い合わせて、使い切り商品の購入の最新ステータスを取得します
  • このメソッドを呼び出すには、アプリまたは ONE_TIME_PRODUCT_PURCHASED RTDN から取得した purchaseToken が必要です
  • getPurchaseState() を呼び出して、購入ステータスが PURCHASED であることを確認します
  • 購入を承認または消費します

購入を 3 日以内に確認しないと、ユーザーは自動的に払い戻しを受け、GooglePlay は購入を取り消します

Play Billing Library にも購入の確認と消費のためのメソッドがありますが、より安全な実装のためにはバックエンドで処理することを推奨します。

ABOUT ME
saratoga
saratoga
フリーランスエンジニア
仕事にも趣味にも IT を駆使するフリーランスエンジニア。技術的な TIPS や日々の生活の中で深堀りしてみたくなったことを備忘録として残していきます。
記事URLをコピーしました