Lưu ý: Kể từ ngày 2 tháng 8 năm 2022, tất cả các ứng dụng mới phải sử dụng Thư viện Billing phiên bản 4 trở lên. Chậm nhất vào ngày 1 tháng 11 năm 2022, tất cả các bản cập nhật cho ứng dụng hiện có đều phải sử dụng Thư viện Billing phiên bản 4 trở lên. Tìm hiểu thêm.

Thêm tính năng dành riêng cho sản phẩm thưởng

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Một phương thức để mở khoá sản phẩm và lợi ích trong ứng dụng cho người dùng là tạo sản phẩm thưởng hoặc vật phẩm mà người dùng nhận được sau khi xem một video quảng cáo. Bằng cách cung cấp sản phẩm thưởng, bạn cho phép người dùng nhận phần thưởng và lợi ích trong ứng dụng mà không cần thực hiện giao dịch mua trực tiếp.

Tài liệu này giải thích cách triển khai chức năng dành riêng cho sản phẩm thưởng. Mục sơ đồ quy trình làm việc của trang này minh hoạ quy trình đó.

Xác định sản phẩm thưởng của ứng dụng

Sản phẩm thưởng có một SkuType của INAPP. Để đảm bảo người dùng có thể xem nhiều quảng cáo và nhận nhiều phần thưởng, sản phẩm cần được tiêu thụ.

Trước khi có thể cung cấp sản phẩm thưởng cho người dùng, bạn phải lấy SkuDetails cho sản phẩm đó. Để thực hiện điều này, hãy gọi hàm querySkuDetailsAsync() với loại sản phẩm là SkuType.INAPP.

Khai báo quảng cáo phù hợp với lứa tuổi

Để tạo điều kiện tuân thủ với các nghĩa vụ pháp lý liên quan đến trẻ em và người dùng chưa đủ tuổi hợp pháp, bao gồm cả Đạo luật bảo vệ quyền riêng tư của trẻ em trên mạng (COPPA)Quy định chung về bảo vệ dữ liệu (GDPR), ứng dụng phải khai báo quảng cáo nào nên được phân loại là hướng tới trẻ em tại Hoa Kỳ và quảng cáo nào hướng đến người dùng dưới độ tuổi hợp pháp để tự quản lý tài khoản hiện hành tại quốc gia của họ. Trung tâm trợ giúp AdMob giải thích khi nào bạn nên gắn thẻ cho các yêu cầu quảng cáo là được dành cho trẻ em và khi nào nên gắn thẻ xử lý nội dung dưới độ tuổi hợp pháp để tự quản lý tài khoản, cũng như tác động của việc làm này.

Khi bạn tạo ứng dụng thanh toán cho ứng dụng, hãy cân nhắc xem các yêu cầu quảng cáo có tặng thưởng nên được phân loại là hướng tới trẻ em hay không, hoặc có nên dành cho người dùng chưa đủ độ tuổi hợp pháp để tự quản lý tài khoản. Nếu cần thiết lập các hạn chế đối với những quảng cáo này, hãy gọi phương thức setChildDirected()setUnderAgeOfConsent(), truyền các giá trị thích hợp vào mỗi phương thức.

Đoạn mã sau đây cho biết cách khai báo rằng quảng cáo dạng video phù hợp với trẻ em hoặc người dùng chưa đủ độ tuổi hợp pháp để tự quản lý tài khoản:

Kotlin

val billingClient = BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build()

Java

BillingClient billingClient =
    BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build();

Tải quảng cáo dạng video

Bạn cần tải video trước khi hiển thị cho người dùng tuỳ chọn xem quảng cáo video để nhận sản phẩm thưởng. Để thực hiện việc này, hãy tạo một đối tượng RewardLoadParams, liên kết đối tượng này với đối tượng SkuDetails đại diện cho sản phẩm thưởng. Sau đó, hãy gọi phương thức loadRewardedSku() của ứng dụng thanh toán, truyền trong đối tượng RewardLoadParams và đối tượngRewardResponseListener.

Trình nghe RewardResponseListener sẽ được thông báo khi video tải xong. Trình nghe cũng được thông báo nếu video không có sẵn hoặc nếu xảy ra lỗi khác, chẳng hạn như máy chủ hết thời gian chờ.

Để duy trì hiệu suất của thiết bị khi tải video liên kết với sản phẩm thưởng của ứng dụng, hãy lưu ý các phương pháp hay nhất sau:

  • Tải cùng lúc tối đa ba SKU của sản phẩm thưởng.
  • Cố gắng tải video bất cứ khi nào người dùng truy cập vào ứng dụng. Bước này giúp bạn kiểm tra xem video có vẫn được tải và sẵn có hay không.
  • Khi quyết định thời điểm tải video, hãy cân bằng giữa mức sử dụng băng thông và khả năng phản hồi của ứng dụng, chọn ra sự kết hợp phù hợp nhất với trường hợp sử dụng của bạn:

    • Thời điểm sớm nhất để tải video là sau khi bạn gọi getSkuDetails() cho sản phẩm thưởng có liên quan. Ứng dụng vẫn có tính phản hồi cao nhưng bạn có thể lãng phí dữ liệu mạng khi tải một video mà người dùng không bao giờ xem.
    • Thời điểm muộn nhất để tải video là khi người dùng chuyển đến trang hiển thị video. Ứng dụng hiếm khi lãng phí băng thông trong trường hợp này, tuy nhiên người dùng có thể phải đợi một vài giây trước khi có thể nhấp vào nút xem video.

Đoạn mã sau đây minh hoạ quy trình tải quảng cáo dạng video phát trước khi người dùng nhận được sản phẩm thưởng:

Kotlin

if (skuDetails.isRewarded()) {
    val params = RewardLoadParams.Builder()
            .setSkuDetails(skuDetails)
            .build()
    mBillingClient.loadRewardedSku(params.build(),
            object : RewardResponseListener {
        override fun onRewardResponse(@BillingResponse responseCode : Int) {
            if (responseCode == BillingResponse.OK) {
                // Enable the reward product, or make
                // any necessary updates to the UI.
            }
        }
    })
}

Java

if (skuDetails.isRewarded()) {
    RewardLoadParams.Builder params = RewardLoadParams.newBuilder();
    params.setSkuDetails(skuDetails);
    mBillingClient.loadRewardedSku(params.build(),
        new RewardResponseListener() {
            @Override
            public void onRewardResponse(int responseCode) {
                if (responseCode == BillingResponse.OK) {
                      // Enable the reward product, or make
                      // any necessary updates to the UI.
                  }
            }
        });
}

Cung cấp giao dịch mua hàng tặng thưởng cho người dùng

Nếu Thư viện Google Play Billing tải thành công video liên kết với một sản phẩm thưởng, tức là RewardResponseListener đã nhận được responseCode của BillingResponse.OK – bạn có thể bắt đầu quy trình thanh toán.

Bạn bắt đầu phát quảng cáo cho sản phẩm thưởng bằng cách gọi hàm launchBillingFlow(), giống như đối với tất cả loại sản phẩm trong ứng dụng khác. Mặc dù người dùng không mua hàng trực tiếp để nhận sản phẩm thưởng, bạn vẫn cần phải bật quy trình thanh toán để người dùng có thể nhận và sử dụng sản phẩm.

Tiêu thụ sản phẩm

Để thông báo cho ứng dụng thanh toán rằng người dùng đã nhận và tiêu thụ sản phẩm thưởng, hãy xử lý giao dịch mua trong phương thức onPurchasesUpdated() của trình nghe ứng dụng thanh toán. Xin lưu ý rằng các giao dịch mua hàng có tặng thưởng cần được tiêu thụ.

Kiểm thử sản phẩm thưởng

Để kiểm thử cách ứng dụng tải quảng cáo dạng video và cung cấp cho người dùng sản phẩm thưởng, hãy nhờ đến người kiểm thử được cấp phép là những người nhận được quảng cáo thử nghiệm theo mặc định thay vì các quảng cáo thực. Để tìm hiểu cách thiết lập tài khoản cho những người kiểm thử này, hãy xem phần Kiểm thử ứng dụng Google Play Billing qua người dùng.

Một phương thức kiểm thử khác là dùng mã sản phẩm android.test.reward. Sản phẩm cụ thể này là tên đặt trước trong Google Play Billing, vì vậy, bạn không cần thêm sản phẩm đó vào danh sách sản phẩm trong ứng dụng trên Play Console.

Cảnh báo: Không sử dụng sản phẩm thực tế khi kiểm thử sản phẩm thưởng của ứng dụng, nếu không tài khoản có thể bị gắn cờ là tài khoản vi phạm hoặc gian lận.

Tuy nhiên, khi kiểm thử xong, đừng quên thay thế android.test.reward bằng mã sản phẩm của sản phẩm thưởng thực tế trước khi triển khai ứng dụng chính thức cho người dùng cuối.

Sơ đồ quy trình công việc của sản phẩm thưởng

Sơ đồ trình tự sau đây cho thấy cách người dùng, ứng dụng và Thư viện Google Play Billing hoạt động cùng nhau để hiển thị quảng cáo dạng video và cấp quyền truy cập vào sản phẩm thưởng cho người dùng:

Sơ đồ trình tự cho thấy giao thức của sản phẩm thưởng
Hình 1. Các bước để hoàn tất giao dịch mua sản phẩm thưởng bằng cách sử dụng Google Play Billing