Utilizza Fatturazione Google Play nella tua Attività web attendibile

Questa guida è rivolta alle app web pacchettizzate come Attività web attendibile. Per le app per Android scritte in Kotlin o Java, consulta la documentazione di Fatturazione Google Play.

Le app su Google Play che vendono prodotti digitali o abbonamenti devono utilizzare la Fatturazione Google Play. In un'Attività web attendibile, l'integrazione avviene utilizzando le seguenti API web, disponibili in Chrome 101 e versioni successive su Android e ChromeOS:

Requisiti

Per configurare Fatturazione Google Play, devi disporre di quanto segue:

Non addebitare il download della tua app dal Play Store. La tua PWA è ancora disponibile sul web, quindi un download a pagamento non limita l'accesso. Invece, vendi funzionalità o contenuti con acquisti in-app o abbonamenti.

Attiva Fatturazione Play nel tuo progetto Android

Se crei la tua app con Bubblewrap, attiva la funzionalità playBilling in twa-manifest.json nella directory principale del progetto:

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

Quindi esegui bubblewrap update seguito da bubblewrap build e carica il nuovo pacchetto Android sul Play Store.

Se crei la tua app in Android Studio, aggiungi la libreria Android Browser Helper Play Billing. Per le modifiche richieste a DelegationService e AndroidManifest.xml, consulta la demo di twa-play-billing.

Verifica il supporto di Fatturazione Google Play

Chiama getDigitalGoodsService() con l'identificatore del Play Store, https://play.google.com/billing. Se il metodo non è presente o la chiamata non va a buon fine, utilizza un altro flusso di pagamento:

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

Mostrare i dettagli del prodotto

Utilizza getDetails() per recuperare il titolo, la descrizione e il prezzo degli ID prodotto, in modo che i prezzi visualizzati corrispondano a quelli del Play Store:

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);
}

L'API Digital Goods non può elencare gli ID prodotto. Per eseguire query dal tuo backend, utilizza l'API Google Play Developer.

Effettuare un acquisto

Crea un PaymentRequest con https://play.google.com/billing come metodo di pagamento e l'ID prodotto come sku in data. La Fatturazione Google Play utilizza il prezzo di Play Console, pertanto total è obbligatorio, ma viene ignorato.

Dopo la risoluzione di show(), invia il token di acquisto al tuo backend per verificare e confermare l'acquisto. Se non confermi un acquisto entro tre giorni, Google Play rimborsa l'utente e revoca l'acquisto.

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

Controlla gli acquisti di un utente

Utilizza listPurchases() per trovare gli articoli di proprietà dell'utente, ad esempio abbonamenti attivi, acquisti non utilizzati o codici promozionali utilizzati. Verifica ogni acquisto sul tuo backend e conferma quelli che non hai ancora confermato:

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

Verifica la tua integrazione

Per eseguire il test su un dispositivo Android prima della pubblicazione sul Play Store, segui questi passaggi:

  1. Utilizzare Android 9 o versioni successive con le opzioni sviluppatore attivate.
  2. In Chrome, vai a chrome://flags e attiva #enable-debug-for-store-billing.
  3. Pubblica il tuo sito tramite HTTPS. L'API Digital Goods non è disponibile tramite HTTP.

Quando l'app viene installata dal Play Store, il flag non è necessario. Per eseguire i test con account di prova e prodotti di prova, consulta la sezione Testa l'integrazione di Libreria Fatturazione Google Play.

Passaggi successivi