Hướng dẫn tích hợp các phương thức thanh toán bên ngoài trong ứng dụng

Tài liệu này mô tả cách tích hợp các API của Thư viện Play Billing để cung cấp phương thức thanh toán bên ngoài trong các ứng dụng đủ điều kiện. Để tìm hiểu thêm về chương trình này, hãy xem các yêu cầu của chương trình.

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 thanh toán bên ngoài, bạn cần sử dụng phiên bản 8.3 trở lên. Nếu bạn cần di chuyển từ phiên bản cũ sang, hãy làm theo hướng dẫn trong hướng dẫn di chuyển để nâng cấp trước khi bắt đầu quá trình tích hợp.

Khởi động ứng dụng thanh toán

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:

Ví dụ sau minh hoạ việc khởi động BillingClient với một số điểm sửa đổi:

Kotlin

val purchasesUpdatedListener =
    PurchasesUpdatedListener { billingResult, purchases ->
        // Handle new Google Play purchase.
    }

val developerProvidedBillingListener =
    DeveloperProvidedBillingListener { details ->
        // Handle user selection for developer provided billing option.
    }

val billingClient = BillingClient.newBuilder(context)
    .setListener(purchasesUpdatedListener)
    .enablePendingPurchases()
    .enableBillingProgram(
        EnableBillingProgramParams.newBuilder()
            .setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
            .setDeveloperProvidedBillingListener(developerProvidedBillingListener)
            .build())
    .build()

Java

private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
    @Override
    public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
        // Handle new Google Play purchase.
    }
};

private DeveloperProvidedBillingListener developerProvidedBillingListener =
    new DeveloperProvidedBillingListener() {
        @Override
        public void onUserSelectedDeveloperBilling(
            DeveloperProvidedBillingDetails details) {
            // Handle user selection for developer provided billing option.
        }
    };

private BillingClient billingClient = BillingClient.newBuilder(context)
    .setListener(purchasesUpdatedListener)
    .enablePendingPurchases()
    .enableBillingProgram(
        EnableBillingProgramParams.newBuilder()
            .setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
            .setDeveloperProvidedBillingListener(developerProvidedBillingListener)
            .build())
    .build();

Kết nối với Google Play

Sau khi khởi động BillingClient, hãy kết nối với Google Play theo mô tả trong phần Kết nối với Google Play.

Kiểm tra điều kiện sử dụng của người dùng

Sau khi kết nối với Google Play, bạn có thể kiểm tra xem người dùng có đủ điều kiện tham gia chương trình thanh toán bên ngoài hay không bằng cách gọi phương thức isBillingProgramAvailableAsync(). Phương thức này trả về BillingResponseCode.OK nếu người dùng đủ điều kiện. Mẫu sau đây minh hoạ cách kiểm tra điều kiện:

Kotlin

billingClient.isBillingProgramAvailableAsync(
  BillingProgram.EXTERNAL_PAYMENTS,
  object : BillingProgramAvailabilityListener {
    override fun onBillingProgramAvailabilityResponse(
      billingProgram: Int, billingResult: BillingResult) {
        if (billingResult.responseCode != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors,
            // handling external payments unavailable, etc.
            return
        }

        // External payments are available. Can proceed with generating an
        // external transaction token.
})

Java

billingClient.isBillingProgramAvailableAsync(
  BillingProgram.EXTERNAL_PAYMENTS,
  new BillingProgramAvailabilityListener() {
    @Override
    public void onBillingProgramAvailabilityResponse(
      int billingProgram, BillingResult billingResult) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors,
            // handling external payments unavailable, etc.
            return;
        }

        // External payments are available. Can proceed with generating an external transaction token.
      }

    });

Hãy xem 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. Nếu đang sử dụng tiện ích Kotlin, bạn có thể dùng coroutine của Kotlin để không phải xác định một trình nghe riêng biệt.

Hiển thị các sản phẩm hiện có

Bạn có thể cho người dùng thấy các sản phẩm hiện có theo cách tương tự như khi tích hợp hệ thống thanh toán của Google Play. Khi người dùng thấy sản phẩm còn hàng và chọn mua một sản phẩm, hãy bắt đầu quy trình thanh toán bên ngoài theo mô tả trong phần bắt đầu quy trình thanh toán bên ngoài.

Chuẩn bị mã thông báo giao dịch bên ngoài

Để báo cáo một giao dịch bên ngoài cho Google Play, bạn phải có mã giao dịch bên ngoài được tạo từ Thư viện Google Play Billing. Bạn phải tạo một mã giao dịch bên ngoài mới mỗi khi người dùng truy cập vào một trang web hoặc ứng dụng bên ngoài thông qua API thanh toán bên ngoài. Bạn có thể thực hiện việc này bằng cách gọi API createBillingProgramReportingDetailsAsync. Mã thông báo phải được tạo ngay trước khi launchBillingFlow được gọi.

Kotlin

val params =
    BillingProgramReportingDetailsParams.newBuilder()
        .setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
        .build()

billingClient.createBillingProgramReportingDetailsAsync(
  params,
  object : BillingProgramReportingDetailsListener {
    override fun onCreateBillingProgramReportingDetailsResponse(
      billingResult: BillingResult,
      billingProgramReportingDetails: BillingProgramReportingDetails?) {
        if (billingResult.responseCode != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return
        }
        val externalTransactionToken =
            billingProgramReportingDetails?.externalTransactionToken
        // Persist the external transaction token locally. Pass it to
        // the external website using DeveloperBillingOptionParams when
        // launchBillingFlow is called.
    }
})

Java

BillingProgramReportingDetailsParams params =
    BillingProgramReportingDetailsParams.newBuilder()
        .setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
        .build();

billingClient.createBillingProgramReportingDetailsAsync(
  params,
  new BillingProgramReportingDetailsListener() {
    @Override
    public void onCreateBillingProgramReportingDetailsResponse(
      BillingResult billingResult,
      @Nullable BillingProgramReportingDetails
        billingProgramReportingDetails) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return;
        }

        String transactionToken =
          billingProgramReportingDetails.getExternalTransactionToken();

        // Persist the external transaction token locally. Pass it to
        // the external website using DeveloperBillingOptionParams when
        // launchBillingFlow is called.
      }
});

Nếu đang sử dụng tiện ích Kotlin, bạn có thể dùng coroutine của Kotlin để không phải xác định một trình nghe riêng biệt.

Ra mắt quy trình thanh toán bên ngoài

Bắt đầu quy trình thanh toán bên ngoài bằng cách gọi launchBillingFlow() tương tự như bắt đầu quy trình mua bằng hệ thống thanh toán tích hợp của Google Play nhưng có thêm một tham số DeveloperBillingOptionParams được cung cấp cho biết ứng dụng của bạn muốn bật quy trình thanh toán bên ngoài cho giao dịch mua này.

DeveloperBillingOptionParams phải chứa những thông tin sau:

  • billingProgram được đặt thành chương trình thanh toán EXTERNAL_PAYMENTS
  • linkURI được đặt thành đích đến của đường liên kết
  • launchMode được đặt thành LAUNCH_IN_EXTERNAL_BROWSER_OR_APP nếu Google Play sẽ khởi chạy đường liên kết hoặc CALLER_WILL_LAUNCH_LINK nếu ứng dụng của bạn sẽ khởi chạy đường liên kết.

Khi ứng dụng của bạn gọi launchBillingFlow() bằng DeveloperBillingOptionParams được cung cấp, hệ thống thanh toán của Google Play sẽ thực hiện bước kiểm tra sau đây:

  • Hệ thống sẽ kiểm tra xem quốc gia trên Google Play của người dùng có phải là quốc gia có hỗ trợ thanh toán bên ngoài (tức là một quốc gia được hỗ trợ) hay không. Nếu quốc gia của người dùng trên Google Play là quốc gia được hỗ trợ, thì Google Play sẽ dựa trên cấu hình của BillingClient để kiểm tra xem liệu dịch vụ thanh toán bên ngoài đã được bật hay chưa và liệu DeveloperBillingOptionParams có được cung cấp hay không.
    • Nếu bạn đã bật phương thức thanh toán bên ngoài, thì quy trình mua sẽ cho thấy trải nghiệm người dùng do người dùng lựa chọn.
    • Nếu bạn không bật phương thức thanh toán bên ngoài, thì quy trình mua sẽ cho thấy trải nghiệm người dùng tiêu chuẩn của hệ thống thanh toán của Google Play mà không cần người dùng chọn.
  • Nếu quốc gia của người dùng trên Google Play không phải là quốc gia được hỗ trợ, thì quy trình mua sẽ cho thấy trải nghiệm người dùng tiêu chuẩn của hệ thống thanh toán của Google Play mà không cần người dùng chọn.

Quốc gia trên Play của người dùng là quốc gia được hỗ trợ

Quốc gia trên Play của người dùng không phải là quốc gia được hỗ trợ

Đã bật phương thức thanh toán bên ngoài (thiết lập BillingClientlaunchBillingFlow)

Người dùng thấy trải nghiệm người dùng do người dùng lựa chọn

Người dùng thấy trải nghiệm người dùng tiêu chuẩn của hệ thống thanh toán của Google Play

Chưa bật phương thức thanh toán bên ngoài (chưa bật trong quá trình thiết lập BillingClient hoặc chưa cung cấp DeveloperBillingOptionParams để launchBillingFlow)

Người dùng thấy trải nghiệm người dùng tiêu chuẩn của hệ thống thanh toán của Google Play

Người dùng thấy trải nghiệm người dùng tiêu chuẩn của hệ thống thanh toán của Google Play

Đoạn mã sau đây minh hoạ cách tạo DeveloperBillingOptionParams:

Kotlin

val developerBillingOptionParams =
    DeveloperBillingOptionParams.newBuilder()
        .setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
        .setLinkUri("https://www.example.com/external/purchase")
        .setLaunchMode(
            DeveloperBillingOptionParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
        .build()

Java

DeveloperBillingOptionParams developerBillingOptionParams =
    DeveloperBillingOptionParams.newBuilder()
        .setBillingProgram(BillingProgram.EXTERNAL_PAYMENTS)
        .setLinkUri("https://www.example.com/external/purchase")
        .setLaunchMode(
            DeveloperBillingOptionParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
        .build();

Xử lý lựa chọn của người dùng

Tuỳ thuộc vào việc người dùng chọn hệ thống thanh toán của Google Play hay thanh toán trên trang web của bạn mà bạn sẽ xử lý phần còn lại của quy trình mua theo cách phù hợp.

Khi người dùng chọn thanh toán trên trang web của bạn hoặc trên một ứng dụng thanh toán

Nếu người dùng chọn thanh toán trên trang web của bạn, thì Google Play sẽ gọi DeveloperProvidedBillingListener để thông báo cho ứng dụng rằng người dùng đã chọn thanh toán trên trang web của bạn hoặc trên một ứng dụng thanh toán. Cụ thể, phương thức onUserSelectedDeveloperBilling() sẽ được gọi.

Nếu ứng dụng của bạn đặt launchMode thành LAUNCH_IN_EXTERNAL_BROWSER_OR_APP thì Google Play sẽ khởi chạy đường liên kết. Nếu launchMode được đặt thành CALLER_WILL_LAUNCH_LINK, thì ứng dụng của bạn có trách nhiệm khởi chạy đường liên kết. Khi liên kết người dùng với một ứng dụng thanh toán, bạn chịu trách nhiệm kiểm tra để đảm bảo người dùng đã cài đặt ứng dụng thanh toán đó trên thiết bị của họ.

Hãy dùng mã thông báo này để báo cáo mọi giao dịch phát sinh từ lựa chọn này (như giải thích trong hướng dẫn tích hợp phần phụ trợ).

Khi người dùng chọn hệ thống thanh toán của Google Play

Nếu người dùng chọn hệ thống thanh toán của Google Play, họ sẽ thực hiện tiếp giao dịch mua hàng qua Google Play.

  • Xem phần Xử lý giao dịch mua trong hướng dẫn tích hợp thư viện để biết thêm thông tin về cách xử lý các giao dịch mua mới trong ứng dụng thông qua hệ thống thanh toán của Google Play.
  • Xem phần Gói thuê bao mới trong hướng dẫn quản lý gói thuê bao để được hướng dẫn thêm về giao dịch mua gói thuê bao.

Xử lý các thay đổi trong gói thuê bao

Đối với nhà phát triển sử dụng phương thức thanh toán bên ngoài, tuỳ vào lựa chọn của người dùng mà giao dịch mua sẽ cần được xử lý thông qua hệ thống thanh toán của Google Play hoặc được báo cáo bằng externalTransactionId. Các thay đổi đối với gói thuê bao hiện tại từng được xử lý thông qua trang web của nhà phát triển sẽ được tiếp tục thực hiện qua chính hệ thống thanh toán đó cho đến khi hết hạn.

Phần này mô tả cách xử lý một số tình huống thường gặp về việc thay đổi gói thuê bao.

Quy trình nâng cấp và hạ cấp

Các thay đổi về gói thuê bao, bao gồm cả quy trình nâng cấp và hạ cấp, sẽ được xử lý theo các cách riêng, tuỳ thuộc vào việc gói thuê bao ban đầu được mua thông qua hệ thống thanh toán của Google Play hay thông qua trang web của nhà phát triển.

Các gói bổ sung phụ thuộc vào một gói thuê bao hiện có, dùng chung phương thức thanh toán và có mức phí định kỳ tương đương sẽ được xử lý như gói nâng cấp. Đối với các tiện ích bổ sung khác, người dùng phải chọn được hệ thống thanh toán họ muốn sử dụng. Bắt đầu trải nghiệm mua hàng mới bằng cách sử dụng launchBillingFlow(), như mô tả trong phần khởi chạy quy trình thanh toán bên ngoài.

Gói thuê bao mua qua trang web của nhà phát triển hoặc một ứng dụng thanh toán

Đối với gói thuê bao ban đầu được người dùng chọn mua qua trang web của nhà phát triển hoặc một ứng dụng thanh toán, yêu cầu nâng cấp hoặc hạ cấp của người dùng sẽ được xử lý thông qua trang web của nhà phát triển hoặc một ứng dụng thanh toán mà người dùng không cần chọn lần nữa.

Để thực hiện việc này, hãy gọi launchBillingFlow() khi người dùng yêu cầu nâng cấp hoặc hạ cấp. Thay vì chỉ định các tham số khác trong đối tượng SubscriptionUpdateParams, hãy sử dụng setOriginalExternalTransactionId(), cung cấp mã giao dịch bên ngoài cho giao dịch mua ban đầu.

Bạn cũng phải cung cấp DeveloperBillingOptionParams trong lệnh gọi này. Thao tác này sẽ không cho thấy màn hình lựa chọn của người dùng, vì lựa chọn của người dùng cho giao dịch mua ban đầu được giữ nguyên cho việc nâng cấp và hạ cấp. Bạn phải tạo một mã giao dịch bên ngoài mới cho giao dịch này như mô tả tại đây.

Khi hoàn tất quy trình nâng cấp hoặc hạ cấp gói thuê bao bằng trang web của nhà phát triển hoặc một ứng dụng thanh toán, bạn cần báo cáo giao dịch mới bằng mã thông báo giao dịch bên ngoài nhận được thông qua lệnh gọi trước đó đối với giao dịch mua gói thuê bao mới.

Gói thuê bao mua qua hệ thống thanh toán của Google Play

Tương tự như vậy, đối với người dùng mua gói thuê bao hiện tại qua hệ thống thanh toán của Google Play sau khi đưa ra lựa chọn, họ sẽ thấy quy trình thanh toán tiêu chuẩn của Google Play. Bạn không được đặt DeveloperBillingOptionParams trong lệnh gọi đến launchBillingFlow.

Huỷ và khôi phục gói thuê bao

Người dùng có thể huỷ gói thuê bao của họ bất cứ lúc nào. Khi người dùng huỷ một gói thuê bao, quá trình chấm dứt hoạt động của gói thuê bao này có thể bị trì hoãn cho đến khi kỳ thanh toán kết thúc. Ví dụ: nếu người dùng huỷ gói thuê bao hằng tháng vào giữa tháng, thì họ vẫn có thể tiếp tục sử dụng dịch vụ đó trong khoảng 2 tuần còn lại cho đến khi bị xoá quyền truy cập. Trong thời gian này, về mặt kỹ thuật thì gói thuê bao vẫn đang hoạt động, nên người dùng vẫn sử dụng được dịch vụ.

Không có gì lạ khi người dùng đổi ý không huỷ gói thuê bao nữa trong thời gian gói thuê bao này còn hoạt động. Trong hướng dẫn này, việc này được gọi là khôi phục. Các phần sau đây mô tả cách xử lý các tình huống khôi phục gói thuê bao khi bạn tích hợp API thanh toán bên ngoài.

Gói thuê bao mua qua trang web của nhà phát triển

Nếu có mã giao dịch bên ngoài cho một gói thuê bao đã huỷ, thì bạn không cần gọi launchBillingFlow() để khôi phục gói thuê bao đó. Vì vậy, bạn không nên sử dụng mã này cho loại quy trình kích hoạt này. Nếu người dùng khôi phục gói thuê bao đã huỷ trong khi thời gian hoạt động của gói thuê bao đó vẫn còn, thì sẽ không có giao dịch nào xảy ra tại thời điểm đó cả. Có thể bạn chỉ cần tiếp tục báo cáo về việc gia hạn khi kết thúc chu kỳ sử dụng hiện tại và bắt đầu đợt gia hạn tiếp theo. Trong đó có cả trường hợp người dùng nhận được một khoản tín dụng hoặc giá gia hạn đặc biệt trong quá trình khôi phục gói thuê bao (ví dụ: chương trình khuyến mãi để khuyến khích người dùng tiếp tục sử dụng gói thuê bao).

Gói thuê bao mua qua hệ thống thanh toán của Google Play

Nhìn chung, người dùng có thể khôi phục gói thuê bao trên hệ thống thanh toán của Google Play. Đối với những gói thuê bao ban đầu được mua trên hệ thống thanh toán của Google Play nhưng sau đó bị huỷ, nếu gói thuê bao đó vẫn còn trong thời gian hoạt động, thì người dùng có thể chọn không huỷ nữa thông qua tính năng Đăng ký lại của Google Play. Trong trường hợp đó, bạn sẽ nhận được thông báo theo thời gian thực dành cho nhà phát triển SUBSCRIPTION_RESTARTED trong phần phụ trợ, đồng thời sẽ không phát hành mã thông báo giao dịch mua mới. Mã thông báo gốc sẽ được dùng để tiếp tục gói thuê bao. Để tìm hiểu cách quản lý tính năng khôi phục trong hệ thống thanh toán của Google Play, hãy xem phần Khôi phục trong hướng dẫn quản lý gói thuê bao.

Trên ứng dụng, bạn cũng có thể gọi launchBillingFlow() để kích hoạt quy trình khôi phục gói thuê bao trong hệ thống thanh toán của Google Play. Vui lòng xem phần Trước khi gói thuê bao hết hạn – trong ứng dụng để được giải thích về cách thực hiện việc này. Trong trường hợp người dùng đã trải qua quy trình lựa chọn đối với giao dịch mua ban đầu (đã bị huỷ nhưng vẫn còn hoạt động), hệ thống sẽ tự động phát hiện lựa chọn của họ và cho thấy giao diện người dùng để khôi phục giao dịch mua này. Họ sẽ được yêu cầu xác nhận việc mua lại gói thuê bao thông qua Google Play, nhưng không cần thực hiện lại quy trình lựa chọn của người dùng. Trong trường hợp này, hệ thống sẽ phát hành mã thông báo giao dịch mua mới cho người dùng. Phần phụ trợ của bạn sẽ nhận được một Thông báo theo thời gian thực dành cho nhà phát triển SUBSCRIPTION_PURCHASED và giá trị linkedPurchaseToken của trạng thái giao dịch mua mới được thiết lập như trong trường hợp nâng cấp hoặc hạ cấp gói thuê bao, với mã thông báo của giao dịch mua cũ cho gói thuê bao đã bị huỷ.

Đăng ký lại

Nếu một gói thuê bao hết hạn hoàn toàn, cho dù là do gói thuê bao đó bị huỷ hay không khôi phục được do bị từ chối thanh toán (tạm ngưng tài khoản), thì người dùng phải đăng ký lại nếu muốn bắt đầu sử dụng lại.

Bạn cũng có thể cho phép đăng ký lại thông qua ứng dụng (quy trình đăng ký lại sẽ được xử lý tương tự như quy trình đăng ký chuẩn). Người dùng phải chọn được hệ thống thanh toán họ muốn sử dụng. launchBillingFlow() có thể được gọi trong trường hợp này, như mô tả trong phần bắt đầu quy trình thanh toán bên ngoài.

Xử lý phản hồi

Khi xảy ra lỗi, các phương thức isBillingProgramAvailableAsync(), createBillingProgramReportingDetailsAsync(), launchBillingFlow() có thể cung cấp BillingResponseCode khác với BillingResponseCode.OK. Hãy cân nhắc xử lý các mã phản hồi này như sau:

  • BillingResponseCode.ERROR: Đây là lỗi nội bộ. Không tiếp tục giao dịch hoặc mở trang web bên ngoài. Thử lại bằng cách gọi lại API.
  • BillingResponseCode.FEATURE_NOT_SUPPORTED: Cửa hàng Play không hỗ trợ các API thanh toán bên ngoài trên thiết bị hiện tại. Không tiếp tục giao dịch hoặc mở trang web bên ngoài.
  • BillingResponseCode.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.
  • BillingResponseCode.USER_CANCELED: Không tiếp tục mở trang web hoặc ứng dụng bên ngoài. Gọi launchBillingFlow() lại để hiện hộp thoại thông tin cho người dùng vào lần tiếp theo bạn tìm cách chuyển hướng người dùng ra khỏi ứng dụng.
  • BillingResponseCode.BILLING_UNAVAILABLE: Giao dịch không đủ điều kiện để thanh toán bên ngoài, do đó, nhà phát triển sẽ không thể sử dụng hệ thống thanh toán của mình 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.
  • BillingResponseCode.NETWORK_ERROR, BillingResponseCode.SERVICE_DISCONNECTED, BillingResponseCode.SERVICE_UNAVAILABLE: Đây là những lỗi tạm thời mà bạn nên xử lý bằng chính sách thử lại thích hợp. Trong trường hợp SERVICE_DISCONNECTED, hãy thiết lập lại kết nối với Google Play trước khi thử lại.

Kiểm thử đường liên kết thanh toán bên ngoài

Bạn nên sử dụng người kiểm thử được cấp phép để kiểm thử công cụ tích hợp thanh toán bên ngoài. Bạn sẽ không bị lập hoá đơn cho những giao dịch do tài khoản người kiểm thử được cấp phép thực hiện. Hãy xem bài viết Kiểm 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 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ợ.