一次性消費生命週期

比起訂閱產品,一次性消費產品的生命週期較簡單,但後端仍必須能適當處理多個狀態和轉換事件。

圖 1. 一次性消費的生命週期狀態和轉換事件。

新的一次性產品購買交易

使用者完成結帳流程後,應用程式有兩種方式可查看新購買交易的資訊:

收到新購買交易後,請使用 getPurchaseState 方法判斷新購買交易的付款狀態。

未完成的交易

一次性產品購買交易處於未完成狀態時,只會產生 RTDN。此類型 RTDN 的 data 欄位格式為 OneTimeProductNotification。如要更新後端購買交易狀態,請使用 OneTimeProductNotification 物件提供的購買憑證呼叫 purchases.products.get 方法。這個方法可提供特定購買憑證的最新購買和消費狀態。

您應在安全的後端中處理交易相關 RTDN。

處理已完成的交易

使用者完成一次性產品購買交易時,Google Play 會傳送 ONE_TIME_PRODUCT_PURCHASED 類型的 OneTimeProductNotification 訊息。收到此 RTDN 後,請按照「在後端處理一次性產品購買交易」所述,處理該購買交易。

處理已取消的交易

未完成的一次性產品購買交易遭到取消時,Google Play 會傳送 ONE_TIME_PRODUCT_CANCELED 類型的 OneTimeProductNotification 訊息。舉例來說,如果使用者未在規定的時間範圍內完成付款,就可能發生這種情況。後端伺服器收到這則通知時,請呼叫 purchases.products.get 方法取得最新購買交易狀態,然後據此更新後端,包括使用者授權。

您只能取消狀態為 Pending 的一次性產品購買交易。如果以 Purchased 狀態購買的一次性產品獲得退款,我們會透過 Voided Purchases API 通知您。

在後端處理一次性產品購買交易

無論您偵測新購買交易的方法是透過 ONE_TIME_PRODUCT_PURCHASED RTDN、應用程式中的 PurchasesUpdatedListener,還是在應用程式內以 onResume() 方法手動擷取購買交易,您都必須處理新的購買交易。建議您在後端處理購買交易,提高安全性。

請按照下列步驟處理新的一次性產品購買交易:

  1. 查詢 purchases.products.get 端點,取得最新的一次性產品購買狀態。如要呼叫這個方法,您需要從應用程式或 ONE_TIME_PRODUCT_PURCHASED RTDN 取得相對應的 purchaseToken
  2. 呼叫 getPurchaseState(),確認購買狀態為 PURCHASED
  3. 驗證購買交易
  4. 將內容存取權授予使用者。如果在建立購買交易時使用 setObfuscatedAccountId() 設定使用者帳戶,就可以運用 purchases.products.get 中的 obfuscatedExternalAccountId 欄位,找出與購買交易相關聯的使用者帳戶。
    1. 如果是非消耗性產品購買交易,請呼叫 purchases.products.acknowledge 方法,確認內容傳遞情形。只要查看 acknowledgementState 欄位,即可驗證購買交易先前未經過確認。
    2. 如果是消耗性產品,請呼叫 purchases.products.consume 方法,將商品標示為已消耗,使用者就能在用完產品之後再次購買。這個方法也能確認購買交易。

Play 帳款服務程式庫也提供確認和消耗購買交易的方法,可讓您處理應用程式中的購買交易。但如果可以使用後端進行處理,則建議採用這種更安全的整合方式。