Sử dụng Google Play Billing trong Hoạt động đáng tin cậy trên web

Hướng dẫn này dành cho các ứng dụng web được đóng gói dưới dạng Hoạt động đáng tin cậy trên web. Đối với ứng dụng Android được viết bằng Kotlin hoặc Java, hãy xem tài liệu về Google Play Billing.

Các ứng dụng trên Google Play bán hàng hoá kỹ thuật số hoặc gói thuê bao phải sử dụng Google Play Billing. Trong Hoạt động đáng tin cậy trên web, bạn tích hợp với hoạt động đó bằng cách sử dụng các API web sau, có trong Chrome 101 trở lên trên Android và ChromeOS:

Yêu cầu

Để thiết lập Google Play Billing, bạn cần có:

Không tính phí người dùng khi họ tải ứng dụng của bạn xuống qua Cửa hàng Play. PWA của bạn vẫn có trên web, vì vậy, việc tải xuống có tính phí không hạn chế quyền truy cập. Thay vào đó, hãy bán các tính năng hoặc nội dung thông qua tính năng mua hàng trong ứng dụng hoặc gói thuê bao.

Bật Play Billing trong dự án Android

Nếu bạn tạo ứng dụng bằng Bubblewrap, hãy bật tính năng playBilling trong twa-manifest.json ở thư mục gốc của dự án:

"features": {
  "playBilling": {
    "enabled": true
  }
}

Sau đó, hãy chạy bubblewrap update rồi đến bubblewrap build và tải gói Android mới lên Cửa hàng Play.

Nếu bạn tạo ứng dụng trong Android Studio, hãy thêm Thư viện Google Play Billing của Trình trợ giúp trình duyệt Android. Để biết các thay đổi bắt buộc đối với DelegationService và AndroidManifest.xml, hãy xem bản minh hoạ twa-play-billing.

Kiểm tra xem có hỗ trợ Google Play Billing không

Gọi getDigitalGoodsService() bằng giá trị nhận dạng của Cửa hàng Play, https://play.google.com/billing. Nếu thiếu phương thức hoặc lệnh gọi không thành công, hãy sử dụng một quy trình thanh toán khác:

if ('getDigitalGoodsService' in window) {
  try {
    const service =
        await window.getDigitalGoodsService('https://play.google.com/billing');
    // Google Play Billing is available.
  } catch (error) {
    // Google Play Billing isn't available. Use another payment flow.
  }
}

Hiển thị chi tiết sản phẩm

Sử dụng getDetails() để truy xuất tiêu đề, nội dung mô tả và giá cho mã sản phẩm của bạn, sao cho giá bạn hiển thị khớp với Cửa hàng Play:

const details = await service.getDetails(['shiny_sword', 'gem']);
for (const item of details) {
  const localizedPrice = new Intl.NumberFormat(
      navigator.language,
      {style: 'currency', currency: item.price.currency}
  ).format(item.price.value);

  renderProductDetails(
      item.itemId, item.title, localizedPrice, item.description);
}

Digital Goods API không thể liệt kê mã sản phẩm của bạn. Để truy vấn các thông tin này từ phần phụ trợ, hãy sử dụng Google Play Developer API.

Cách mua

Tạo PaymentRequest với https://play.google.com/billing làm phương thức thanh toán và mã sản phẩm là sku trong data. Google Play Billing sử dụng giá từ Play Console, vì vậy, total là bắt buộc nhưng bị bỏ qua.

Sau khi show() phân giải, hãy gửi mã thông báo mua hàng đến phần phụ trợ để xác minh và xác nhận giao dịch mua. Nếu bạn không xác nhận giao dịch mua trong vòng 3 ngày, Google Play sẽ hoàn tiền cho người dùng và thu hồi giao dịch mua.

async function makePurchase(service, sku) {
  const paymentMethods = [{
    supportedMethods: 'https://play.google.com/billing',
    data: {sku},
  }];
  // Required by the Payment Request API, but ignored by Google Play Billing.
  const paymentDetails = {
    total: {label: 'Total', amount: {currency: 'USD', value: '0'}},
  };

  const request = new PaymentRequest(paymentMethods, paymentDetails);
  try {
    const response = await request.show();
    const {purchaseToken} = response.details;

    if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
      // Optional: consume the purchase so the user can buy the item again.
      await service.consume(purchaseToken);
      await response.complete('success');
    } else {
      await response.complete('fail');
    }
  } catch (error) {
    // An AbortError usually means the user canceled the purchase.
  }
}

Kiểm tra giao dịch mua của người dùng

Sử dụng listPurchases() để tìm các mặt hàng mà người dùng sở hữu, chẳng hạn như gói thuê bao đang hoạt động, giao dịch mua chưa tiêu thụ hoặc mã khuyến mãi đã sử dụng. Xác minh từng giao dịch mua trên phần phụ trợ và xác nhận mọi giao dịch mua mà bạn chưa xác nhận:

const purchases = await service.listPurchases();
for (const p of purchases) {
  await verifyOrAcknowledgePurchaseOnBackend(p.purchaseToken, p.itemId);
  // Update the UI with items the user is entitled to.
}

Kiểm tra quá trình tích hợp

Để thử nghiệm trên thiết bị Android trước khi phát hành lên Cửa hàng Play, hãy làm theo các bước sau:

  1. Sử dụng Android 9 trở lên và bật tuỳ chọn cho nhà phát triển.
  2. Trong Chrome, hãy truy cập vào chrome://flags rồi bật #enable-debug-for-store-billing.
  3. Phân phát trang web qua HTTPS. Digital Goods API không hoạt động qua HTTP.

Khi ứng dụng của bạn được cài đặt từ Cửa hàng Play, bạn không cần cờ này. Để kiểm thử bằng tài khoản kiểm thử và sản phẩm kiểm thử, hãy xem phần Kiểm thử quá trình tích hợp Thư viện Google Play Billing.

Các bước tiếp theo