Korzystanie z Płatności w Google Play w zaufanej aktywności internetowej

Ten przewodnik dotyczy aplikacji internetowych spakowanych jako zaufana aktywność internetowa. W przypadku aplikacji na Androida napisanych w języku Kotlin lub Java zapoznaj się z dokumentacją Płatności w Google Play.

Aplikacje w Google Play, które sprzedają produkty cyfrowe lub subskrypcje, muszą korzystać z Płatności w Google Play. W zaufanej aktywności internetowej możesz zintegrować się z nią za pomocą tych interfejsów API dostępnych w Chrome 101 i nowszych wersjach na Androidzie i ChromeOS:

Wymagania

Aby skonfigurować Płatności w Google Play, musisz mieć:

Nie naliczaj opłat za pobieranie aplikacji ze Sklepu Play. Twoja aplikacja PWA jest nadal dostępna w internecie, więc płatne pobieranie nie ogranicza dostępu. Zamiast tego sprzedawaj funkcje lub treści za pomocą zakupów w aplikacji lub subskrypcji.

Włączanie Płatności w Play w projekcie aplikacji na Androida

Jeśli tworzysz aplikację za pomocą Bubblewrap, włącz funkcję playBilling w pliku twa-manifest.json w katalogu głównym projektu:

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

Następnie uruchom bubblewrap update, a potem bubblewrap build i prześlij nowy pakiet Androida do Sklepu Play.

Jeśli tworzysz aplikację w Android Studio, dodaj bibliotekę płatności w Google Play w Android Browser Helper. Wymagane zmiany w DelegationService i AndroidManifest.xml znajdziesz w filmie demonstracyjnym twa-play-billing.

Sprawdzanie obsługi Płatności w Google Play

Wywołaj getDigitalGoodsService() z identyfikatorem Sklepu Play https://play.google.com/billing. Jeśli brakuje metody lub wywołanie się nie powiedzie, użyj innego procesu płatności:

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.
  }
}

wyświetlania szczegółów produktu;

Użyj getDetails(), aby pobrać tytuł, opis i cenę dla identyfikatorów produktów, dzięki czemu wyświetlane ceny będą zgodne ze Sklepem 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);
}

Interfejs Digital Goods API nie może wyświetlić listy identyfikatorów produktów cyfrowych. Aby wysłać zapytanie z backendu, użyj Google Play Developer API.

Kupowanie

Utwórz PaymentRequest z https://play.google.com/billing jako formą płatności i identyfikatorem produktu sku w data. Płatności w Google Play używają ceny z Konsoli Play, więc parametr total jest wymagany, ale ignorowany.

Gdy show() zostanie rozwiązany, wyślij token zakupu do backendu, aby zweryfikować i potwierdzić zakup. Jeśli nie potwierdzisz zakupu w ciągu 3 dni, Google Play zwróci użytkownikowi środki i unieważni zakup.

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.
  }
}

Sprawdzanie zakupów użytkownika

Użyj listPurchases(), aby znaleźć produkty, które użytkownik posiada, takie jak aktywne subskrypcje, niewykorzystane zakupy lub wykorzystane kody promocyjne. Sprawdź każdy zakup w backendzie i potwierdź te, które nie zostały jeszcze potwierdzone:

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.
}

Testowanie integracji

Aby przetestować aplikację na urządzeniu z Androidem przed opublikowaniem jej w Sklepie Play, wykonaj te czynności:

  1. mieć Androida 9 lub nowszego z włączonymi opcjami programisty,
  2. W Chrome otwórz chrome://flags i włącz #enable-debug-for-store-billing.
  3. Wyświetlaj witrynę przez HTTPS. Interfejs Digital Goods API nie jest dostępny przez HTTP.

Jeśli aplikacja jest zainstalowana ze Sklepu Play, flaga nie jest potrzebna. Aby przeprowadzić testy za pomocą kont i produktów testowych, zapoznaj się z artykułem Testowanie integracji Biblioteki płatności w Google Play.

Dalsze kroki