Cycle de vie des achats uniques

Les produits à achat unique ont un cycle de vie plus simple que les produits sur abonnement, mais le backend a tout de même plusieurs états et événements de transition à gérer correctement.

Figure 1 : états du cycle de vie et événements de transition des achats uniques

Nouveaux achats de produits uniques

Une fois que l'utilisateur a terminé le parcours de facturation, votre application peut voir les informations sur le nouvel achat de l'une des manières suivantes:

Après avoir reçu le nouvel achat, utilisez la méthode getPurchaseState ou purchases.products.get in Play Developer API pour déterminer l'état du paiement du nouvel achat.

Notifications en temps réel pour les développeurs

Lorsqu'un utilisateur achète ou annule l'achat d'un produit ponctuel, Google Play envoie un message OneTimeProductNotification. Pour mettre à jour l'état de l'achat sur le backend, utilisez le jeton d'achat fourni dans l'objet OneTimeProductNotification pour appeler la méthode purchases.products.get. Cette méthode fournit le dernier état d'achat et de consommation en fonction d'un jeton d'achat.

Vous devez gérer les notifications RTDN liées aux transactions dans votre backend sécurisé.

Gérer les transactions terminées

Lorsqu'un utilisateur effectue un achat de produit unique, Google Play envoie un message OneTimeProductNotification de type ONE_TIME_PRODUCT_PURCHASED. Lorsque vous recevez cette notification RTDN, traitez l'achat comme décrit dans la section Traiter les achats de produits uniques dans le backend.

Gérer les transactions annulées

Lorsqu'un achat unique est annulé, Google Play envoie un message OneTimeProductNotification de type ONE_TIME_PRODUCT_CANCELED si vous avez configuré la réception de notifications en temps réel pour les développeurs. Cela peut se produire si l'utilisateur n'effectue pas le paiement dans le délai requis, ou si l'achat est révoqué par le développeur ou à la demande du client. Lorsque votre serveur backend reçoit cette notification, appelez la méthode purchases.products.get pour obtenir le dernier état de l'achat, puis mettez à jour votre backend en conséquence, y compris les droits d'accès de l'utilisateur.

Si un achat unique à l'état Purchased est remboursé, vous en serez également informé via l'API Voided Purchases.

Traiter les achats de produits uniques dans le backend

Que vous ayez détecté un nouvel achat via une notification RTDN ONE_TIME_PRODUCT_PURCHASED ou que vous en ayez été informé via l'application grâce à PurchasesUpdatedListener ou à la récupération manuelle des achats dans la méthode onResume() de votre application, vous devez le traiter. Nous vous recommandons de gérer le traitement des achats dans le backend afin de renforcer la sécurité.

Pour traiter un nouvel achat unique, procédez comme suit :

  1. Interrogez le point de terminaison purchases.products.get pour obtenir le dernier état d'achat unique du produit. Pour appeler cette méthode pour un achat, vous avez besoin du purchaseToken correspondant dans votre application ou dans la notification RTDN ONE_TIME_PRODUCT_PURCHASED.
  2. Appelez getPurchaseState() et assurez-vous que l'état d'achat est PURCHASED.
  3. Vérifiez l'achat.
  4. Autorisez l'utilisateur à accéder au contenu. Le compte utilisateur associé à l'achat peut être identifié à l'aide du champ obfuscatedExternalAccountId de purchases.products.get, s'il a été défini avec setObfuscatedAccountId() au moment de l'achat.
    1. Pour les achats de produits non consommables, confirmez la livraison du contenu en appelant la méthode purchases.products.acknowledge. Assurez-vous que l'achat n'a pas été confirmé précédemment en vérifiant le champ acknowledgementState.
    2. Si le produit est consommable, marquez l'article comme consommé en appelant la méthode purchases.products.consume afin que l'utilisateur puisse l'acheter à nouveau après l'avoir consommé. Cette méthode confirme également l'achat.

Des méthodes de confirmation d'achat et de consommation sont également disponibles dans la bibliothèque Play Billing. Elles vous permettent de traiter les achats à partir de votre application, mais nous vous recommandons de gérer le traitement dans le backend, le cas échéant, pour une implémentation sécurisée.