比起訂閱產品,一次性消費產品的生命週期較簡單,但後端仍必須能適當處理多個狀態和轉換事件。
新的一次性產品購買交易
使用者完成結帳流程後,應用程式可以透過下列其中一種方式查看新購買交易的資訊:
- 設定
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 傳送至您的用戶端。收到 RTDN 後,請按照「在後端處理一次性產品購買交易」所述,處理預購交易。
您應在安全的後端中處理交易相關 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 帳款服務程式庫也提供確認和消耗購買交易的方法,可讓您處理應用程式中的購買交易。但如果可以使用後端進行處理,則建議採用這種更安全的整合方式。