比起訂閱產品,一次性消費產品的生命週期較簡單,但後端仍必須能適當處理多個狀態和轉換事件。
新的一次性產品購買交易
使用者完成結帳流程後,應用程式可以透過下列其中一種方式查看新購買交易的相關資訊:
- 設定
Real-time developer notifications
並啟用Get all notifications for subscriptions and one-time products
,以便接收購買交易狀態的最新資訊。 - 實作
BillingClient
的PurchasesUpdatedListener
介面,即可自動接收購買交易更新。 - 呼叫
BillingClient.queryPurchasesAsync()
方法。
收到新購買交易後,請使用 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()
方法手動擷取購買交易,您都必須處理新的購買交易。建議您在後端處理購買交易,提高安全性。
請按照下列步驟處理新的一次性產品購買交易:
- 查詢
purchases.products.get
端點,取得最新的一次性產品購買狀態。如要呼叫這個方法,您需要從應用程式或ONE_TIME_PRODUCT_PURCHASED
RTDN 取得相對應的purchaseToken
。 - 呼叫
getPurchaseState()
,確認購買狀態為PURCHASED
。 - 驗證購買交易。
- 將內容存取權授予使用者。如果在建立購買交易時使用
setObfuscatedAccountId()
設定使用者帳戶,就可以運用purchases.products.get
中的obfuscatedExternalAccountId
欄位,找出與購買交易相關聯的使用者帳戶。- 如果是非消耗性產品購買交易,請呼叫
purchases.products.acknowledge
方法,確認內容傳遞情形。只要查看acknowledgementState
欄位,即可驗證購買交易先前未經過確認。 - 如果是消耗性產品,請呼叫
purchases.products.consume
方法,將商品標示為已消耗,使用者就能在用完產品之後再次購買。這個方法也能確認購買交易。
- 如果是非消耗性產品購買交易,請呼叫
Play 帳款服務程式庫也提供確認和消耗購買交易的方法,可讓您處理應用程式中的購買交易。但如果可以使用後端進行處理,則建議採用這種更安全的整合方式。