Khai thác thị trường mới nhờ giá sản phẩm theo khu vực

1. Giới thiệu

Trong lớp học lập trình này, bạn sẽ tập trung vào việc tạo một sản phẩm tính phí một lần, xác định lựa chọn mua sản phẩm đó, đặt giá theo khu vực và kiểm thử quy trình mua sản phẩm tính phí một lần.

Đối tượng người xem

Lớp học lập trình này nhắm đến các nhà phát triển ứng dụng Android muốn sử dụng Play Console để quản lý danh mục sản phẩm tính phí một lần.

Những điều bạn sẽ học được...

  • Mô hình đối tượng sản phẩm tính phí một lần .
  • Cách di chuyển và sử dụng Google Play Console để quản lý danh mục sản phẩm tính phí một lần.
  • Cách dịch chi tiết sản phẩm tính phí một lần sang nhiều ngôn ngữ mà không tốn chi phí.
  • Cách thiết lập tình trạng còn hàng và giá theo khu vực cho các sản phẩm tính phí một lần.
  • Cách sử dụng API Thư viện Play Billing để truy vấn chi tiết sản phẩm tính phí một lần.
  • Cách kiểm thử sản phẩm tính phí một lần bằng Play Billing Lab.

Những điều bạn cần...

2. Sản phẩm tính phí một lần

Mô hình đối tượng sản phẩm tính phí một lần giúp bạn linh hoạt hơn trong cách bán sản phẩm và giảm mức độ phức tạp khi quản lý sản phẩm. Mô hình đối tượng tách biệt những gì đang được bán với cách thức bán, cho phép cùng một quyền có nhiều điểm giá và nhiều cách tiếp thị cho người dùng. Mô hình đối tượng có 3 cấp phân cấp:

  • Sản phẩm tính phí một lần – Đối tượng sản phẩm xác định mặt hàng mà người dùng đang mua.
  • Lựa chọn mua – Lựa chọn mua xác định cách cấp quyền sử dụng sản phẩm cho người dùng, mức giá và vị trí (khu vực) mà sản phẩm được phân phối. Một sản phẩm có thể có nhiều lựa chọn mua, kèm theo là các mức giá khác nhau ở những vùng khác nhau.
  • Ưu đãi – Ưu đãi có thể ảnh hưởng đến giá của lựa chọn mua được liên kết, đồng thời có thể được dùng để lập mô hình ưu đãi giảm giá hoặc đơn đặt hàng trước. Một lựa chọn mua có thể có nhiều ưu đãi.

Sơ đồ sau đây cho thấy mô hình đối tượng sản phẩm tính phí một lần.

codelab-otp-model.png Hình 1: Mô hình đối tượng tính phí một lần.

Để biết thêm thông tin, hãy xem bài viết tổng quan về sản phẩm tính phí một lần.

3. Tạo ứng dụng mẫu

Lớp học lập trình này sử dụng một ứng dụng Android mẫu để hướng dẫn bạn cách quản lý sản phẩm tính phí một lần. Ứng dụng mẫu được thiết kế để trở thành một ứng dụng Android hoạt động đầy đủ chức năng, có mã nguồn hoàn chỉnh cho thấy các khía cạnh sau:

  • Tích hợp ứng dụng với PBL
  • Tìm nạp sản phẩm tính phí một lần và các lựa chọn mua liên quan
  • Chạy quy trình mua với giá theo khu vực

Video minh hoạ sau đây cho thấy giao diện và hành vi của ứng dụng mẫu sau khi được triển khai và chạy.

Nếu đã quen thuộc với sản phẩm tính phí một lần và Thư viện Play Billing (PBL), bạn có thể tải ứng dụng mẫu xuống và dùng thử.

Điều kiện tiên quyết

Trước khi tạo và triển khai ứng dụng mẫu, hãy làm như sau:

Tạo

Mục tiêu của bước tạo bản dựng này là tạo một tệp gói ứng dụng Android đã ký của ứng dụng mẫu.

Để tạo gói ứng dụng Android, hãy làm theo các bước sau:

  1. Tải ứng dụng mẫu xuống từ GitHub.
  2. Tạo ứng dụng mẫu. Trước khi tạo, hãy thay đổi tên gói của ứng dụng mẫu rồi tạo. Nếu bạn có các gói của ứng dụng khác trong Play Console, hãy đảm bảo tên gói mà bạn cung cấp cho ứng dụng mẫu là duy nhất.

    Lưu ý: Việc tạo ứng dụng mẫu chỉ tạo một tệp APK mà bạn có thể dùng để kiểm thử cục bộ. Tuy nhiên, việc chạy ứng dụng không tìm nạp sản phẩm và giá vì các sản phẩm chưa được định cấu hình trong Play Console.
  3. Tạo gói ứng dụng Android đã ký.
    1. Tạo khoá tải lên và kho khoá
    2. Ký ứng dụng bằng khoá tải lên
    3. Định cấu hình Tính năng ký ứng dụng của Play

Bước tiếp theo là tải gói ứng dụng Android lên Google Play Console.

4. Tạo sản phẩm tính phí một lần trong Play Console

Để tạo sản phẩm tính phí một lần trong Google Play Console, bạn cần có một ứng dụng trong Play Console. Tạo một ứng dụng trong Play Console, sau đó tải gói ứng dụng đã ký mà bạn đã tạo trước đó lên.

Tạo ứng dụng

Cách tạo ứng dụng:

  1. Đăng nhập vào Google Play Console bằng tài khoản nhà phát triển.
  2. Nhấp vào Create app (Tạo ứng dụng). Thao tác này sẽ mở trang Create app (Tạo ứng dụng).
  3. Nhập tên ứng dụng, chọn ngôn ngữ mặc định và các thông tin khác liên quan đến ứng dụng.
  4. Nhấp vào Create app (Tạo ứng dụng). Thao tác này sẽ tạo một ứng dụng trong Google Play Console.

Bây giờ, bạn có thể tải gói ứng dụng đã ký của ứng dụng mẫu lên.

Tải gói ứng dụng đã ký lên

  1. Tải gói ứng dụng đã ký lên kênh thử nghiệm nội bộ của Google Play Console. Chỉ sau khi tải lên, bạn mới có thể định cấu hình các tính năng liên quan đến việc kiếm tiền trong Play Console.
  2. Nhấp vào Test and release > Testing > Internal release > Create new release (Kiểm thử và phát hành > Kiểm thử > Bản phát hành nội bộ > Tạo bản phát hành mới).
  3. Nhập tên bản phát hành và tải tệp APK đã ký lên.
  4. Nhấp vào Next (Tiếp theo), rồi nhấp vào Save and publish (Lưu và phát hành).

Bây giờ, bạn có thể tạo sản phẩm tính phí một lần.

Tạo sản phẩm tính phí một lần

Cách tạo sản phẩm tính phí một lần:

  1. Trong Google Play Console, trên trình đơn điều hướng bên trái, hãy chuyển đến Kiếm tiền qua Play > Sản phẩm > Sản phẩm tính phí một lần.
  2. Nhấp vào Create one-time product (Tạo sản phẩm tính phí một lần).
  3. Nhập thông tin chi tiết về sản phẩm sau:
    • Mã sản phẩm: Nhập một mã duy nhất. Ví dụ: trending_movie_1.
    • (Không bắt buộc) Thẻ: Thêm các thẻ có liên quan.
    • Tên: Nhập tên sản phẩm. Ví dụ: Product Movie.
    • Nội dung mô tả: Nhập nội dung mô tả sản phẩm. Ví dụ: Product Description.
    Dịch tên và nội dung mô tả sản phẩm theo cách thủ công
    Theo mặc định, tên và nội dung mô tả sản phẩm được viết bằng ngôn ngữ Tiếng Anh (Hoa Kỳ) – en-US. Bạn cũng có thể nhập tên và nội dung mô tả theo cách thủ công bằng các ngôn ngữ khác. Để nhập thông tin chi tiết, hãy nhấp vào Manage translations (Quản lý bản dịch), chọn ngôn ngữ mà bạn muốn nhập văn bản đã dịch, sau đó nhấp vào Apply (Áp dụng). Hình ảnh sau đây cho thấy lựa chọn Manage translations (Quản lý bản dịch):manage-translations.pngHình 2: Quản lý bản dịch.

    Các ngôn ngữ bạn đã chọn sẽ xuất hiện trong trình đơn thả xuống ngôn ngữ. Chọn từng ngôn ngữ rồi nhập tên và nội dung mô tả tương ứng bằng ngôn ngữ đã chọn. Bạn cũng có thể dịch tên sản phẩm và nội dung mô tả một cách tự động mà không tốn chi phí. Để biết thêm thông tin, hãy xem phần Dịch sản phẩm tính phí một lần trong lớp học lập trình này.

    Lưu ý: Để phục vụ mục đích của lớp học lập trình này, bạn có thể bỏ qua việc định cấu hình trường Biểu tượng và phần Thuế, tuân thủ và chương trình.
  4. Nhấp vào Tiếp theo.
  5. Thêm lựa chọn mua và định cấu hình phạm vi cung cấp theo khu vực. Một sản phẩm tính phí một lần cần có ít nhất một lựa chọn mua, xác định cách cấp quyền sử dụng, giá và phạm vi cung cấp theo khu vực. Đối với lớp học lập trình này, chúng ta sẽ thêm lựa chọn Mua tiêu chuẩn cho sản phẩm.

    Trong phần Lựa chọn mua, hãy nhập các thông tin sau:
    • Mã lựa chọn mua: Nhập một mã duy nhất. Ví dụ: buy-movie.
    • Loại giao dịch mua: Chọn Mua.
    • (Không bắt buộc) Thẻ: Thêm các thẻ dành riêng cho lựa chọn mua này.
    • (Không bắt buộc) Nhấp vào Tuỳ chọn nâng cao để định cấu hình các tuỳ chọn nâng cao. Để phục vụ mục đích của lớp học lập trình này, bạn có thể bỏ qua việc định cấu hình các tuỳ chọn nâng cao.
  6. Tiếp theo, bạn phải định cấu hình phạm vi cung cấp theo khu vực và giá cho lựa chọn mua. Trong phạm vi cung cấp theo khu vực, bạn sẽ chỉ định các khu vực có sản phẩm của mình, bao gồm cả những khu vực mà ứng dụng của bạn chưa được phát hành. Theo mặc định, lựa chọn mua sẽ có ở tất cả các khu vực.

    Trong phần Phạm vi cung cấp và giá, hãy nhấp vào Chỉnh sửa phạm vi cung cấp và quyền truy cập > Đặt thành không có sẵn. Xin lưu ý rằng theo mặc định, tất cả các khu vực đều được đặt thành Có sẵn.
    1. Chọn tất cả các quốc gia ngoại trừ France, SpainUnited States, sau đó nhấp vào Set to unavailable (Đặt thành không có sẵn).
    2. Trong trình đơn thả xuống All regions (Tất cả khu vực), hãy chọn Available countries and regions (Các quốc gia và khu vực có sẵn). Thao tác này chỉ hiển thị những quốc gia mà bạn đã chọn ở bước trước.
    3. Đối với mỗi quốc gia có sẵn, hãy nhấp vào biểu tượng chỉnh sửa trong cột Price (Giá). Thao tác này sẽ hiển thị một hộp thoại để chỉnh sửa giá. Nhập và lưu các mức giá sau:
      • Đối với France, hãy nhập 10 EUR
      • Đối với Spain, hãy nhập 8 EUR
      • Đối với United States, hãy nhập 13 USD
  7. Nhấp vào Kích hoạt. Thao tác này sẽ cung cấp sản phẩm tính phí một lần của bạn với lựa chọn mua Mua.

Lưu ý: Đơn vị tiền tệ của giá theo khu vực sẽ hiển thị dựa trên chế độ cài đặt quốc gia trên Play của người dùng. Ví dụ: nếu quốc gia trên Play của người dùng được đặt thành Pháp, thì giá sản phẩm tính phí một lần sẽ hiển thị bằng Euro.

Video về cách tạo sản phẩm tính phí một lần

Video sau đây cho thấy các bước tạo sản phẩm tính phí một lần đã được mô tả trước đó.

Thêm lựa chọn mua theo hình thức thuê

Bây giờ, hãy thêm lựa chọn mua theo hình thức thuê vào sản phẩm tính phí một lần mà bạn đã tạo trước đó.

  1. Trong Google Play Console, trên trình đơn điều hướng bên trái, hãy chuyển đến Kiếm tiền qua Play > Sản phẩm > Sản phẩm tính phí một lần.
  2. Nhấp vào mũi tên bên phải sản phẩm có mã sản phẩm trending_movie_1 mà bạn đã tạo ở bước trước.
  3. Nhấp vào Thêm lựa chọn mua.
  4. Trong phần Lựa chọn mua, hãy nhập các thông tin sau:
    • Mã lựa chọn mua: Nhập rent-movie.
    • Loại giao dịch mua: Chọn Thuê.
    • Thời hạn thuê: Chọn 48 giờ.
    • Thời hạn bắt đầu thuê: Chọn 24 giờ.
    • (Không bắt buộc) Thẻ: Thêm các thẻ dành riêng cho lựa chọn mua này.
    • (Không bắt buộc) Nhấp vào Tuỳ chọn nâng cao để định cấu hình các tuỳ chọn nâng cao. Để phục vụ mục đích của lớp học lập trình này, bạn có thể bỏ qua việc định cấu hình các tuỳ chọn nâng cao.
  5. Tiếp theo, tương tự như lựa chọn mua, hãy định cấu hình phạm vi cung cấp theo khu vực cho lựa chọn mua theo hình thức thuê. Xem bước 6 và 7 trong phần trước. Khi đặt giá theo khu vực, hãy đặt một mức giá khác cho việc thuê. Ví dụ:
    • France – 5 EUR
    • Spain – 4 EUR
    • United States – 7 USD.

5. Dịch thông tin chi tiết về sản phẩm tính phí một lần

Bạn có thể dịch tên sản phẩm và nội dung mô tả mà không tốn thêm chi phí bằng cách sử dụng tính năng bản dịch máy có trong Google Play Console.

Để dịch tiêu đề và nội dung mô tả, hãy làm như sau:

  1. Trong Google Play Console, trên trình đơn điều hướng bên trái, hãy chuyển đến Phát triển người dùng > Bản dịch > Sản phẩm trên Cửa hàng Play và trong ứng dụng.
  2. Nhấp vào Tạo đơn đặt hàng.
  3. Chọn tuỳ chọn Machine translation at no cost (Dịch máy miễn phí), sau đó nhấp vào Next (Tiếp theo).
  4. Trong các ngôn ngữ Translate to (Dịch sang), hãy chọn French – fr-FR (Tiếng Pháp – fr-FR) và Spanish – es-ES (Tiếng Tây Ban Nha – es-ES), sau đó nhấp vào Next (Tiếp theo).
  5. Chọn One-time products and subscriptions (Sản phẩm tính phí một lần và gói thuê bao), sau đó nhấp vào Translate and view translations (Dịch và xem bản dịch). Thao tác này sẽ hiển thị một biểu ngữ tuyên bố từ chối trách nhiệm. Xác nhận tuyên bố từ chối trách nhiệm.
  6. Bây giờ, bạn sẽ thấy danh sách các ngôn ngữ đã dịch. Nhấp vào Review and apply (Xem xét và áp dụng) cho một ngôn ngữ. Xem lại văn bản rồi nhấp vào Apply all translations (Áp dụng tất cả bản dịch). Lặp lại bước này cho tất cả các ngôn ngữ mà bạn đã chọn để dịch.

Sau khi dịch, bạn có thể chỉnh sửa văn bản đã dịch trong Play Console. Cách chỉnh sửa văn bản đã dịch:

  1. Mở trang One-time products > [your one-time product] > Edit one-time product > Edit one-time product details (Sản phẩm tính phí một lần > [sản phẩm tính phí một lần] > Chỉnh sửa sản phẩm tính phí một lần > Chỉnh sửa chi tiết sản phẩm tính phí một lần).
  2. Chọn ngôn ngữ bắt buộc trong trình đơn thả xuống ngôn ngữ. Thao tác này sẽ hiển thị văn bản bằng ngôn ngữ đã chọn. Hình ảnh sau đây cho thấy cách chọn một ngôn ngữ để chỉnh sửa văn bản đã dịch:

    edit-translations.png Hình 3: Chỉnh sửa văn bản đã dịch.
  3. Chỉnh sửa văn bản theo yêu cầu, sau đó nhấp vào Save changes (Lưu thay đổi).

Người dùng có thể nhìn thấy văn bản đã dịch dựa trên lựa chọn ưu tiên về ngôn ngữ trên điện thoại của người dùng. Ví dụ: nếu ngôn ngữ trên điện thoại của người dùng được đặt thành tiếng Pháp, thì tiêu đề và nội dung mô tả sản phẩm tính phí một lần sẽ hiển thị bằng tiếng Pháp. Hình ảnh mẫu sau đây cho thấy cách và vị trí văn bản đã dịch sẽ xuất hiện bằng nhiều ngôn ngữ.

post-translation.pngHình 4: Văn bản đã dịch trong ứng dụng của bạn.

Video về cách định cấu hình bản dịch

Video sau đây cho thấy các bước định cấu hình bản dịch đã được mô tả trước đó.

6. Tích hợp với PBL

Để tích hợp ứng dụng của bạn với Thư viện Play Billing (PBL), hãy làm theo các bước sau:

  1. Thêm phần phụ thuộc Thư viện Play Billing vào ứng dụng mẫu.
    dependencies {
    val billing_version = "8.0.0"
    
    implementation("com.android.billingclient:billing-ktx:$billing_version")
    }
    
  2. Khởi chạy BillingClient. BillingClient là SDK ứng dụng nằm trên ứng dụng của bạn và giao tiếp với Thư viện Play Billing. Đoạn mã sau đây cho thấy cách khởi chạy ứng dụng thanh toán.
    private BillingClient createBillingClient() {
    return BillingClient.newBuilder(activity)
        .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())
        // For one-time products, add a listener to process and acknowledge the purchases. This will notify
        // Google the purchase was processed.
        // For client-only apps, use billingClient.acknowledgePurchase().
        // If you have a secure backend, you must acknowledge purchases on your server using the
        // server-side API.
        // See https://developer.android.com/google/play/billing/security#acknowledge
        // In this sample snippet purchases aren't processed. You must
        // implement your business logic to process and acknowledge the purchases.
        .setListener((billingResult, purchases) -> {})
        .enableAutoServiceReconnection()
        .build();
     }
    
  3. Kết nối với Google Play.Đoạn mã sau đây cho thấy cách kết nối với Google Play.
    /**
    * Starts the billing connection with Google Play. This method should be called exactly once
    * before any other methods in this class.
    *
    * @param productList The list of products to query for after the connection is established.
    */
    public void startBillingConnection(List<Product> productList) {
        billingClient.startConnection(
            new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(BillingResult billingResult) {
                if (billingResult.getResponseCode() == BillingResponseCode.OK) {
                Log.d(TAG, "Billing Client Connection Successful");
                queryProductDetails(productList);
                } else {
                Log.e(TAG, "Billing Client Connection Failed: " + billingResult.getDebugMessage());
                listener.onBillingSetupFailed(billingResult); // Propagate the error to the listener to show a message to the user.
                }
            }
    
            @Override
            public void onBillingServiceDisconnected() {
                Log.e(TAG, "Billing Client Connection Lost");
                listener.onBillingError("Billing Connection Lost");
            }
            });
    }
    
  4. Tìm nạp chi tiết sản phẩm tính phí một lần.Sau khi tích hợp ứng dụng với PBL, bạn phải tìm nạp chi tiết sản phẩm tính phí một lần vào ứng dụng của mình. Đoạn mã sau đây cho thấy cách tìm nạp chi tiết sản phẩm tính phí một lần trong ứng dụng của bạn.
    private void queryProductDetails(List<Product> productList) {
        QueryProductDetailsParams queryProductDetailsParams =
            QueryProductDetailsParams.newBuilder().setProductList(productList).build();
    
        billingClient.queryProductDetailsAsync(
            queryProductDetailsParams,
            new ProductDetailsResponseListener() {
            @Override
            public void onProductDetailsResponse(
                BillingResult billingResult, QueryProductDetailsResult productDetailsResponse) {
                if (billingResult.getResponseCode() == BillingResponseCode.OK) {
                List<ProductDetails> productDetailsList =
                    productDetailsResponse.getProductDetailsList();
                    listener.onProductDetailsResponse(productDetailsList);
                } else {
                Log.e(TAG, "QueryProductDetailsAsync Failed: " + billingResult.getDebugMessage());
                listener.onBillingError("Query Products Failed: " + billingResult.getResponseCode());
                }
            }
            });
    }
    
    Việc tìm nạp sản phẩm tính phí một lần (trending_movie_1 trong ví dụ này) trong ProductDetails sẽ cung cấp cho bạn một phản hồi tương tự như sau:
    {
        "productId": "trending_movie_1",
        "type": "inapp",
        "title": "Purrfect Mayhem: The Rewind Protocol (Movies All Day | Play Samples)",
        "name": "Purrfect Mayhem: The Rewind Protocol",
        "description": "Dr. Arid Thorne and a smart tiger named Yolo find a mysterious tape. It's a \"Rewind Protocol\" to fix time. A shadowy group, the Clockinator, hunts them to seize the tape's power.",
        "skuDetailsToken": "<---skuDetailsToken--->",
        "oneTimePurchaseOfferDetails": {},
        "oneTimePurchaseOfferDetailsList": [
            {
                "priceAmountMicros": 13000000,
                "priceCurrencyCode": "USD",
                "formattedPrice": "$13.00",
                "offerIdToken": "<---buy offerIdToken --->",
                "purchaseOptionId": "buy-option",
                "offerTags": [
                    "adventure",
                    "mystery"
                ]
            },
            {
                "priceAmountMicros": 7000000,
                "priceCurrencyCode": "USD",
                "formattedPrice": "$7.00",
                "offerIdToken": "<---rent offerIdToken--->",
                "purchaseOptionId": "rent-option",
                "offerTags": [
                    "adventure",
                    "mystery"
                ],
                "rentalDetails": {
                    "rentalPeriod": "P30D",
                    "rentalExpirationPeriod": "PT24H"
                }
            }
        ]
    }
    
    Xin lưu ý rằng các lựa chọn mua và thuê có trong oneTimePurchaseOfferDetailsList. Danh sách này có 2 lựa chọn mua (buy-optionrent-option) đã được định cấu hình trong Play Console. Bạn có thể xác định riêng từng lựa chọn mua bằng offerIdToken.
  5. Tìm nạp mã thông báo ưu đãi cho các ưu đãi Thuê và Mua. Bạn cần có mã thông báo ưu đãi để khởi chạy quy trình thanh toán ở bước 6.
    @Override
    public void onProductDetailsResponse(List<ProductDetails> productDetailsList) {
    
        if (productDetailsList != null && !productDetailsList.isEmpty()) {
    
            // Iterate over all details of the queried product in step 4.
            for (ProductDetails productDetails : productDetailsList) {
    
                // Get the list of all the offers associated with the product.
                List<ProductDetails.OneTimePurchaseOfferDetails> offerDetailsList =
                        productDetails.getOneTimePurchaseOfferDetailsList();
    
                // Iterate over the offer details
                for (ProductDetails.OneTimePurchaseOfferDetails offerDetails : offerDetailsList) {
    
                    // For a Rent purchase option, the
                    // offerDetails.getRentalDetails() method returns
                    // the rent information. If this information is present,
                    // the offer corresponds to a Rent purchsae option.
                    if (offerDetails.getRentalDetails() != null) {
                        rentFormattedPrice = offerDetails.getFormattedPrice();
    
                        // Get the offerIdToken for the Rent purchase option
                        rentOfferToken = offerDetails.getOfferToken();
                        rentMovieTags = offerDetails.getOfferTags();
                    }
                    // If the offerDetails.getRentalDetails() returns
                    // null, the offer corresponds to a Buy purchsae option.
                    else {
                        buyFormattedPrice = offerDetails.getFormattedPrice();
    
                        // Get the offerIdToken for the Buy purchase option
                        buyOfferToken = offerDetails.getOfferToken();
                        buyMovieTags = offerDetails.getOfferTags();
                    }
                }
                updateUIButtons();
                return;
    
            }
        } else {
            Log.e(TAG, "No product details found for " + productId);
        }
    }
    
  6. Khởi chạy quy trình thanh toán.
    /**
     * Launches the billing flow for the product with the given offer token.
    *
    * @param activity The activity instance from which the billing flow will be launched.
    * @param productDetails The product details of the product to purchase.
    * @param offerToken The offer token of the product to purchase.
    * @return The result of the billing flow.
    */
    public void launchPurchase(Activity activity, ProductDetails productDetails, String offerToken) {
        ImmutableList<BillingFlowParams.ProductDetailsParams> productDetailsParamsList =
            ImmutableList.of(
                BillingFlowParams.ProductDetailsParams.newBuilder()
                    .setProductDetails(productDetails)
                    .setOfferToken(offerToken)
                    .build());
        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
            .setProductDetailsParamsList(productDetailsParamsList)
            .build();
        billingClient.launchBillingFlow(activity, billingFlowParams);
    }
    

Mẹo: Bạn cũng có thể thiết lập thông báo theo thời gian thực dành cho nhà phát triển (RTDN) để triển khai các chiến dịch thu hút lại và các chiến lược quản lý vòng đời giao dịch mua khác. Để hiểu cách thiết lập RTDN và xử lý thông báo bằng tính năng theo dõi và quyền chính xác, bạn nên xem lớp học lập trình Tối đa hoá khả năng tích hợp Play Billing

7. Kiểm thử lựa chọn mua

Trước khi cung cấp sản phẩm tính phí một lần trong ứng dụng thực, bạn có thể kiểm thử quá trình tích hợp PBL bằng người kiểm thử được cấp phép và Play Billing Lab.

Bạn sẽ tìm hiểu cách kiểm thử khả năng bản địa hoá giá và phạm vi cung cấp, trong đó ứng dụng chỉ có ở một số khu vực với mức giá khác nhau cho từng khu vực.

Điều kiện tiên quyết

Kiểm thử giá theo khu vực cho các lựa chọn mua

Để kiểm thử giá theo khu vực cho các lựa chọn mua, hãy làm như sau:

  1. Mở ứng dụng Play Billing Lab rồi đăng nhập với tư cách là người kiểm thử được cấp phép.
  2. Trong phần Configuration Settings (Cài đặt cấu hình), hãy nhấp vào Edit (Chỉnh sửa), chọn quốc gia France, sau đó nhấp vào Apply (Áp dụng). Ở đây, chúng ta đang chọn quốc gia trên Play để xác định đơn vị tiền tệ sẽ hiển thị trong ứng dụng.
  3. Đóng rồi mở lại ứng dụng mẫu. Bây giờ, ứng dụng sẽ hiển thị đơn vị tiền tệ mua và thuê cho France bằng Euro.

Để kiểm thử cho một quốc gia khác, hãy chọn Spain ở bước 2 rồi thực hiện bước 3.

Video kiểm thử Play Billing Lab

Video sau đây cho thấy các bước kiểm thử giá theo khu vực bằng ứng dụng mẫu.

8. Các bước tiếp theo

Tài liệu tham khảo

9. Xin chúc mừng!

Xin chúc mừng! Bạn đã di chuyển thành công trong Google Play Console để tạo một sản phẩm tính phí một lần mới, định cấu hình lựa chọn mua và kiểm thử quy trình mua bằng Play Billing Lab. Giờ đây, bạn đã hiểu rõ hơn về danh mục sản phẩm linh hoạt của Google Play cho các giao dịch mua tính phí một lần.

Khảo sát

Chúng tôi rất coi trọng ý kiến phản hồi của bạn về lớp học lập trình này. Hãy dành vài phút để hoàn thành bản khảo sát của chúng tôi.