一次性消費生命週期

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

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

新的一次性產品購買交易

使用者完成結帳流程後,應用程式可以透過下列其中一種方式查看新購買交易的相關資訊:

收到新購買交易後,請使用 getPurchaseState 方法或 purchases.products.get in Play Developer API 來判斷新購買交易的付款狀態。

即時開發人員通知

使用者購買或取消購買一次性產品時,Google Play 會傳送 OneTimeProductNotification 訊息。如要更新後端購買交易狀態,請使用 OneTimeProductNotification 物件提供的購買憑證呼叫 purchases.products.get 方法。這個方法可提供特定購買憑證的最新購買和消耗狀態。

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

處理已完成的交易

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

處理已取消的交易

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

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