React-native-iap: Comment annuler manuellement un achat en attente?

Créé le 29 juil. 2019  ·  8Commentaires  ·  Source: dooboolab/react-native-iap

Version de react-native-iap

3.3.7

Version de react-native

0,59,8

Plateformes sur lesquelles vous avez rencontré l'erreur (IOS ou Android ou les deux?)

Android

Comportement attendu

lorsque je demande un achat, je valide le reçu sur mon serveur, si la validation a échoué, je veux pouvoir annuler manuellement l'achat, au lieu de la fonction purchaseUpdatedListener déclenchée à chaque fois, si vous n'appelez pas acquitter ou consommer.

Comportement réel

lorsque je ne termine pas l'achat, je ne peux pas annuler l'achat en attente. Sur Android, je dois attendre qu'il soit annulé automatiquement.

Environnement testé (émulateur? Real Device?)

Appareil réel

Étapes pour reproduire le comportement

Faites un achat et n'appelez pas pour accuser réception de l'achat ou de la consommation.

1️⃣ good first issue ❓ question 🙏 help wanted 🤖 android

Commentaire le plus utile

@hyochan , Existe-t-il une fonctionnalité comme celle sur iOS, afin d'annuler un achat qui n'a pas été effectué en appelant finishTransactionIOS puis en supprimant cet achat de l'historique des achats. Je ne sais pas s'il existe un autre moyen de vérifier si un abonnement est toujours actif, mais ce que je fais maintenant, c'est de vérifier la date d'expiration de la dernière transaction dans l'historique des reçus. Donc, si un achat n'est pas terminé, je ne souhaite pas qu'il soit enregistré dans l'historique des achats. Malheureusement pour le moment, c'est exactement ce qui se passe. Et contrairement à Android, l'achat incomplet ne sera pas annulé après un certain temps et il ne cessera jamais d'être déclenché par le purchaseUpdateListener .

J'ai donc le même problème sur iOS et Android, je dois annuler un achat qui n'est pas terminé. Et plus précisément sur iOS, ne pas enregistrer cet achat dans l'historique, sauf s'il existe un moyen plus efficace de vérifier la validité d'un abonnement.

Tous les 8 commentaires

Même en cas d'échec, vous devez toujours appeler acknowledgePurchase et consumePurchase pour la transaction terminée. Vous ne faites pas de logique comme ne pas donner de récompense sur votre propre base de données. De plus, vous devez consmePurchase pour qu'il ne reste pas dans votre application.

@hyochan si je fais cela, le paiement sera approuvé et le compte utilisateur sera débité sans être récompensé.

@tmjordan Oh, je vois ce que tu voulais dire. Et si vous continuez la logique en donnant une récompense alors?

@hyochan lorsqu'un utilisateur achète un produit, le reçu donné est envoyé aux serveurs Google afin de valider le reçu et d'obtenir le statut de l'achat (si le paiement a été approuvé, est en attente ou annulé).
Disons que j'ai une erreur pendant le processus de validation ne venant pas du serveur Google (mon backend par exemple), donc je ne peux pas valider le reçu et je veux annuler l'achat manuellement au lieu d'attendre qu'il soit annulé par Google ( pendant ce temps, je ne peux pas faire un autre achat) si je n'appelle pas un achat avec connaissance ou un achat de consommation.
Je ne sais pas si c'est possible, c'est peut-être comme ça que le processus d'achat fonctionne sur Google.

Ce serait bien si nous pouvions annuler manuellement un achat qui n'a pas encore été reconnu ou consommé. Dans ce scénario, l'utilisateur sera remboursé si le paiement a été approuvé.
Au lieu d'avoir le même achat déclenché à chaque fois jusqu'à ce qu'il soit annulé par Google.

@tmjordan Merci pour votre bon point de vue. Cela semble très raisonnable, mais je ne suis pas sûr que les achats de pending soient réellement facturés. Je pense que les achats pending ne devraient même pas être facturés lorsque acknowledged et plutôt ceux-ci devraient être supprimés. J'espère que nous pourrons passer plus de détails sur toute autre expérience.

@hyochan , Existe-t-il une fonctionnalité comme celle sur iOS, afin d'annuler un achat qui n'a pas été effectué en appelant finishTransactionIOS puis en supprimant cet achat de l'historique des achats. Je ne sais pas s'il existe un autre moyen de vérifier si un abonnement est toujours actif, mais ce que je fais maintenant, c'est de vérifier la date d'expiration de la dernière transaction dans l'historique des reçus. Donc, si un achat n'est pas terminé, je ne souhaite pas qu'il soit enregistré dans l'historique des achats. Malheureusement pour le moment, c'est exactement ce qui se passe. Et contrairement à Android, l'achat incomplet ne sera pas annulé après un certain temps et il ne cessera jamais d'être déclenché par le purchaseUpdateListener .

J'ai donc le même problème sur iOS et Android, je dois annuler un achat qui n'est pas terminé. Et plus précisément sur iOS, ne pas enregistrer cet achat dans l'historique, sauf s'il existe un moyen plus efficace de vérifier la validité d'un abonnement.

Je souhaite gérer un scénario similaire

  1. Utilisateur Commencez l'achat d'un produit (sensible au temps). Ce produit doit être retourné immédiatement
  2. Le serveur ne parvient pas à renvoyer le produit. et il peut être en retard pour retourner le produit en réessayant
  3. le purchaseUpdateListener est déclenché plusieurs fois jusqu'à ce que finishTransactionIOS soit appelé, mais ce n'est pas le résultat souhaitable. La transaction doit être annulée à ce stade.

Existe-t-il une méthode pour annuler la transaction.

Cette page vous a été utile?
0 / 5 - 0 notes