Hướng dẫn này mô tả cách tích hợp các API để chỉ cung cấp hệ thống thanh toán thay thế (tức là không do người dùng chọn) trong các ứng dụng đủ điều kiện. Để tìm hiểu thêm về các chương trình này, bao gồm cả điều kiện tham gia và phạm vi địa lý áp dụng, hãy xem bài viết Giới thiệu về hệ thống thanh toán thay thế.
Thiết lập Thư viện Play Billing
Thêm phần phụ thuộc Thư viện Play Billing vào ứng dụng Android của bạn. Để sử dụng các API hệ thống thanh toán thay thế, bạn cần sử dụng phiên bản 6.1 trở lên.
Kết nối với Google Play
Các bước đầu tiên trong quy trình tích hợp cũng giống như các bước tương ứng mà Hướng dẫn tích hợp Google Play Billing mô tả, chỉ có một vài điểm sửa đổi khi khởi động BillingClient:
- Để cho biết rằng ứng dụng của bạn chỉ sử dụng hệ thống thanh toán thay thế, bạn cần gọi một phương thức mới là:
enableAlternativeBillingOnly
.
Ví dụ sau minh hoạ việc khởi động BillingClient
với một số điểm sửa đổi:
Kotlin
var billingClient = BillingClient.newBuilder(context)
.enableAlternativeBillingOnly()
.build()
Java
private BillingClient billingClient = BillingClient.newBuilder(context)
.enableAlternativeBillingOnly()
.build();
Sau khi khởi động BillingClient
, bạn cần thiết lập kết nối với Google Play theo mô tả trong hướng dẫn tích hợp.
Kiểm tra điều kiện áp dụng
Ứng dụng của bạn nên xác nhận về việc chỉ có hệ thống thanh toán thay thế bằng cách gọi isAlternativeBillingOnlyAvailableAsync
.
Nếu chỉ có hệ thống thanh toán thay thế thì API này sẽ trả về BillingResponseCode.OK. Hãy tham khảo phần xử lý phản hồi để biết thông tin cụ thể về cách ứng dụng của bạn sẽ phản hồi các mã phản hồi khác.
Kotlin
billingClient.isAlternativeBillingOnlyAvailableAsync(object:
AlternativeBillingOnlyAvailabilityListener {
override fun onAlternativeBillingOnlyAvailabilityResponse(
billingResult: BillingResult) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling alternative billing only being unavailable, etc.
return
}
// Alternative billing only is available. Continue with steps in
// the guide.
}
});
Java
billingClient.isAlternativeBillingOnlyAvailable(
new AlternativeBillingOnlyAvailabilityListener() {
@Override
public void onAlternativeBillingOnlyAvailabilityResponse(
BillingResult billingResult) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors,
// handling alternative billing only being unavailable,
// etc.
return;
}
// Alternative billing only is available. Continue with steps in
// the guide.
}
});
Hộp thoại thông tin dành cho người dùng
Để chỉ tích hợp với hệ thống thanh toán thay thế, ứng dụng đủ điều kiện của bạn phải cho thấy một màn hình thông tin giúp người dùng hiểu rằng Google Play sẽ không quản lý hoạt động thanh toán. Mỗi lần như vậy, bạn phải cho người dùng thấy màn hình thông tin bằng cách gọi API showAlternativeBillingOnlyInformationDialog
trước khi bắt đầu quy trình thanh toán thay thế. Nếu người dùng đã xác nhận hộp thoại, thì thường là việc sử dụng API này sẽ không làm hộp thoại xuất hiện lại. Đôi khi hộp thoại sẽ xuất hiện lại với người dùng trong một số trường hợp, chẳng hạn như khi người dùng xoá bộ nhớ đệm trên thiết bị của họ.
Kotlin
// An activity reference from which the alternative billing only information
// dialog will be launched.
val activity : Activity = ...;
val listener : AlternativeBillingOnlyInformationDialogListener =
AlternativeBillingOnlyInformationDialogListener {
override fun onAlternativeBillingOnlyInformationDialogResponse(
billingResult: BillingResult) {
// check billingResult
}
}
val billingResult =
billingClient.showAlternativeBillingOnlyInformationDialog(activity,
listener)
Java
// An activity reference from which the alternative billing only information
// dialog will be launched.
Activity activity = ...;
AlternativeBillingOnlyInformationDialogListener listener =
new AlternativeBillingOnlyInformationDialogListener() {
@Override
public void onAlternativeBillingOnlyInformationDialogResponse(
BillingResult billingResult) {
// check billingResult
}
};
BillingResult billingResult =
billingClient.showAlternativeBillingOnlyInformationDialog(activity,
listener);
Nếu phương thức này trả về BillingResponseCode.OK thì ứng dụng của bạn có thể tiếp tục giao dịch. Trong trường hợp trả về BillingResponseCode.USER_CANCELED, ứng dụng của bạn nên gọi showAlternativeBillingOnlyInformationDialog để hiện lại hộp thoại cho người dùng. Để biết các mã phản hồi khác, hãy xem phần xử lý phản hồi.
Báo cáo giao dịch với Google Play
Mọi giao dịch thực hiện qua hệ thống thanh toán thay thế phải được báo cáo với Google Play bằng cách gọi API Nhà phát triển Google Play qua phần phụ trợ trong vòng 24 giờ, cung cấp một externalTransactionToken
mà bạn sẽ nhận được bằng cách sử dụng API theo mô tả bên dưới. Bạn nên tạo một externalTransactionToken mới cho từng giao dịch mua hàng một lần, từng gói thuê bao mới, cũng như cho mọi lượt nâng cấp/hạ cấp một gói thuê bao hiện có. Để tìm hiểu cách báo cáo giao dịch sau khi nhận externalTransactionToken
, hãy xem hướng dẫn tích hợp phần phụ trợ.
Kotlin
billingClient.createAlternativeBillingOnlyReportingDetailsAsync(object:
AlternativeBillingOnlyReportingDetailsListener {
override fun onAlternativeBillingOnlyTokenResponse(
billingResult: BillingResult,
alternativeBillingOnlyReportingDetails:
AlternativeBillingOnlyReportingDetails?) {
if (billingResult.responseCode != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return
}
val externalTransactionToken =
alternativeBillingOnlyReportingDetails?
.externalTransactionToken
// Send transaction token to backend and report to Google Play.
}
});
Java
billingClient.createAlternativeBillingOnlyReportingDetailsAsync(
new AlternativeBillingOnlyReportingDetailsListener() {
@Override
public void onAlternativeBillingOnlyTokenResponse(
BillingResult billingResult,
@Nullable AlternativeBillingOnlyReportingDetails
alternativeBillingOnlyReportingDetails) {
if (billingResult.getResponseCode() != BillingResponseCode.OK) {
// Handle failures such as retrying due to network errors.
return;
}
String transactionToken =
alternativeBillingOnlyReportingDetails
.getExternalTransactionToken();
// Send transaction token to backend and report to Google Play.
}
});
Xử lý phản hồi
Các phương thức isAlternativeBillingOnlyAvailableAsync(),
showAlternativeBillingOnlyInformationDialog()
và createAlternativeBillingOnlyReportingDetailsAsync()
ở trên có thể trả về các phản hồi non-BillingResponseCode.OK trong trường hợp gặp lỗi. Bạn nên xử lý lỗi theo cách sau đây:
ERROR
: Đây là lỗi nội bộ. Không tiếp tục giao dịch. Thử lại bằng cách gọishowAlternativeBillingOnlyInformationDialog()
để hiển thị thông tin hộp thoại cho người dùng vào lần tiếp theo người dùng cố gắng mua hàng.FEATURE_NOT_SUPPORTED
: Cửa hàng Play không hỗ trợ các API Hệ thống thanh toán thay thế trên thiết bị hiện tại. Không tiếp tục giao dịch.USER_CANCELED
: Không tiếp tục giao dịch. Gọi điệnshowAlternativeBillingOnlyInformationDialog()
để hiển thị hộp thoại thông tin cho người dùng vào lần tới khi người dùng cố gắng mua hàng.BILLING_UNAVAILABLE
: Giao dịch không đủ điều kiện để chỉ áp dụng hệ thống thanh toán thay thế nên sẽ không thực hiện tiếp được theo chương trình này. Lý do là vì người dùng không ở quốc gia đủ điều kiện để tham gia chương trình này, hoặc tài khoản của bạn chưa đăng ký tham gia chương trình. Nếu là vì lý do thứ hai, thì hãy kiểm tra trạng thái đăng ký của bạn trong Play Console.DEVELOPER_ERROR
: Yêu cầu này gặp phải lỗi. Hãy sử dụng thông báo gỡ lỗi để xác định và sửa lỗi trước khi tiếp tục.NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE
: Đây là các lỗi tạm thời và bạn cần thử lại. Trong trường hợpSERVICE_DISCONNECTED
thiết lập lại kết nối với Google Play trước khi thử lại.
Kiểm thử hệ thống thanh toán thay thế
Bạn nên sử dụng nhân viên kiểm thử được cấp phép để kiểm thử việc tích hợp hệ thống thanh toán thay thế. Bạn sẽ không được lập hoá đơn cho các giao dịch do người kiểm thử được cấp phép tài khoản. Xem bài viết Thử nghiệm tính năng thanh toán trong ứng dụng bằng quy trình cấp phép ứng dụng để biết thêm thông tin thông tin về cách định cấu hình nhân viên kiểm thử được cấp phép.
Các bước tiếp theo
Sau khi hoàn tất quy trình tích hợp trong ứng dụng, bạn đã sẵn sàng tích hợp phần phụ trợ.