Chủ đề này bao gồm các ghi chú phát hành cho Thư viện Google Play Billing.
Bản phát hành Thư viện Google Play Billing phiên bản 7.0.0 (14/05/2024)
Phiên bản 7.0.0 của Thư viện Google Play Billing và các phần mở rộng Kotlin hiện đã có sẵn có.
Tóm tắt các thay đổi
Thêm các API để hỗ trợ gói thuê bao trả góp.
- Đã thêm
ProductDetails.InstallmentPlanDetails
đối với gói cơ bản trả góp mà người dùng đủ điều kiện mua. API này giúp ứng dụng của bạn xác định gói trả góp và chế độ thiết lập cam kết của gói đó để cung cấp thông tin liên quan cho người dùng. Để tìm hiểu thêm, hãy xem hướng dẫn trả góp gói thuê bao.
- Đã thêm
Đã thêm
PendingPurchasesParams
vàBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
để thay thếBillingClient.Builder.enablePendingPurchases()
, không được dùng nữa trong bản phát hành này.enablePendingPurchases()
không dùng nữa có chức năng tương đương vớienablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
Thêm các API để hỗ trợ các giao dịch đang chờ xử lý cho gói trả trước thuê bao:
- Sử dụng
PendingPurchasesParams.Builder.enablePrepaidPlans()
cùng vớiBillingClient.Builder.enablePendingPurchases(PendingPurchaseParams)
để cho phép các giao dịch đang chờ xử lý cho gói thuê bao trả trước. Khi thêm hãy đảm bảo rằng ứng dụng của bạn cũng quản lý gói thuê bao một cách chính xác vòng đời. Để tìm hiểu thêm, hãy xem hướng dẫn mua hàng đang chờ xử lý. - Đã thêm
Purchase.PendingPurchaseUpdate
vàPurchase.getPendingPurchaseUpdate()
để truy xuất giao dịch nạp tiền đang chờ xử lý hoặc nâng cấp hoặc hạ cấp thành giao dịch nạp tiền hiện tại của bạn.
- Sử dụng
Đã xoá
BillingClient.Builder.enableAlternativeBilling()
,AlternativeBillingListener
, vàAlternativeChoiceDetails
.- Nhà phát triển nên dùng
BillingClient.Builder.enableUserChoiceBilling()
vớiUserChoiceBillingListener
vàUserChoiceDetails
trong lệnh gọi lại trình nghe.
- Nhà phát triển nên dùng
Đã xoá
BillingFlowParams.ProrationMode
,BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
, vàBillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
.- Nhà phát triển nên dùng
BillingFlowParams.SubscriptionUpdateParams.ReplacementMode
vớiBillingFlowParams.SubscriptionUpdateParams.Builder#setSubscriptionReplacementMode(int)
thay thế. BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceProrationMode()
.BillingFlowParams.SubscriptionUpdateParams.Builder.setReplaceSkusProrationMode()
.
- Nhà phát triển nên dùng
Đã xoá
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldSkuPurchaseToken()
.- Nhà phát triển nên dùng
BillingFlowParams.SubscriptionUpdateParams.Builder#setOldPurchaseToken(java.lang.String)
thay thế.
- Nhà phát triển nên dùng
BillingClient.queryPurchaseHistoryAsync()
không được dùng nữa và sẽ bị xoá trong bản phát hành sau này. Nhà phát triển nên hãy sử dụng các giải pháp thay thế sau:- Giao dịch mua đã xác nhận và đang chờ xử lý: Sử dụng
BillingClient.queryPurchasesAsync()
để tìm nạp các giao dịch mua đang hoạt động. - Giao dịch mua hàng đã tiêu dùng: Nhà phát triển nên theo dõi lượng giao dịch mua hàng đã tiêu thụ máy chủ của riêng họ.
- Giao dịch mua đã huỷ: Hãy sử dụng giao dịch mua vô hiệu API dành cho nhà phát triển.
- Để biết thêm thông tin, hãy xem Nhật ký mua cụm từ tìm kiếm
- Giao dịch mua đã xác nhận và đang chờ xử lý: Sử dụng
BillingFlowParams.ProductDetailsParams.setOfferToken()
hiện sẽ gửi một trường hợp ngoại lệ khi nhà phát triển chỉ định mộtofferToken
trống.Cập nhật
minSdkVersion
thành 21 vàtargetSdkVersion
thành 34.
Bản phát hành Thư viện Google Play Billing phiên bản 6.2.1 (16/04/2024)
Phiên bản 6.2.1 của Thư viện Google Play Billing và các phần mở rộng Kotlin hiện đã có sẵn có.
Tóm tắt các thay đổi
- Đã khắc phục lỗi trong
BillingClient.showAlternativeBillingOnlyInformationDialog()
, trong đóAlternativeBillingOnlyInformationDialogListener
có thể không được gọi trong một số trường hợp nhất định khi hộp thoại hoàn tất.
Bản phát hành Thư viện Google Play Billing phiên bản 6.2.0 (06/03/2024)
Phiên bản 6.2.0 của Thư viện Google Play Billing và các phần mở rộng Kotlin hiện đã có sẵn có.
Tóm tắt các thay đổi
- Thêm các API để hỗ trợ ưu đãi bên ngoài
- Đã thêm
BillingClient.Builder.enableExternalOffer()
để tạo điều kiện chào bán bên ngoài. - Đã thêm
BillingClient.isExternalOfferAvailableAsync()
để kiểm tra khả năng cung cấp chức năng chào bán bên ngoài. - Đã thêm
BillingClient.showExternalOfferInformationDialog()
để hiển thị hộp thoại thông tin cho người dùng trước khi đưa họ ra bên ngoài ứng dụng. - Thêm
BillingClient.createExternalOfferReportingDetailsAsync()
để tạo một tải trọng cần thiết nhằm báo cáo các giao dịch được thực hiện thông qua ưu đãi bên ngoài.
- Đã thêm
Bản phát hành Thư viện Google Play Billing phiên bản 6.1.0 (14/11/2023)
Hiện đã có phiên bản 6.1.0 của Thư viện Google Play Billing và các phần mở rộng Kotlin.
Tóm tắt các thay đổi
- Thêm các API để hỗ trợ riêng cho hệ thống thanh toán thay thế (tức là không do người dùng chọn)
- Thêm
BillingClient.Builder.enableAlternativeBillingOnly()
để bật tính năng chỉ cung cấp hệ thống thanh toán thay thế. - Thêm
BillingClient.isAlternativeBillingOnlyAvailableAsync()
để kiểm tra xem có cung cấp được hệ thống thanh toán thay thế hay không. - Thêm
BillingClient.showAlternativeBillingOnlyInformationDialog()
để hiện hộp thoại thông tin cho người dùng biết trong trường hợp chỉ sử dụng hệ thống thanh toán thay thế. - Thêm
BillingClient.createAlternativeBillingOnlyReportingDetailsAsync()
để tạo tải trọng dữ liệu cần thiết nhằm chỉ báo cáo các giao dịch được thực hiện thông qua hệ thống thanh toán thay thế.
- Thêm
- Cập nhật API Phương thức thanh toán do người dùng chọn
- Thêm
UserChoiceBillingListener
để thay thế AlternativeBillingListener (được đánh dấu là không dùng nữa). - Thêm
UserChoiceDetails
để thay thếAlternativeChoiceDetails
(được đánh dấu là không dùng nữa). - Thêm
BillingClient.Builder.enableUserChoiceBilling()
để thay thếBillingClient.Builder.enableAlternativeBilling()
(được đánh dấu là không dùng nữa).
- Thêm
- Thêm
BillingClient.getBillingConfigAsync()
để truy xuất quốc gia trên Google Play.
Bản phát hành Thư viện Google Play Billing phiên bản 6.0.1 (22/06/2023)
Hiện đã có phiên bản 6.0.1 của Thư viện Google Play Billing và các phần mở rộng Kotlin.
Tóm tắt các thay đổi
Cập nhật Thư viện Play Billing để tương thích với Android 14.
Bản phát hành Thư viện Google Play Billing phiên bản 6.0 (10/5/2023)
Hiện đã có phiên bản 6.0.0 của Thư viện Google Play Billing và các phần mở rộng Kotlin.
Tóm tắt các thay đổi
Thêm enum
ReplacementMode
mới thay choProrationMode
.Xin lưu ý rằng
ProrationMode
vẫn hoạt động vì lý do tương thích ngược.Xoá mã đơn hàng đối với các giao dịch mua
PENDING
.Trước đây, mã đơn hàng sẽ luôn được tạo ngay cả khi giao dịch mua đang chờ xử lý. Kể từ phiên bản 6.0.0, mã đơn hàng sẽ không được tạo cho các giao dịch mua đang chờ xử lý. Đối với các giao dịch mua hàng này, mã đơn hàng sẽ được điền sau khi giao dịch mua chuyển sang trạng thái
PURCHASED
.Xoá các phương thức
queryPurchases
vàlaunchPriceConfirmationFlow
.Các phương thức
queryPurchases
vàlaunchPriceConfirmationFlow
trước đây được đánh dấu là không dùng nữa, giờ đã bị xoá trong Thư viện Play Billing 6.0.0. Nhà phát triển nên dùngqueryPurchasesAsync
thay vìqueryPurchases
. Để biết các lựa chọn thay thếlaunchPriceConfirmationFlow
, hãy xem bài viết Các thay đổi về giá.Thêm mã phản hồi mới đối với lỗi mạng.
NETWORK_ERROR
là mã phản hồi mới cho lỗi mạng, được thêm kể từ phiên bản PBL 6.0.0. Mã này được trả về khi xảy ra lỗi do sự cố kết nối mạng. Trước đây, các lỗi kết nối mạng được báo cáo làSERVICE_UNAVAILABLE
.Cập nhật
SERVICE_UNAVAILABLE
vàSERVICE_TIMEOUT
.Kể từ PBL phiên bản 6.0.0, các lỗi do hết thời gian chờ trong quá trình xử lý sẽ được trả về là
SERVICE_UNAVAILABLE
thay vìSERVICE_TIMEOUT
như hiện tại.Hành vi này không thay đổi trong các phiên bản PBL trước đây.
Xoá
SERVICE_TIMEOUT
.Kể từ phiên bản PBL 6.0.0,
SERVICE_TIMEOUT
sẽ không được trả về nữa. Các phiên bản PBL trước đó sẽ vẫn trả về mã này.Thêm tính năng ghi nhật ký bổ sung.
Bản phát hành Thư viện Play Billing 6 có tính năng ghi nhật ký bổ sung, giúp cung cấp thông tin chi tiết về hoạt động sử dụng API (chẳng hạn như thành công và không thành công) cũng như các vấn đề về kết nối dịch vụ. Thông tin này sẽ dùng để cải thiện hiệu suất của Thư viện Play Billing và hỗ trợ tốt hơn cho các lỗi.
Bản phát hành Thư viện Google Play Billing phiên bản 5.2.1 (22/06/2023)
Hiện đã có phiên bản 5.2.1 của Thư viện Google Play Billing và các phần mở rộng Kotlin.
Tóm tắt các thay đổi
Cập nhật Thư viện Play Billing để tương thích với Android 14.
Bản phát hành Thư viện Google Play Billing phiên bản 5.2 (6/4/2023)
Nay có phiên bản 5.2.0 của Thư viện Google Play Billing và các phần mở rộng Kotlin.
Tóm tắt các thay đổi
- Thêm các lớp để hỗ trợ hệ thống thanh toán thay thế trên thiết bị di động/máy tính bảng cho người dùng ở Hàn Quốc:
- Thêm phương thức
BillingFlowParams.SubscriptionUpdateParams.Builder.setOriginalExternalTransactionId()
để chỉ định mã giao dịch bên ngoài của gói thuê bao khởi nguồn. - Thêm phương thức
BillingClient.Builder.enableAlternativeBilling()
để cho phép người dùng ở Hàn Quốc chọn hệ thống thanh toán thay thế.
Bản phát hành Thư viện Google Play Billing phiên bản 5.1 (31/10/2022)
Hiện đã có phiên bản 5.1.0 của Thư viện Google Play Billing và các phần mở rộng Kotlin.
Phiên bản này có các nội dung thay đổi sau.
Tóm tắt các thay đổi
- Thêm phương thức
ProductDetails.SubscriptionOfferDetails.getOfferId()
để truy xuất mã ưu đãi. - Thêm phương thức
ProductDetails.SubscriptionOfferDetails.getBasePlanId()
để truy xuất mã gói cơ bản. - Cập nhật
targetSdkVersion
thành 31.
Bản phát hành Thư viện Google Play Billing phiên bản 5.0 (11/05/2022)
Hiện đã có phiên bản 5.0.0 của Thư viện Google Play Billing và các phần mở rộng Kotlin.
Phiên bản này có các nội dung thay đổi sau.
Tóm tắt các thay đổi
- Giới thiệu mô hình mới cho các gói thuê bao, bao gồm cả các thực thể mới cho phép bạn tạo nhiều ưu đãi cho một sản phẩm thuê bao duy nhất. Để biết thêm thông tin, vui lòng xem hướng dẫn di chuyển.
- Đã thêm
BillingClient.queryProductDetailsAsync()
để thay thếBillingClient.querySkuDetailsAsync()
. - Thêm phương thức
setIsOfferPersonalized()
cho các yêu cầu về thông tin công bố giá được cá nhân hoá ở Liên minh Châu Âu. Để tìm hiểu thêm về cách sử dụng phương thức này, hãy xem bài viết Hiển thị giá được cá nhân hoá. - Xoá
queryPurchases()
, vốn đã không dùng nữa và được thay thế bằng queryPurchasesAsync kể từ phiên bản Thư viện Google Play Billing 4.0.0. - Ngừng sử dụng và xoá
launchPriceChangeFlow
trong bản phát hành sau này. Để tìm hiểu thêm về các lựa chọn thay thế, hãy xem Khởi chạy quy trình xác nhận thay đổi giá. - Xoá
setVrPurchaseFlow()
, trước đây được dùng để thực thể hoá quy trình mua. Trong các phiên bản trước, phương thức này chuyển hướng người dùng để hoàn tất giao dịch mua trên thiết bị Android của họ. Sau khi bạn xoá phương thức này, người dùng sẽ hoàn tất giao dịch mua qua quy trình mua chuẩn.
Bản phát hành Thư viện Google Play Billing phiên bản 4.1 (23/02/2022)
Hiện đã có phiên bản 4.1.0 của Thư viện Google Play Billing và các phần mở rộng Kotlin.
Phiên bản này có các nội dung thay đổi sau.
Tóm tắt các thay đổi
- Thêm
BillingClient.showInAppMessages()
để hỗ trợ xử lý các trường hợp từ chối thanh toán gói thuê bao. Để tìm hiểu thêm về cách sử dụng tính năng gửi thông báo trong ứng dụng nhằm xử lý các trường hợp từ chối thanh toán gói thuê bao, hãy xem bài viết Xử lý khoản thanh toán bị từ chối.
Bản phát hành Thư viện Google Play Billing phiên bản 4.0 (18/05/2021)
Hiện đã có phiên bản 4.0.0 của Thư viện Google Play Billing và các phần mở rộng Kotlin.
Tóm tắt các thay đổi
Thêm
BillingClient.queryPurchasesAsync()
để thay thếBillingClient.queryPurchases()
sẽ bị xoá trong bản phát hành sau này.Thêm chế độ thay thế gói đăng ký mới
IMMEDIATE_AND_CHARGE_FULL_PRICE
.Thêm phương thức
BillingClient.getConnectionState()
để truy xuất trạng thái kết nối của Thư viện Play Billing.Cập nhật Javadoc và phương pháp triển khai để cho biết một phương thức có thể được gọi trên luồng nào, và kết quả luồng nào được đăng.
Thêm
BillingFlowParams.Builder.setSubscriptionUpdateParams()
làm phương thức mới để bắt đầu quá trình cập nhật gói đăng ký. Phương thức này sẽ thay thếBillingFlowParams#getReplaceSkusProrationMode
,BillingFlowParams#getOldSkuPurchaseToken
,BillingFlowParams#getOldSku
,BillingFlowParams.Builder#setReplaceSkusProrationMode
,BillingFlowParams.Builder#setOldSku
(đã bị xoá).Đã thêm
Purchase.getQuantity()
vàPurchaseHistoryRecord.getQuantity()
.Đã thêm
Purchase#getSkus()
vàPurchaseHistoryRecord#getSkus()
. Các phương thức này thay thế choPurchase#getSku
vàPurchaseHistoryRecord#getSku
(đã bị xoá).Xoá
BillingFlowParams#getSku
,BillingFlowParams#getSkuDetails
vàBillingFlowParams#getSkuType
.
Thư viện Google Play Billing phiên bản 3.0.3 (12/03/2021)
Hiện đã có phiên bản 3.0.3 của Thư viện Google Play Billing, phần mở rộng Kotlin và trình bổ trợ Unity.
Các bản sửa lỗi Java và Kotlin
- Khắc phục tình trạng rò rỉ bộ nhớ khi gọi hàm
endConnection()
. - Khắc phục vấn đề khi Thư viện Google Play Billing được các ứng dụng dùng chế độ khởi chạy đơn nhiệm sử dụng. Kích hoạt một lệnh gọi lại
onPurchasesUpdated()
khi tiếp tục chạy một ứng dụng từ trình chạy Android và hộp thoại thanh toán đã hiển thị trước khi bị tạm ngưng.
Các bản sửa lỗi Unity
- Cập nhật lên phiên bản Java 3.0.3 để khắc phục sự cố rò rỉ bộ nhớ và khắc phục sự cố ngăn giao dịch mua khi ứng dụng được tiếp tục chạy từ trình chạy Android và hộp thoại thanh toán đã hiển thị trước khi bị tạm ngưng.
Bản phát hành Thư viện Google Play Billing phiên bản 3.0.2 (24/11/2020)
Hiện đã có phiên bản 3.0.2 của Thư viện Google Play Billing và phần mở rộng Kotlin.
Sửa lỗi
- Đã khắc phục lỗi trong phần mở rộng Kotlin, trong đó coroutine gặp sự cố với lỗi "Already resumed" ("Đã tiếp tục").
- Đã khắc phục các tệp đối chiếu chưa được giải quyết khi sử dụng phần mở rộng Kotlin với thư viện kotlinx.coroutines phiên bản 1.4+.
Bản phát hành Thư viện Google Play Billing phiên bản 3.0.1 (30/09/2020)
Hiện đã có phiên bản 3.0.1 của Thư viện Google Play Billing và phần mở rộng Kotlin.
Sửa lỗi
- Đã khắc phục lỗi
PurchasesUpdatedListener
có thể không được gọi với kết quả giao dịch mua nếu ứng dụng bị vô hiệu hoá và khôi phục trong quy trình thanh toán.
Bản phát hành Thư viện Google Play Billing phiên bản 3.0 (08/06/2020)
Hiện đã có phiên bản 3.0.0 của Thư viện Google Play Billing, phần mở rộng Kotlin và trình bổ trợ Unity.
Tóm tắt các thay đổi
- Đã ngừng hỗ trợ SKU thưởng.
- Đã xoá các tham số
ChildDirected
vàUnderAgeOfConsent
. - Đã xoá các phương thức trọng tải mà nhà phát triển không dùng nữa.
- Đã xoá các phương thức
BillingFlowParams.setAccountId()
vàBillingFlowParams.setDeveloperId()
(không dùng nữa). - Đã xoá các phương thức
BillingFlowParams.setOldSkus(String oldSku)
vàBillingFlowParams.addOldSku(String oldSku)
(không dùng nữa). - Thêm chú thích về tính chất rỗng.
Sửa lỗi
- Hàm
SkuDetails.getIntroductoryPriceCycles()
hiện trả vềint
thay vìString
. - Đã khắc phục lỗi coi luồng thanh toán là có các tham số bổ sung ngay cả khi không có tham số bổ sung nào được thiết lập.
Bản phát hành Thư viện Google Play Billing phiên bản 2.2.1 (20/5/2020)
Đã có bản phát hành Thư viện Google Play Billing phiên bản 2.2.1.
Sửa lỗi
- Đã cập nhật phiên bản mặc định của Thư viện Play Billing cho Java mà phần mở rộng Kotlin phụ thuộc vào.
Bản phát hành Thư viện Google Play Billing phiên bản 2.2.0 và hỗ trợ Unity (23/03/2020)
Phiên bản 2.2.0 của Google Play Billing cung cấp chức năng giúp nhà phát triển đảm bảo giao dịch mua được chỉ định cho đúng người dùng. Những nội dung thay đổi này giúp lược bỏ nhu cầu xây dựng các giải pháp tuỳ chỉnh dựa trên trọng tải của nhà phát triển. Trong bản cập nhật này, chúng tôi đã ngừng sử dụng và sẽ xoá chức năng trọng tải dành cho nhà phát triển trong bản phát hành sau này. Để biết thêm thông tin, bao gồm các phương án thay thế được đề xuất, hãy xem phần Trọng tải của nhà phát triển.
Thư viện Google Play Billing 2 dành cho Unity
Ngoài các phiên bản Java và Kotlin hiện tại của Thư viện Google Play Billing 2, chúng tôi còn phát hành một phiên bản thư viện để sử dụng cùng Unity. Các nhà phát triển trò chơi đang sử dụng API mua hàng trong ứng dụng Unity có thể nâng cấp ngay để tận dụng tất cả tính năng của Thư viện Google Play Billing 2 và nâng cấp dễ dàng hơn lên các phiên bản sau của Thư viện Google Play Billing.
Để tìm hiểu thêm, hãy xem bài viết Sử dụng Google Play Billing với Unity.
Tóm tắt các thay đổi
- Thư viện Google Play Billing Java
- Trong
AcknowledgePurchaseParams
, ngừng sử dụng các phương thứcsetDeveloperPayload()
vàgetDeveloperPayload()
. - Trong
ConsumeParams
, ngừng sử dụng các phương thứcsetDeveloperPayload()
vàgetDeveloperPayload()
. - Trong
BillingFlowParams
, đổi tên hàmsetAccountId()
thành hàmsetObfuscatedAccountId()
và dẫn chứng tài liệu về việc hạn chế độ dài 64 ký tự cũng như giới hạn không cho phép Thông tin nhận dạng cá nhân (PII) trong trường này. HàmsetAccountId()
đã bị đánh dấu là không dùng nữa và sẽ bị xoá trong phiên bản thư viện sau này. - Trong
BillingFlowParams
, đã thêm hàmsetObfuscatedProfileId()
hoạt động tương tự như hàmsetObfuscatedAccountId()
. Để biết thêm thông tin, hãy xem phần Các bản cập nhật trọng tải và phương án thay thế dành cho nhà phát triển. - Trong
Purchase
, đã thêm phương thứcgetAccountIdentifiers()
để trả về giá trị nhận dạng tài khoản được làm rối trongBillingFlowParams
. - Trong
BillingClient
, phương thứcloadRewardedSku()
đã được đánh dấu là không dùng nữa trong khuôn khổ các SKU thưởng không dùng nữa. Bạn có thể tìm thêm thông tin về việc ngừng sử dụng tại Trung tâm trợ giúp Play Console.
- Trong
Bản phát hành Thư viện Google Play Billing 2.1.0 và phần mở rộng Kotlin 2.1.0 (10/12/2019)
Phiên bản 2.1.0 của thư viện Google Play Billing và phần mở rộng Kotlin mới đã có sẵn. Phần mở rộng Kotlin của Thư viện Play Billing cung cấp các giải pháp thay thế API tương thích cho việc tiêu thụ Kotlin, với tính năng coroutine và kiểm tra biến null an toàn tốt hơn. Để xem ví dụ về mã, hãy xem phần Sử dụng Thư viện Google Play Billing.
Phiên bản này có các nội dung thay đổi sau.
Tóm tắt các thay đổi
- Trong
BillingFlowParams
, ngừng sử dụng hàmsetOldSku(String oldSku)
và thay thế bằng hàmsetOldSku(String oldSku, String purchaseToken)
, để phân biệt khi nhiều tài khoản trên thiết bị cùng sở hữu một sku.
Bản phát hành Thư viện Google Play Billing phiên bản 2.0.3 (05/08/2019)
Thư viện Google Play Billing phiên bản 2.0.3 hiện đã có.
Sửa lỗi
- Đã khắc phục lỗi trong đó hàm
querySkuDetailsAsync()
đôi khi gặp sự cố với mãDEVELOPER_ERROR
thay vì trả về một kết quả thành công.
Bản phát hành Thư viện Google Play Billing phiên bản 2.0.2 (08/07/2019)
Thư viện Google Play Billing phiên bản 2.0.2 hiện đã có. Bản phát hành này chứa nội dung cập nhật cho tài liệu tham khảo và không thay đổi chức năng của thư viện.
Bản phát hành Thư viện Google Play Billing phiên bản 2.0.1 (06/06/2019)
Thư viện Google Play Billing phiên bản 2.0.1 hiện đã có. Phiên bản này có nội dung thay đổi sau.
Sửa lỗi
- Đã khắc phục lỗi trả về thông báo gỡ lỗi là
null
trong một số trường hợp. - Đã khắc phục khả năng xảy ra sự cố rò rỉ bộ nhớ.
Bản phát hành Thư viện Google Play Billing phiên bản 2.0 (07/05/2019)
Thư viện Google Play Billing phiên bản 2.0 hiện đã có. Phiên bản này có nội dung thay đổi sau.
Giao dịch mua phải được xác nhận trong vòng 3 ngày
Google Play hỗ trợ mua sản phẩm từ bên trong ứng dụng (in-app) hoặc
bên ngoài ứng dụng (out-of-app). Để Google Play có thể đảm bảo trải nghiệm mua hàng nhất quán, bất kể người dùng mua sản phẩm của bạn ở đâu, bạn phải xác nhận tất cả giao dịch mua nhận được qua Thư viện Google Play Billing trong thời gian sớm nhất có thể sau khi cấp quyền cho người dùng. Nếu
bạn không xác nhận giao dịch mua trong vòng 3 ngày, người dùng sẽ
tự động được hoàn tiền và Google Play sẽ thu hồi giao dịch mua đó. Đối với
các giao dịch đang chờ xử lý (mới trong phiên bản 2.0), thời hạn 3 ngày
bắt đầu khi giao dịch mua chuyển sang trạng thái PURCHASED
và không áp dụng
khi giao dịch mua đang ở trạng thái PENDING
.
Đối với các gói thuê bao, bạn phải xác nhận bất kỳ giao dịch mua nào có một mã thông báo giao dịch mua mới. Điều này có nghĩa là cần xác nhận tất cả giao dịch mua ban đầu, thay đổi gói và đăng ký lại, nhưng bạn không cần xác nhận các lần gia hạn tiếp theo. Để xác định xem một giao dịch mua có cần xác nhận hay không, bạn có thể kiểm tra trường xác nhận trong giao dịch mua.
Đối tượng Purchase
hiện bao gồm một phương thức
isAcknowledged()
cho biết liệu giao dịch mua đã được xác nhận hay chưa. Ngoài ra, API Nhà phát triển Google Play bao gồm các giá trị boolean xác nhận cho cả
Purchases.products
và Purchases.subscriptions
.
Trước khi xác nhận giao dịch mua, hãy đảm bảo sử dụng các phương thức này để xác định xem
giao dịch mua đã được xác nhận hay chưa.
Bạn có thể xác nhận giao dịch mua bằng một trong những phương thức sau:
- Đối với các sản phẩm tiêu dùng, hãy sử dụng hàm
consumeAsync()
trong API ứng dụng. - Đối với các sản phẩm không phải hàng tiêu dùng, hãy sử dụng hàm
acknowledgePurchase()
trong API ứng dụng. - Một phương thức
acknowledge()
mới cũng có trong API máy chủ.
BillingFlowParams.setSku() đã bị xoá
Phương thức BillingFlowParams#setSku()
không còn được dùng trước đây đã bị xoá
trong bản phát hành này. Trước khi hiển thị sản phẩm trong một quy trình mua, giờ đây bạn phải gọi hàm BillingClient.querySkuDetailsAsync()
,
truyền kết quả của đối tượng
SkuDetails
tới hàm
BillingFlowParams.Builder.setSkuDetails()
.
Để xem ví dụ về mã, hãy xem phần Sử dụng Thư viện Google Play Billing.
Trọng tải nhà phát triển được hỗ trợ
Thư viện Google Play Billing phiên bản 2.0 bổ sung tính năng hỗ trợ cho trọng tải nhà phát triển – có thể đính kèm các chuỗi tuỳ ý với các giao dịch mua. Bạn có thể đính kèm thông số trọng tải dành cho nhà phát triển vào giao dịch mua, tuy nhiên chỉ khi giao dịch mua được xác nhận hoặc tiêu thụ. Tài liệu này không giống với trọng tải dành cho nhà phát triển trong AIDL, trong đó, trọng tải có thể được chỉ định khi khởi chạy quy trình mua. Đó là bởi giờ đây bạn có thể bắt đầu mua hàng từ bên ngoài ứng dụng, sự thay đổi này đảm bảo rằng bạn luôn có cơ hội thêm trọng tải vào giao dịch mua.
Để truy cập vào trọng tải trong thư viện mới, các đối tượng Purchase
hiện chứa một phương thức getDeveloperPayload()
.
Các ưu đãi nhất quán
Khi bạn cung cấp SKU chiết khấu, Google Play hiện sẽ trả về giá gốc của SKU để bạn có thể cho người dùng thấy rằng họ đang được chiết khấu.
SkuDetails
chứa hai
phương thức mới để truy xuất giá SKU ban đầu:
getOriginalPriceAmountMicros()
– trả về giá gốc chưa được định dạng của SKU trước khi chiết khấu.getOriginalPrice()
– trả về giá gốc cùng với định dạng đơn vị tiền tệ khác.
Giao dịch đang chờ xử lý
Với thư viện Google Play Billing phiên bản 2.0, bạn phải hỗ trợ giao dịch mua cần thực hiện thêm thao tác để cấp quyền. Ví dụ: người dùng có thể chọn mua sản phẩm trong ứng dụng tại cửa hàng thực tế bằng cách sử dụng tiền mặt. Điều này có nghĩa là giao dịch được hoàn tất bên ngoài ứng dụng. Trong trường hợp này, bạn chỉ nên cấp quyền sau khi người dùng đã hoàn tất giao dịch.
Để bật các giao dịch mua đang chờ xử lý, hãy gọi hàm
enablePendingPurchases()
trong quá trình khởi chạy ứng dụng.
Sử dụng Purchase.getPurchaseState()
để xác định trạng thái mua hàng là PURCHASED
hay PENDING
. Lưu ý rằng bạn chỉ nên cấp quyền khi trạng thái là PURCHASED
. Bạn nên
kiểm tra nội dung cập nhật trạng thái của Purchase
bằng cách thực hiện các bước sau:
- Khi khởi động ứng dụng, hãy gọi hàm
BillingClient.queryPurchases()
để lấy danh sách các sản phẩm đã tiêu dùng liên kết với người dùng. - Gọi
Purchase.getPurchaseState()
trên mỗi đối tượngPurchase
được trả về. - Triển khai phương thức
onPurchasesUpdated()
để phản hồi nội dung thay đổi đối với đối tượngPurchase
.
Ngoài ra, API Nhà phát triển Google Play bao gồm trạng thái PENDING
cho Purchases.products
.
Giao dịch đang chờ xử lý không được hỗ trợ đối với các gói thuê bao.
Bản phát hành này cũng giới thiệu một loại thông báo mới theo thời gian thực dành cho nhà phát triển OneTimeProductNotification
. Loại thông báo này chứa một thông điệp duy nhất có giá trị là ONE_TIME_PRODUCT_PURCHASED
hoặc ONE_TIME_PRODUCT_CANCELED
. Loại thông báo này chỉ được gửi cho các giao dịch mua
có liên quan đến các phương thức thanh toán bị trì hoãn, chẳng hạn như thanh toán bằng tiền mặt.
Khi xác nhận giao dịch mua hàng đang chờ xử lý, chỉ xác nhận khi
trạng thái mua là PURCHASED
chứ không phải là PENDING
.
Nội dung thay đổi đối với API
Thư viện Google Play Billing phiên bản 2.0 có chứa một số nội dung thay đổi đối với API để hỗ trợ các tính năng mới và làm rõ chức năng hiện có.
consumeAsync
consumeAsync()
hiện sẽ lấy đối tượng
ConsumeParams
thay vì đối tượng purchaseToken
. ConsumeParams
chứa purchaseToken
cũng như
một trọng tải không bắt buộc dành cho nhà phát triển.
Phiên bản trước của consumeAsync()
đã bị xoá trong bản phát hành này.
queryPurchaseHistoryAsync
Để giảm thiểu nhầm lẫn,
hàm queryPurchaseHistoryAsync()
hiện sẽ trả về đối tượng
PurchaseHistoryRecord
thay vì đối tượng Purchase
. Đối tượng PurchaseHistoryRecord
giống
với đối tượng Purchase
, ngoại trừ việc đối tượng này chỉ phản ánh các giá trị mà
hàm queryPurchaseHistoryAsync()
trả về và không chứa các trường autoRenewing
,
orderId
và packageName
. Lưu ý rằng dữ liệu được trả về không thay đổi – hàm queryPurchaseHistoryAsync()
sẽ trả về cùng một dữ liệu như trước đây.
Các giá trị trả về BillingResult
Các API trước đây đã trả về một giá trị số nguyên BillingResponse
, giờ đây sẽ trả về đối tượng
BillingResult
. BillingResult
chứa số nguyên BillingResponse
cũng như
một chuỗi gỡ lỗi mà bạn có thể dùng để chẩn đoán lỗi. Chuỗi gỡ lỗi sử dụng ngôn ngữ en-US và không hiển thị cho người dùng cuối.
Sửa lỗi
- Hàm
SkuDetails.getIntroductoryPriceAmountMicros()
hiện trả về mộtlong
thay vìString
.
Bản phát hành Thư viện Google Play Billing phiên bản 1.2.2 (07/03/2019)
Thư viện Google Play Billing phiên bản 1.2.2 hiện đã có. Phiên bản này có nội dung thay đổi sau.
Sửa lỗi
- Khắc phục sự cố luồng xuất hiện trong phiên bản 1.2.1. Lệnh gọi trên nền không còn chặn luồng chính.
Nội dung thay đổi khác
- Mặc dù bạn vẫn nên sử dụng luồng chính, tuy nhiên giờ đây, bạn có thể tạo thực thể cho Thư viện Google Play Billing từ luồng ở chế độ nền.
- Quá trình tạo bản sao đã được chuyển hoàn toàn sang luồng nền để giảm khả năng gây ra lỗi ANR.
Bản phát hành Thư viện Play Billing phiên bản 1.2.1 (04/03/2019)
Thư viện Google Play Billing phiên bản 1.2.1 hiện đã có. Phiên bản này có nội dung thay đổi sau.
Nội dung thay đổi chính
- Đã thêm phần hỗ trợ cho sản phẩm thưởng. Để biết thêm thông tin về các tuỳ chọn kiếm tiền, hãy xem phần Thêm các tính năng dành riêng cho sản phẩm thưởng.
Nội dung thay đổi khác
- Thêm các hàm khởi tạo công khai cho
PurchasesResult
vàSkuDetailsResult
để kiểm thử dễ dàng hơn. - Các đối tượng
SkuDetails
có thể dùng một phương thức mới làgetOriginalJson()
. - Tất cả lệnh gọi dịch vụ AIDL hiện được các luồng nền xử lý.
Sửa lỗi
- Trình nghe gọi lại rỗng không còn được truyền vào API công khai.
Bản phát hành Thư viện Google Play Billing phiên bản 1.2 (18/10/2018)
Hiện đã có phiên bản 1.2 của thư viện Google Play Billing. Phiên bản này có nội dung thay đổi sau.
Tóm tắt các thay đổi
- Thư viện Google Play Billing hiện đã được cấp phép theo Thoả thuận cấp phép cho bộ phát triển phần mềm Android.
- Đã thêm API
launchPriceChangeConfirmationFlow
để nhắc người dùng xem lại nội dung thay đổi đang chờ xử lý đối với giá gói đăng ký. - Đã thêm tuỳ chọn hỗ trợ cho chế độ chia theo tỷ lệ mới
DEFERRED
khi nâng cấp hoặc hạ cấp gói thuê bao của người dùng. - Trong lớp
BillingFlowParams
, đã thay thếsetSku()
bằngsetSkuDetails()
. - Các bản sửa lỗi nhỏ và tối ưu hoá mã.
Xác nhận việc thay đổi giá
Bây giờ, bạn có thể thay đổi giá của gói thuê bao trong Google Play Console và nhắc người dùng xem lại và chấp nhận mức giá mới khi họ truy cập vào ứng dụng.
Để sử dụng API này, hãy tạo đối tượng PriceChangeFlowParams
bằng cách sử dụng
skuDetails
của sản phẩm thuê bao, sau đó gọi hàm
launchPriceChangeConfirmationFlow()
. Triển khai
PriceChangeConfirmationListener
để xử lý kết quả khi quy trình xác nhận việc thay đổi giá
hoàn tất như được hiển thị trong đoạn mã sau:
Kotlin
val priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build() billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, object : PriceChangeConfirmationListener() { override fun onPriceChangeConfirmationResult(responseCode: Int) { // Handle the result. } })
Java
PriceChangeFlowParams priceChangeFlowParams = PriceChangeFlowParams.newBuilder() .setSkuDetails(skuDetailsOfThePriceChangedSubscription) .build(); billingClient.launchPriceChangeConfirmationFlow(activity, priceChangeFlowParams, new PriceChangeConfirmationListener() { @Override public void onPriceChangeConfirmationResult(int responseCode) { // Handle the result. } });
Quy trình xác nhận thay đổi giá sẽ hiển thị hộp thoại chứa thông tin về giá mới và yêu cầu người dùng chấp nhận giá mới. Quy trình này sẽ trả về một
mã phản hồi thuộc loại
BillingClient.BillingResponse
.
Chế độ chia theo tỷ lệ mới
Khi nâng cấp hoặc hạ cấp gói thuê bao của người dùng, bạn có thể sử dụng chế độ chia theo tỷ lệ mới là DEFERRED
. Chế độ này sẽ cập nhật gói thuê bao của người dùng vào lần gia hạn tiếp theo. Để tìm hiểu thêm về cách thiết lập chế độ chia tỷ lệ này, hãy xem phần Thiết lập chế độ chia theo tỷ lệ.
Phương thức mới để thiết lập thông tin chi tiết về SKU
Trong lớp BillingFlowParams
, phương thức setSku()
không còn được dùng.
Thay đổi này nhằm tối ưu hoá quy trình Google Play Billing.
Khi tạo một thực thể mới của BillingFlowParams
tại phần thanh toán trong ứng dụng, bạn nên làm việc trực tiếp với đối tượng JSON bằng cách sử dụng hàm setSkuDetails()
, như minh hoạ trong đoạn mã sau đây:
Trong lớp Builder BillingFlowParams
, phương thức setSku()
không còn được dùng. Thay vào đó, hãy sử dụng phương thức setSkuDetails()
, như minh hoạ trong đoạn mã sau đây. Đối tượng được truyền vào đối tượng setSkuDetails()
từ phương thức querySkuDetailsAsync()
.
Kotlin
private lateinit var mBillingClient: BillingClient private val mSkuDetailsMap = HashMap<String, SkuDetails>() private fun querySkuDetails() { val skuDetailsParamsBuilder = SkuDetailsParams.newBuilder() mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build() ) { responseCode, skuDetailsList -> if (responseCode == 0) { for (skuDetails in skuDetailsList) { mSkuDetailsMap[skuDetails.sku] = skuDetails } } } } private fun startPurchase(skuId: String) { val billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap[skuId]) .build() }
Java
private BillingClient mBillingClient; private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>(); private void querySkuDetails() { SkuDetailsParams.Builder skuDetailsParamsBuilder = SkuDetailsParams.newBuilder(); mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(), new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) { if (responseCode == 0) { for (SkuDetails skuDetails : skuDetailsList) { mSkuDetailsMap.put(skuDetails.getSku(), skuDetails); } } } }); } private void startPurchase(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); }
Bản phát hành Play Library 1.1 (07/05/2018)
Thư viện Google Play Billing phiên bản 1.1 hiện đã có. Phiên bản này có nội dung thay đổi sau.
Tóm tắt các thay đổi
- Đã thêm chức năng hỗ trợ để chỉ định một chế độ phân phối trong
BillingFlowParams
khi nâng cấp/hạ cấp một gói thuê bao hiện có. - Không còn hỗ trợ cờ boolean
replaceSkusProration
trongBillingFlowParams
. Thay vào đó, hãy sử dụngreplaceSkusProrationMode
. - Hàm
launchBillingFlow()
giờ đây kích hoạt lệnh gọi lại khi có phản hồi không thành công.
Thay đổi về hành vi
Thư viện Google Play Billing phiên bản 1.1 có nội dung thay đổi sau đây về hành vi.
Nhà phát triển có thể thiết lập replaceSkusProrationMode
trong lớp BillingFlowParams
ProrationMode
cung cấp thêm thông tin chi tiết về việc chia theo tỷ lệ khi nâng cấp hoặc hạ cấp gói thuê bao của người dùng.
Kotlin
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build()
Java
BillingFlowParams.newBuilder() .setSku(skuId) .setType(billingType) .setOldSku(oldSku) .setReplaceSkusProrationMode(replaceSkusProrationMode) .build();
Hiện tại, Google Play hỗ trợ những chế độ theo tỷ lệ sau:
IMMEDIATE_WITH_TIME_PRORATION |
Việc thay thế sẽ có hiệu lực ngay lập tức và thời gian hết hạn mới sẽ được tính theo tỷ lệ, ghi có hoặc tính phí cho người dùng. Đây là hành vi mặc định hiện tại. |
IMMEDIATE_AND_CHARGE_PRORATED_PRICE |
Việc thay thế sẽ có hiệu lực ngay lập tức và chu kỳ thanh toán vẫn giữ nguyên. Giá trong
khoảng thời gian còn lại sẽ được tính.
Lưu ý: Bạn chỉ có thể dùng tuỳ chọn này để nâng cấp gói thuê bao. |
IMMEDIATE_WITHOUT_PRORATION |
Việc thay thế sẽ có hiệu lực ngay lập tức và mức giá mới sẽ được tính vào lần tiếp theo. Chu kỳ thanh toán vẫn giữ nguyên. |
replaceSkusProration
không còn được hỗ trợ trong lớp BillingFlowParams
Trước đây nhà phát triển có thể thiết lập một cờ boolean để tính phí số tiền theo tỷ lệ đối với một yêu cầu nâng cấp gói thuê bao. Đó là bởi chúng tôi đang hỗ trợ ProrationMode
có chứa hướng dẫn chi tiết hơn về việc chia tỷ lệ, bởi vậy nên cờ boolean này không còn được hỗ trợ nữa.
Giờ đây, hàm launchBillingFlow()
sẽ kích hoạt lệnh gọi lại khi có phản hồi không thành công
Thư viện Billing sẽ luôn kích hoạt lệnh gọi lại PurhcasesUpdatedListener
và trả về một BillingResponse
một cách không đồng bộ. Giá trị trả về đồng bộ của BillingResponse
cũng được giữ lại.
Sửa lỗi
- Thoát sớm và đúng cách trong các phương thức không đồng bộ khi dịch vụ bị ngắt kết nối.
- Các đối tượng tham số
Builder
không làm biến đổi các đối tượng đã tạo. - Vấn đề 68087141: hàm
launchBillingFlow()
hiện kích hoạt lệnh gọi lại cho phản hồi không thành công.
Bản phát hành Thư viện Google Play Billing phiên bản 1.0 (19/09/2017, Thông báo)
Thư viện Google Play Billing phiên bản 1.0 hiện đã có. Phiên bản này có nội dung thay đổi sau.
Thay đổi quan trọng:
- Đã nhúng quyền thanh toán bên trong tệp kê khai của thư viện. Bạn không cần thêm quyền
com.android.vending.BILLING
vào tệp kê khai Android nữa. - Đã thêm trình tạo mới vào lớp
BillingClient.Builder
. - Mẫu trình dựng được giới thiệu cho lớp
SkuDetailsParams
sẽ được sử dụng trong phương thức để truy vấn SKU. - Một số phương thức API đã được cập nhật để đảm bảo tính nhất quán (cùng tên của đối số trả về và thứ tự).
Thay đổi về hành vi
Thư viện Google Play Billing phiên bản 1.0 có nội dung thay đổi sau đây về hành vi.
Lớp BillingClient.Builder
BillingClient.Builder
hiện đã được khởi chạy thông qua mẫu newBuilder:
Kotlin
billingClient = BillingClient.newBuilder(context).setListener(this).build()
Java
billingClient = BillingClient.newBuilder(context).setListener(this).build();
Phương thức launchBillingFlow giờ đây được gọi bằng lớp BillingFlowParams
Để bắt đầu quy trình thanh toán cho giao dịch mua hàng hoặc gói thuê bao, phương thức
launchBillingFlow()
sẽ nhận được một bản sao
BillingFlowParams
được khởi chạy với các thông số dành riêng cho yêu cầu:
Kotlin
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build() // Then, use the BillingFlowParams to start the purchase flow val responseCode = billingClient.launchBillingFlow(builder.build())
Java
BillingFlowParams.newBuilder().setSku(skuId) .setType(billingType) .setOldSku(oldSku) .build(); // Then, use the BillingFlowParams to start the purchase flow int responseCode = billingClient.launchBillingFlow(builder.build());
Phương pháp mới để truy vấn các sản phẩm có sẵn
Đối số cho các phương thức queryPurchaseHistoryAsync()
và querySkuDetailsAsync()
được gói thành mẫu Bản dựng:
Kotlin
val params = SkuDetailsParams.newBuilder() params.setSkusList(skuList) .setType(itemType) billingClient.querySkuDetailsAsync(params.build(), object : SkuDetailsResponseListener() { ... })
Java
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); params.setSkusList(skuList) .setType(itemType); billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {...})
Kết quả hiện được trả về thông qua mã kết quả và một danh sách các đối tượng
SkuDetails
thay vì lớp trình bao bọc trước đó để thuận tiện cho bạn, đồng thời nhất quán trên API của chúng tôi:
Kotlin
fun onSkuDetailsResponse(@BillingResponse responseCode: Int, skuDetailsList: List<SkuDetails>)
Java
public void onSkuDetailsResponse(@BillingResponse int responseCode, List<SkuDetails> skuDetailsList)
Đã thay đổi thứ tự thông số trên phương thức onConsumeResponse()
Thứ tự của các đối số onConsumeResponse
từ giao diện ConsumeResponseListener
đã thay đổi để nhất quán trên API của chúng tôi:
Kotlin
fun onConsumeResponse(@BillingResponse responseCode: Int, outToken: String)
Java
public void onConsumeResponse(@BillingResponse int responseCode, String outToken)
Đã mở gói đối tượng PurchaseResult
PurchaseResult
đã được mở gói để nhất quán trên API của chúng tôi:
Kotlin
fun onPurchaseHistoryResponse(@BillingResponse responseCode: Int, purchasesList: List<Purchase>)
Java
void onPurchaseHistoryResponse(@BillingResponse int responseCode, List<Purchase> purchasesList)
Sửa lỗi
- Không có mã phản hồi trong gói PURCHASES_UPDATED
- Khắc phục các vấn đề về ProxyBillingActivity và PurchasesUpdatedListener trong quá trình xoay thiết bị
Bản phát hành Bản dùng thử cho nhà phát triển 1 (12/06/2017, Thông báo)
Đã phát hành bản dùng thử cho nhà phát triển nhằm đơn giản hoá quá trình phát triển liên quan đến việc thanh toán, cho phép các nhà phát triển tập trung vào việc triển khai logic dành riêng cho ứng dụng Android, chẳng hạn như cấu trúc ứng dụng và cấu trúc điều hướng.
Thư viện này bao gồm một vài lớp và tính năng tiện lợi để bạn sử dụng khi tích hợp các ứng dụng Android với API Google Play Billing. Thư viện cũng cung cấp lớp trừu tượng bên trên dịch vụ Ngôn ngữ định nghĩa giao diện Android (AIDL), giúp nhà phát triển dễ dàng xác định giao diện giữa ứng dụng và API Google Play Billing.