Các sản phẩm mua một lần có vòng đời đơn giản hơn các sản phẩm thuê bao, nhưng phần phụ trợ của bạn vẫn cần có một số trạng thái và sự kiện chuyển đổi để có thể xử lý đúng cách.
Giao dịch mới mua sản phẩm tính phí một lần
Sau khi người dùng hoàn tất quy trình thanh toán, ứng dụng của bạn có thể xem thông tin về giao dịch mua mới theo một trong những cách sau:
- Thiết lập
Real-time developer notifications
và bậtGet all notifications for subscriptions and one-time products
để nhận thông tin cập nhật về trạng thái của giao dịch mua. - Triển khai giao diện
PurchasesUpdatedListener
từBillingClient
để tự động nhận thông tin cập nhật về giao dịch mua. - Gọi phương thức
BillingClient.queryPurchasesAsync()
.
Sau khi nhận được giao dịch mua mới, hãy dùng phương thức getPurchaseState
hoặc purchases.products.get in Play Developer API
để xác định trạng thái thanh toán của giao dịch mua đó.
Thông báo theo thời gian thực dành cho nhà phát triển
Khi người dùng mua hoặc huỷ giao dịch mua sản phẩm tính phí một lần, Google Play sẽ gửi thông báo OneTimeProductNotification
. Để cập nhật trạng thái giao dịch mua trong phần phụ trợ, hãy sử dụng mã thông báo giao dịch mua được cung cấp trong đối tượng OneTimeProductNotification
để gọi phương thức purchases.products.get
. Phương thức này cung cấp trạng thái mua và tiêu thụ mới nhất dựa trên mã thông báo giao dịch mua.
Khi đơn đặt hàng trước được thực hiện và trạng thái mua hàng thay đổi thành MUA, một RTDN sẽ được gửi đến ứng dụng của bạn. Sau khi nhận được RTDN, hãy xử lý giao dịch mua hàng đặt trước như mô tả trong phần Xử lý giao dịch mua sản phẩm tính phí một lần trong phần phụ trợ.
Bạn nên xử lý các RTDN liên quan đến giao dịch trong phần phụ trợ bảo mật của mình.
Xử lý giao dịch đã hoàn tất
Khi người dùng hoàn tất giao dịch mua sản phẩm tính phí một lần, Google Play sẽ gửi thông báo OneTimeProductNotification
thuộc loại ONE_TIME_PRODUCT_PURCHASED
.
Khi bạn nhận được RTDN này, hãy xử lý giao dịch mua như mô tả trong phần Xử lý giao dịch mua sản phẩm tính phí một lần trong phần phụ trợ.
Xử lý giao dịch đã huỷ
Khi một giao dịch mua sản phẩm tính phí một lần bị huỷ, Google Play sẽ gửi thông báo OneTimeProductNotification
thuộc loại ONE_TIME_PRODUCT_CANCELED
nếu bạn đã định cấu hình để nhận thông báo theo thời gian thực dành cho nhà phát triển.
Ví dụ: điều này có thể xảy ra nếu người dùng không hoàn tất quá trình thanh toán trong khoảng thời gian bắt buộc hoặc nếu nhà phát triển hoặc khách hàng yêu cầu thu hồi giao dịch mua. Khi máy chủ phụ trợ của bạn nhận được thông báo này, hãy gọi phương thức purchases.products.get
để nhận trạng thái mua hàng mới nhất, sau đó cập nhật phần phụ trợ của bạn sao cho phù hợp, bao gồm cả quyền của người dùng.
Nếu một giao dịch mua sản phẩm tính phí một lần ở trạng thái Purchased
được hoàn tiền, thì bạn cũng sẽ nhận được thông báo qua Voided Purchases API (API Giao dịch mua vô hiệu).
Xử lý các giao dịch mua sản phẩm tính phí một lần trong phần phụ trợ
Dù bạn phát hiện một giao dịch mua mới qua RTDN ONE_TIME_PRODUCT_PURCHASED
hay đã được thông báo trong ứng dụng thông qua PurchasesUpdatedListener
hoặc tìm nạp thủ công giao dịch mua trong phương thức onResume()
của ứng dụng, bạn đều phải xử lý giao dịch mua mới. Bạn nên xử lý quy trình mua hàng trong phần phụ trợ để tăng tính bảo mật.
Thực hiện theo các bước sau để xử lý giao dịch mua hàng một lần mới:
- Truy vấn điểm cuối
purchases.products.get
để nhận trạng thái mới nhất của giao dịch mua sản phẩm tính phí một lần. Để gọi phương thức này cho giao dịch mua, bạn cần cópurchaseToken
tương ứng từ ứng dụng của mình hoặc từ RTDNONE_TIME_PRODUCT_PURCHASED
. - Gọi
getPurchaseState()
và đảm bảo trạng thái mua làPURCHASED
. - Xác minh giao dịch mua.
- Cấp cho người dùng quyền truy cập vào nội dung. Tài khoản người dùng liên kết với giao dịch mua có thể được xác định bằng trường
obfuscatedExternalAccountId
trongpurchases.products.get
(nếu bạn đã thiết lập trường này bằngsetObfuscatedAccountId()
khi giao dịch mua được thực hiện).- Đối với các giao dịch mua sản phẩm không phải sản phẩm tiêu hao, hãy xác nhận việc phân phối nội dung bằng cách gọi phương thức
purchases.products.acknowledge
. Hãy kiểm tra trườngacknowledgementState
để đảm bảo giao dịch mua này chưa được xác nhận trước đó. - Nếu sản phẩm là sản phẩm tiêu hao, hãy đánh dấu mặt hàng là đã sử dụng bằng cách gọi phương thức
purchases.products.consume
để người dùng có thể mua lại mặt hàng đó sau khi tiêu thụ. Phương thức này cũng xác nhận giao dịch mua.
- Đối với các giao dịch mua sản phẩm không phải sản phẩm tiêu hao, hãy xác nhận việc phân phối nội dung bằng cách gọi phương thức
Thư viện Play Billing cũng có các phương thức xác nhận và tiêu thụ giao dịch mua, cho phép bạn xử lý các giao dịch mua hàng trong ứng dụng của mình. Tuy nhiên, bạn nên xử lý trong phần phụ trợ (nếu có) để triển khai một cách an toàn hơn.