Utiliser Google Play Billing dans votre activité Web fiable

Ce guide s'adresse aux applications Web empaquetées en tant qu'activité Web fiable. Pour les applications Android écrites en Kotlin ou en Java, consultez la documentation Google Play Billing.

Les applications sur Google Play qui vendent des produits numériques ou des abonnements doivent utiliser Google Play Billing. Dans une activité Web fiable, vous l'intégrez à l'aide des API Web suivantes, disponibles dans Chrome 101 et versions ultérieures sur Android et ChromeOS :

Conditions requises

Pour configurer Google Play Billing, vous avez besoin des éléments suivants :

Ne facturez pas aux utilisateurs le téléchargement de votre application sur le Play Store. Votre PWA est toujours disponible sur le Web. Un téléchargement payant ne limite donc pas l'accès. Vendez plutôt des fonctionnalités ou du contenu via des achats ou des abonnements intégrés.

Activer Play Billing dans votre projet Android

Si vous compilez votre application avec Bubblewrap, activez la fonctionnalité playBilling dans twa-manifest.json à la racine de votre projet :

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

Ensuite, exécutez bubblewrap update, puis bubblewrap build, et importez le nouveau package Android sur le Play Store.

Si vous créez votre application dans Android Studio, ajoutez la bibliothèque Android Browser Helper Play Billing. Pour connaître les modifications requises pour DelegationService et AndroidManifest.xml, consultez la démo twa-play-billing.

Vérifier la compatibilité avec Google Play Billing

Appelez getDigitalGoodsService() avec l'identifiant du Play Store, https://play.google.com/billing. Si la méthode est manquante ou si l'appel échoue, utilisez un autre flux de paiement :

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

Afficher les informations détaillées sur le produit

Utilisez getDetails() pour récupérer le titre, la description et le prix de vos ID produit, afin que les prix que vous affichez correspondent à ceux du 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 ne peut pas lister vos ID produit. Pour les interroger à partir de votre backend, utilisez l'API Google Play Developer.

Effectuer un achat

Créez un PaymentRequest avec https://play.google.com/billing comme mode de paiement et l'ID produit comme sku dans data. Google Play Billing utilise le prix de la Play Console. total est donc obligatoire, mais ignoré.

Une fois que show() est résolu, envoyez le jeton d'achat à votre backend pour vérifier et confirmer l'achat. Si vous ne confirmez pas un achat dans un délai de trois jours, Google Play rembourse l'utilisateur et révoque l'achat.

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

Vérifier les achats d'un utilisateur

Utilisez listPurchases() pour rechercher les articles appartenant à l'utilisateur, tels que les abonnements actifs, les achats non consommés ou les codes promotionnels utilisés. Vérifiez chaque achat sur votre backend et confirmez ceux que vous n'avez pas encore confirmés :

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

Tester votre intégration

Pour tester votre application sur un appareil Android avant de la publier sur le Play Store, procédez comme suit :

  1. Utilisez Android 9 ou version ultérieure avec les options pour les développeurs activées.
  2. Dans Chrome, accédez à chrome://flags et activez #enable-debug-for-store-billing.
  3. Diffusez votre site via HTTPS. L'API Digital Goods n'est pas disponible via HTTP.

Lorsque votre application est installée depuis le Play Store, vous n'avez pas besoin de l'option. Pour effectuer des tests avec des comptes et des produits de test, consultez Tester l'intégration de la bibliothèque Google Play Billing.

Étapes suivantes