Tài liệu tham khảo về AIDL Google Play Billing

Cảnh báo: AIDL không còn được dùng nữa và sẽ bị loại bỏ trong một bản phát hành sau này. Để triển khai các tính năng thanh toán cho Google Play, hãy sử dụng Thư viện Google Play Billing.

Tài liệu này cung cấp thông tin tham khảo kỹ thuật để sử dụng AIDL Google Play Billing.

Mã phản hồi của máy chủ

Bảng sau đây liệt kê tất cả mã phản hồi của máy chủ mà Google Play đã gửi đến ứng dụng. Google Play gửi mã phản hồi một cách đồng bộ dưới dạng một số nguyên được ánh xạ tới khoá RESPONSE_CODE trong phản hồi Bundle. Ứng dụng của bạn sẽ phải xử lý tất cả mã phản hồi này.

Bảng 1. Bản tóm tắt các mã phản hồi cho lệnh gọi AIDL Google Play Billing.

Mã phản hồi Giá trị Mô tả
BILLING_RESPONSE_RESULT_OK 0 Thành công
BILLING_RESPONSE_RESULT_USER_CANCELED 1 Người dùng đã nhấn nút quay lại hoặc đã huỷ hộp thoại
BILLING_RESPONSE_RESULT_SERVICE_UNAVAILABLE 2 Kết nối mạng bị ngắt
BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE 3 Hệ thống không hỗ trợ phiên bản AIDL Google Play Billing cho loại bạn đã yêu cầu
BILLING_RESPONSE_RESULT_ITEM_UNAVAILABLE 4 Sản phẩm bạn đã yêu cầu mua không có sẵn
BILLING_RESPONSE_RESULT_DEVELOPER_ERROR 5 Các đối số cung cấp cho API không hợp lệ. Lỗi này cũng có thể cho biết ứng dụng không được ký hoặc thiết lập thanh toán đúng cách, hay không có quyền truy cập cần thiết trong tệp kê khai.
BILLING_RESPONSE_RESULT_ERROR 6 Có lỗi nghiêm trọng trong thao tác API
BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED 7 Bạn không thể mua vì mặt hàng này đã có chủ sở hữu
BILLING_RESPONSE_RESULT_ITEM_NOT_OWNED 8 Bạn không thể tiêu thụ vì bạn không sở hữu mặt hàng này

Tài liệu tham khảo về AIDL Google Play Billing – Hỗ trợ

Mục này mô tả những phương thức để lấy thông tin về các loại hỗ trợ thanh toán có sẵn cho ứng dụng của bạn.

Phương thức isBillingSupported()

Phương thức này cho biết liệu:

  • Hệ thống có hỗ trợ phiên bản AIDL nhất định cho ứng dụng hay không.
  • Google Play có hỗ trợ thanh toán tại quốc gia của người dùng hay không.
  • Hệ thống thanh toán của Google Play có đang bật trong gói ứng dụng không.
  • Ứng dụng có thể sử dụng loại mặt hàng nhất định để thanh toán hay không.

Bảng 2. Tham số isBillingSupported().

Khoá Loại Mô tả
apiVersion int Số phiên bản AIDL Google Play Billing mà ứng dụng của bạn đang sử dụng.
packageName String Tên gói của ứng dụng đang gọi phương thức này.
type String Giá trị phải là inapp đối với một sản phẩm trong ứng dụng hoặc subs đối với các gói thuê bao.

Phương thức này có trong phiên bản 3 trở lên của AIDL Google Play Billing.

Phương thức isBillingAssistExtraParams()

Phương thức này giống với phương thức isBillingSupported(), ngoại trừ việc bạn có thể truyền một đối số thứ tư, Bundle. Đối số này có thể chứa các tham số bổ sung.

Bảng 3. Tham số isBillingSupportedExtraParams().

Khoá Loại Mô tả
apiVersion int Số phiên bản AIDL Google Play Billing mà ứng dụng của bạn đang sử dụng.
packageName String Tên gói của ứng dụng đang gọi phương thức này.
type String Giá trị phải là inapp đối với một sản phẩm trong ứng dụng hoặc subs đối với các gói thuê bao.
extraParams Bundle

Một nhóm các tham số bổ sung chỉ định rõ hơn loại hệ thống thanh toán của Google Play mà ứng dụng hỗ trợ.

Gói này có thể chứa một khoá tuỳ chọn với tên vr có giá trị boolean. Cờ đó chỉ định việc ứng dụng có hỗ trợ quy trình mua thực tế ảo (VR) hay không.

Phương thức này có trong phiên bản 7 trở lên của AIDL Google Play Billing.

Tài liệu tham khảo về AIDL Google Play Billing – Thông tin chi tiết

AIDL Google Play Billing được khai báo trong tệp IInAppBillingService.aidl thuộc ứng dụng mẫu Phiên bản 3.

Phương thức getSkuDetails()

Hãy sử dụng phương thức getSkuDetails() để lấy thông tin chi tiết về sản phẩm cho một danh sách mã sản phẩm tương ứng.

Bảng 4. Tham số GetSkuDetails().

Khoá Loại Mô tả
apiVersion int Số phiên bản AIDL Google Play Billing mà ứng dụng của bạn đang sử dụng.
packageName String Tên gói của ứng dụng đang gọi phương thức này.
type String Loại của mặt hàng trong ứng dụng ("trong ứng dụng" đối với các giao dịch mua hàng một lần và "thuê bao" đối với các gói thuê bao).
skusBundle Bundle Gói chứa StringArrayList của SKU với khoá ITEM_ID_LIST.

Nếu phương thức getSkuDetails() thành công thì Google Play sẽ gửi một phản hồi Bundle. Hệ thống sẽ lưu trữ kết quả truy vấn trong Bundle ở một Chuỗi ArrayList được ánh xạ tới khoá DETAILS_LIST. Mỗi Chuỗi trong danh sách chi tiết chứa thông tin cụ thể về một sản phẩm ở định dạng JSON. Bảng 5 tóm tắt các trường trong chuỗi JSON chứa thông tin chi tiết về sản phẩm.

Bảng 5. Yêu cầu getSkuDetails() trả về nội dung mô tả các trường JSON chứa thông tin chi tiết về sản phẩm.

Khoá Mô tả
productId Mã sản phẩm của sản phẩm.
type Giá trị phải là inapp đối với một sản phẩm trong ứng dụng hoặc subs đối với các gói thuê bao.
price Giá được định dạng của mặt hàng, kể cả ký hiệu tiền tệ của giá mặt hàng. Giá này chưa bao gồm thuế.
price_amount_micros Giá tính theo đơn vị một phần triệu, trong đó 1.000.000 đơn vị một phần triệu tương đương một đơn vị tiền tệ. Ví dụ: nếu price"€7.99", thì price_amount_micros"7990000". Giá trị này đại diện cho giá đã được bản địa hoá và làm tròn cho một đơn vị tiền tệ cụ thể.
price_currency_code Mã đơn vị tiền tệ theo ISO 4217 của price. Ví dụ: nếu price được chỉ định bằng đồng bảng Anh, thì price_currency_code sẽ là "GBP".
title Tiêu đề của sản phẩm.
description Nội dung mô tả của sản phẩm.
subscriptionPeriod Kỳ hạn của gói thuê bao được chỉ định ở định dạng ISO 8601. Ví dụ: P1W tương đương với một tuần, P1M tương đương với một tháng, P3M tương đương với ba tháng, P6M tương đương với sáu tháng và P1Y tương đương với một năm.

Lưu ý: Giá trị chỉ trả về cho các gói thuê bao.

freeTrialPeriod Thời gian dùng thử được định cấu hình trong Google Play Console, được chỉ định ở định dạng ISO 8601. Ví dụ: P7D tương đương với 7 ngày. Để tìm hiểu thêm về điều kiện dùng thử miễn phí, hãy xem phần Gói thuê bao trong ứng dụng.

Lưu ý: Giá trị chỉ trả về cho các gói thuê bao đã định cấu hình thời gian dùng thử.

introductoryPrice Giá ưu đãi được định dạng của một gói thuê bao, kể cả ký hiệu tiền tệ, chẳng hạn như €3.99. Giá này chưa bao gồm thuế

Lưu ý: Giá trị chỉ trả về cho các gói thuê bao có thời gian ưu đãi đã định cấu hình.

introductoryPriceAmountMicros Giá ưu đãi theo đơn vị một phần triệu. Đơn vị tiền tệ giống với price_currency_code.

Lưu ý: Giá trị chỉ trả về cho các gói thuê bao có thời gian ưu đãi đã định cấu hình.

introductoryPricePeriod Kỳ thanh toán của giá ưu đãi, được chỉ định ở định dạng ISO 8601.

Lưu ý: Giá trị chỉ trả về cho các gói thuê bao có thời gian ưu đãi đã định cấu hình.

introductoryPriceCycles Số kỳ thanh toán của gói thuê bao mà người dùng sẽ được hưởng mức giá ưu đãi, chẳng hạn như 3.

Lưu ý: Giá trị chỉ trả về cho các gói thuê bao có thời gian ưu đãi đã định cấu hình.

Phương thức getbuyIntent()

Phương thức này trả về một số nguyên của mã phản hồi ánh xạ tới khoá RESPONSE_CODE và một PendingIntent để bắt đầu quy trình mua đối với mặt hàng trong ứng dụng. Mặt hàng này ánh xạ tới khoá BUY_INTENT như mô tả trong mục Cách triển khai Google Play Billing. Khi nhận được PendingIntent, Google Play sẽ gửi phản hồi Intent cùng với dữ liệu cho đơn đặt hàng đó. Bảng 6 tóm tắt dữ liệu được trả về trong phản hồi Intent.

Lưu ý: Thay vì sử dụng phương thức này, bạn nên sử dụng getBuyIntentExtraParams() để có thêm chức năng bổ sung.

Bảng 6. Dữ liệu phản hồi từ một yêu cầu mua hàng trên Google Play.

Khoá Mô tả
RESPONSE_CODE Nếu giao dịch mua thành công thì giá trị sẽ là 0, nếu không thì hệ thống sẽ báo lỗi.
INAPP_PURCHASE_DATA Một Chuỗi ở định dạng JSON có chứa thông tin chi tiết về đơn đặt hàng. Xem nội dung mô tả về các trường JSON ở bảng 7.
INAPP_DATA_SIGNATURE Chuỗi chứa chữ ký của dữ liệu về giao dịch mua hàng do nhà phát triển ký bằng khoá riêng tư. Chữ ký dữ liệu sử dụng lược đồ RSASSA-PKCS1-v1_5.

Bảng 7 mô tả các trường JSON được trả về trong dữ liệu phản hồi của đơn đặt hàng.

Bảng 7. Mô tả về các trường JSON cho INAPP_PURCHASE_DATA.

Trường Mô tả
autoRenewing Cho biết liệu gói thuê bao có tự động gia hạn hay không. Nếu giá trị là true có nghĩa là gói thuê bao đang hoạt động và sẽ tự động gia hạn vào ngày thanh toán tiếp theo. Nếu giá trị là false thì kết quả này cho biết người dùng đã huỷ gói thuê bao. Người dùng có quyền truy cập vào nội dung của gói thuê bao cho đến ngày thanh toán tiếp theo và sẽ mất quyền truy cập vào thời điểm đó, trừ khi họ bật lại tính năng tự động gia hạn (hoặc gia hạn thủ công, như mô tả trong phần Gia hạn thủ công). Nếu bạn cung cấp thời gian gia hạn thì giá trị này vẫn được đặt thành true cho tất cả gói thuê bao, miễn là vẫn chưa hết thời gian gia hạn. Hằng ngày, hệ thống sẽ linh hoạt gia hạn ngày thanh toán tiếp theo cho đến khi kết thúc thời gian gia hạn hoặc cho đến khi người dùng khắc phục phương thức thanh toán.
orderId Mã nhận dạng đơn đặt hàng riêng biệt của giao dịch. Mã nhận dạng này tương ứng với mã đơn hàng thanh toán bằng Google.
packageName Gói ứng dụng nguồn bắt đầu giao dịch mua.
productId Mã nhận dạng sản phẩm của mặt hàng. Mỗi mặt hàng đều có một mã sản phẩm mà bạn phải chỉ định trong danh sách sản phẩm của ứng dụng trên Google Play Console.
purchaseTime Thời gian mua sản phẩm tính bằng mili giây kể từ thời gian bắt đầu của hệ thống (ngày 01 tháng 01 năm 1970).
purchaseState Trạng thái mua hàng của đơn đặt hàng. Trạng thái này luôn trả về giá trị là 0 (đã mua).
developerPayload Chuỗi do nhà phát triển chỉ định chứa thông tin bổ sung về đơn đặt hàng. Bạn có thể chỉ định một giá trị cho trường này khi tạo yêu cầu getBuyIntent.
purchaseToken Mỗi mã chỉ xác định duy nhất một giao dịch mua hàng của một cặp người dùng và mặt hàng nhất định.

Phương thức consumerPurchase()

Tiêu thụ giao dịch mua tương ứng với mã thông báo của giao dịch được cấp. Thao tác này sẽ dẫn đến kết quả là mặt hàng sẽ bị xoá khỏi tất cả phản hồi tiếp theo của getPurchases() và cho phép thực hiện giao dịch mua lại các mặt hàng của cùng SKU.

Bảng 8. Tham số consumePurchase().

Khoá Loại Mô tả
apiVersion int Số phiên bản AIDL Google Play Billing mà ứng dụng của bạn đang sử dụng.
packageName String Tên gói của ứng dụng đang gọi phương thức này.
purchaseToken String Mã trong tệp JSON chứa thông tin về giao dịch mua giúp xác định giao dịch mua sẽ được tiêu thụ.

Phương thức này trả về một RESULT_OK(0) đối với lượt tiêu thụ thành công và mã phản hồi phù hợp cho các lỗi.

Phương thức getbuyToModifySkus()

Phương thức này được dùng để nâng cấp hoặc hạ cấp giao dịch mua gói thuê bao. Phương thức này tương tự như getBuyIntent(), ngoại trừ việc một danh sách có duy nhất một SKU đã mua sẽ được thay thế bằng SKU đang được đặt mua. Khi người dùng hoàn tất giao dịch mua hàng, Google Play sẽ hoán đổi SKU cũ và cung cấp cho người dùng khoản tín dụng có giá trị tương đương với thời gian chưa sử dụng của gói thuê bao trên cơ sở tỷ lệ. Google Play áp dụng nguyên tắc tín dụng này đối với gói thuê bao mới và chưa bắt đầu tính phí gói thuê bao mới cho đến khi người dùng sử dụng hết tín dụng.

Lưu ý: Thay vì sử dụng phương thức này, bạn nên sử dụng getBuyIntentExtraParams() để có thêm chức năng bổ sung.

Chúng tôi đã thêm phương thức này vào phiên bản 5 của AIDL Google Play Billing. Để xác minh rằng phương thức đó đã được báo cáo, hãy gửi yêu cầu AIDL isBillingSupported.

Lưu ý: Bạn chỉ có thể sử dụng phương thức này đối với các giao dịch mua gói thuê bao. Nếu tham số type đã truyền không phải là "subs", thì phương thức này sẽ trả về BILLING_RESPONSE_RESULT_DEVELOPER_ERROR. Ngoài ra, các SKU đã truyền không được bao gồm SKU của các gói thuê bao theo mùa.

Phương thức này trả về một số nguyên mã phản hồi ánh xạ tới khoá RESPONSE_CODE và một PendingIntent để bắt đầu quy trình mua đối với gói thuê bao trong ứng dụng ánh xạ tới khoá BUY_INTENT. Khi nhận được PendingIntent, Google Play sẽ gửi một phản hồi Intent cùng với dữ liệu cho đơn đặt hàng đó. Bảng 9 tóm tắt dữ liệu được trả về trong phản hồi Intent.

Bảng 9. Dữ liệu phản hồi từ yêu cầu mua hàng của AIDL Google Play Billing phiên bản 5.

Khoá Mô tả
RESPONSE_CODE Nếu giao dịch mua thành công thì giá trị sẽ là 0. Nếu giao dịch mua không thành công thì kết quả sẽ có mã lỗi.
INAPP_PURCHASE_DATA Một Chuỗi ở định dạng JSON có chứa thông tin chi tiết về đơn đặt hàng. Hãy xem bảng 6 để biết nội dung mô tả về các trường JSON.
INAPP_DATA_SIGNATURE Chuỗi chứa chữ ký của dữ liệu về giao dịch mua hàng do nhà phát triển ký bằng khoá riêng tư. Chữ ký dữ liệu sử dụng lược đồ RSASSA-PKCS1-v1_5.

Phương thức getbuyExtraParams()

Phương thức này bắt đầu một yêu cầu mua hàng. Đây là một biến thể của phương thức getBuyIntent() và có thêm tham số extraParams. Tham số này là Bundle của khoá và giá trị không bắt buộc. Chúng ảnh hưởng đến hoạt động của phương thức như mô tả trong bảng 10.

Bảng 10. Tham số bổ sung getBuyIntentExtraParams().

Khoá Loại Mô tả
skusToReplace List<String> Danh sách chứa một SKU duy nhất mà người dùng đang nâng cấp hoặc hạ cấp (không bắt buộc). Hãy bỏ qua trường này nếu giao dịch mua đang nâng cấp hoặc hạ cấp gói thuê bao hiện có. SKU đã chỉ định sẽ được thay thế bằng SKU mà người dùng đang mua. Google Play sẽ thay thế SKU đã chỉ định vào đầu chu kỳ thanh toán tiếp theo.
replaceSkusProration boolean

Trường này cho biết liệu thời gian chưa sử dụng gói thuê bao trên SKU mà người dùng đang nâng cấp hay hạ cấp có được cấp tín dụng hay không. Nếu bạn đặt trường này là true, thì Google Play sẽ hoán đổi các SKU cũ và cung cấp cho người dùng khoản tín dụng có giá trị tương đương với thời gian chưa sử dụng của gói thuê bao trên cơ sở tỷ lệ. Google Play áp dụng nguyên tắc tín dụng này đối với gói thuê bao mới và chưa bắt đầu tính phí gói thuê bao mới cho đến khi người dùng sử dụng hết tín dụng.

Nếu bạn đặt trường này là false, thì người dùng sẽ không nhận được tín dụng cho thời gian chưa sử dụng của gói thuê bao và ngày gia hạn sẽ không thay đổi.

Giá trị mặc định là true. Hãy bỏ qua trường này nếu bạn không truyền skusToReplace.

accountId String

Chuỗi bị làm rối (không bắt buộc) được liên kết với một tài khoản duy nhất của người dùng trong ứng dụng. Nếu bạn truyền giá trị này thì Google Play có thể sử dụng giá trị để phát hiện hoạt động bất thường, chẳng hạn như việc nhiều thiết bị thực hiện giao dịch mua hàng trên cùng một tài khoản trong một khoảng thời gian ngắn.

Trường này tương tự như trường developerId ở chỗ trường này đại diện cho một người dùng duy nhất, nhưng hãy lưu ý rằng nếu bạn có nhiều ứng dụng thì cùng một người dùng có thể có accountId khác nhau cho mỗi ứng dụng. Trong khi đó, developerId phải xác định duy nhất một người dùng trên tất cả ứng dụng.

Không sử dụng mã nhà phát triển Google Play Console hoặc mã nhận dạng trên Google của người dùng cho trường này. Ngoài ra, trường này không được chứa mã nhận dạng của người dùng ở dạng văn bản thô. Bạn nên sử dụng hàm băm một chiều để tạo chuỗi từ mã nhận dạng của người dùng và lưu trữ chuỗi hàm băm trong trường này.

developerId String

Chuỗi bị làm rối (không bắt buộc) được liên kết với một tài khoản duy nhất của người dùng trên tất cả ứng dụng. Trường này tương tự như accountId ở chỗ trường này đại diện cho một người dùng duy nhất. Tuy nhiên, trường này có mặt trên tất cả ứng dụng đối với cùng một người dùng, trong khi đó, accountId có thể là duy nhất đối với mỗi ứng dụng, ngay cả đối với cùng một người dùng.

Không sử dụng mã nhà phát triển Google Play Console hoặc mã nhận dạng trên Google của người dùng cho trường này. Ngoài ra, trường này không được chứa mã nhận dạng của người dùng ở dạng văn bản thô. Bạn nên sử dụng hàm băm một chiều để tạo chuỗi từ mã nhận dạng của người dùng và lưu trữ chuỗi hàm băm trong trường này.

vr boolean

Trường này cho biết liệu ý định đã cấp có đại diện cho điểm bắt đầu của quy trình mua thực tế ảo (VR) hay không.

Lưu ý: Để tham số bổ sung này có hiệu lực trên ứng dụng, bạn phải sử dụng AIDL Google Play Billing phiên bản 7 hoặc một API mới hơn.

Phương thức này có trong phiên bản 6 trở lên của AIDL Google Play Billing.

Phương thức getPurchases()

Phương thức này trả về các sản phẩm người dùng hiện đang sở hữu nhưng chưa tiêu thụ, kể cả mặt hàng đã mua và mặt hàng có được bằng cách đổi mã khuyến mãi. Bảng 11 liệt kê dữ liệu phản hồi trả về trong Bundle.

Table 11. Dữ liệu phản hồi từ một yêu cầu getPurchases.

Khoá Mô tả
RESPONSE_CODE Nếu yêu cầu thành công thì giá trị sẽ là 0, nếu không thì hệ thống sẽ báo lỗi.
INAPP_PURCHASE_ITEM_LIST StringArrayList chứa danh sách mã sản phẩm của các giao dịch mua hàng trong ứng dụng này.
INAPP_PURCHASE_DATA_LIST StringArrayList chứa thông tin chi tiết về các giao dịch mua hàng từ ứng dụng này. Hãy xem bảng 13 để biết danh sách thông tin chi tiết được lưu trữ ở từng mục.
INAPP_DATA_SIGNATURE_LIST StringArrayList chứa chữ ký của các giao dịch mua hàng từ ứng dụng này.
INAPP_CONTINUATION_TOKEN Chuỗi chứa mã thông báo tiếp tục để truy xuất tập hợp tiếp theo của các sản phẩm trong ứng dụng mà người dùng sở hữu. Dịch vụ Google Play chỉ thiết lập chuỗi này nếu số lượng sản phẩm người dùng sở hữu rất lớn. Khi một mã thông báo tiếp tục xuất hiện trong phản hồi, bạn phải thực hiện một lệnh gọi khác tới getPurchases và truyền mã thông báo tiếp tục mà bạn đã nhận được. Lệnh gọi getPurchases tiếp theo sẽ trả về nhiều giao dịch mua hơn và có thể là một mã thông báo tiếp tục khác.

Phương thức getPurchaseHistory()

Phương thức này trả về giao dịch mua hàng gần đây nhất mà người dùng đã thực hiện cho mỗi SKU, ngay cả khi giao dịch mua đó đã hết hạn, bị huỷ hoặc đã tiêu thụ. Bảng 12 liệt kê dữ liệu phản hồi được trả về trong Bundle:

Table 12. Dữ liệu phản hồi từ một yêu cầu getPurchaseHistory.

Khoá Mô tả
RESPONSE_CODE Nếu yêu cầu thành công thì giá trị sẽ bằng 0, nếu không thì hệ thống sẽ báo lỗi.
INAPP_PURCHASE_ITEM_LIST StringArrayList chứa danh sách productIds của các giao dịch mua hàng trong ứng dụng này.
INAPP_PURCHASE_DATA_LIST StringArrayList chứa thông tin chi tiết về các giao dịch mua hàng gần đây trong ứng dụng này. Hãy xem bảng 6 để biết danh sách thông tin chi tiết được lưu trữ ở từng mục INAPP_PURCHASE_DATA trong danh sách.
INAPP_DATA_SIGNATURE_LIST StringArrayList chứa chữ ký của các giao dịch mua hàng từ ứng dụng này.
INAPP_CONTINUATION_TOKEN Chuỗi chứa mã thông báo tiếp tục để truy xuất tập hợp tiếp theo của các sản phẩm trong ứng dụng mà người dùng sở hữu. Dịch vụ Google Play chỉ thiết lập chuỗi này nếu số lượng sản phẩm người dùng sở hữu rất lớn. Khi một mã thông báo tiếp tục xuất hiện trong phản hồi, bạn phải thực hiện một lệnh gọi khác tới getPurchases và truyền mã thông báo tiếp tục mà bạn đã nhận được. Lệnh gọi getPurchases tiếp theo sẽ trả về nhiều giao dịch mua hơn và có thể là một mã thông báo tiếp tục khác.

Table 13. Nội dung mô tả về các trường JSON của nhật ký mua do getPurchaseHistory() trả về.

Trường Mô tả
productId Mã nhận dạng sản phẩm của mặt hàng. Mỗi mặt hàng đều có một mã sản phẩm mà bạn phải chỉ định trong danh sách sản phẩm của ứng dụng trên Google Play Console.
purchaseTime Thời gian mua sản phẩm tính bằng mili giây kể từ thời gian bắt đầu của hệ thống (ngày 01 tháng 01 năm 1970).
developerPayload Chuỗi do nhà phát triển chỉ định chứa thông tin bổ sung về đơn đặt hàng. Bạn có thể chỉ định một giá trị cho trường này khi tạo yêu cầu getBuyIntent.
purchaseToken Mỗi mã chỉ xác định duy nhất một giao dịch mua hàng của một cặp người dùng và mặt hàng nhất định.

Lưu ý: Phương thức getPurchaseHistory() có mức hao tổn cao hơn getPurchases() vì phương thức này yêu cầu lệnh gọi đến máy chủ của Google Play. Bạn nên sử dụng getPurchases() nếu bạn không thực sự cần nhật ký mua của người dùng.

Phương thức này có trong phiên bản 6 trở lên của AIDL Google Play Billing.