54 votes

Comment Apple informe-t-elle les applications iOS des remboursements des achats in-app (IAP) ?

J'ai implémenté avec succès l'IAP d'Apple iOS dans mon application et l'ai testé dans le bac à sable. Cela fonctionne très bien.

Je crains que les utilisateurs ne puissent acheter quelque chose avec un IAP, le télécharger dans mon application, puis se plaindre à Apple et obtenir un remboursement. Il n'y a pas de moyen évident pour que les remboursements soient signalés à mon application. Sont-ils simplement omis de la liste des produits que je reçois lors d'une opération de "restauration" ? Existe-t-il un type de transaction non documenté qui apparaît de manière asynchrone dans mon SKPaymentTransactionObserver lorsqu'un remboursement est effectué ?

Pour l'instant, je pars du principe que je dois supprimer les transactions IAP de l'utilisateur avant de procéder à une restauration, et que tout remboursement ne figurera pas dans la liste des transactions restaurées. Est-ce la bonne façon de procéder ? Existe-t-il un moyen de tester cela dans le bac à sable ?

Quelqu'un a-t-il vu des remboursements dans un environnement de production et peut-il expliquer comment ils fonctionnent ?

0 votes

Il n'y a pas d'API qui informe votre application ; je n'en ai jamais entendu parler.

3 votes

C'est un échec épique si c'est vrai. Il n'est pas inattendu, il n'est pas différent de celui d'Apple, mais il est épique par l'ampleur de son échec à saisir les exigences de sa fonctionnalité IAP - surtout maintenant que, pour de nombreuses applications, c'est la solution de commerce électronique requise.

0 votes

Je n'ai pas entendu parler d'un remboursement de l'IAP par apple. il est indiqué dans les docs que tout achat d'application serait modifié dans la comptabilité. vous devriez essayer les devforums.apple.com C'est l'endroit le plus probable pour obtenir une réponse à ce qui est essentiellement un problème commercial et non technique.

12voto

Johannes Fahrenkrug Points 12795

Mise à jour le 24 juin 2020 :

Lors de la WWDC 2020, une nouvelle notification a été introduite pour vous informer des remboursements : https://developer.apple.com/documentation/storekit/in-app_purchase/handling_refund_notifications


Réponse originale :

J'ai reçu une réponse des relations avec les développeurs d'Apple aujourd'hui (6 déc. 2018) :

Bonjour Johannes,

En réponse à votre question, il n'existe malheureusement aucun moyen de détecter que l'utilisateur a contacté Apple Care et obtenu un remboursement pour l'achat d'un article consommable dans l'application. La seule option que je puisse vous proposer est de soumettre une demande d'amélioration de l'API pour qu'une API soit mise à disposition d'une application afin de détecter qu'un remboursement a été effectué à l'utilisateur d'un achat intra-applicatif. À l'heure actuelle, ce support n'est disponible que pour les applications qui proposent des achats In-App par abonnement auto-renouvelable.

Vous pouvez soumettre la demande d'amélioration en utilisant la page web du rapport de bug des développeurs Apple - http//bugreport.apple.com

Comme il s'agit d'un problème de type demande d'amélioration, je vais faire en sorte que cet incident soit débité de votre compte pour être utilisé sur un problème futur.

Donc, nous l'avons.

12voto

aradil Points 91

Le guide des achats in-app discute du concept d'"annulation" des abonnements. C'est le seul endroit que j'ai vu qui traite de ce sujet.

Plus de détails concernant le champ de la date d'annulation se trouve également dans la documentation sur la validation des reçus de l'App Store.

cancellation_date

Après avoir décodé un reçu, vous pouvez obtenir la date d'annulation qui vous indiquera ce qui suit :

Pour une transaction qui a été annulée par le service clientèle d'Apple, l'heure et la date de l'annulation.

0 votes

Cela signifie-t-il que je devrai stocker le reçu et le décoder de temps en temps pour vérifier s'il a été annulé ? Le reçu que j'ai conservé localement dans mon application après completeTransaction sera-t-il mis à jour pour afficher l'information sur l'annulation ?

0 votes

@aradil est-ce que la date d'annulation apparaît même sur les PAI non consommables ?

0 votes

@user1256663 Je crois que chaque fois qu'il y a une modification de votre reçu, vous en recevez un nouveau. En fait, décoder l'ancien reçu après qu'il ait été annulé n'aurait pas beaucoup de sens, puisqu'il s'agirait du même reçu.

8voto

Kirill Groshkov Points 199

La stratégie est la suivante :

  1. Vous sauvegardez le latest_receipt ("MIIUJgYJKoZIhvc..." base64) dans votre BD, associé au compte utilisateur.

  2. Chaque jour, vous demandez à apple de valider tous les reçus, en leur envoyant le reçu en base64 de la sauvegarde latest_receipt campo.

  3. Dans le reçu, vous vérifiez s'il existe un cancellation_date champ. Si vous le trouvez, traitez-le selon documentation :

Traitez un reçu annulé de la même manière que si aucun achat n'avait jamais été effectué.

De la même manière que vous vérifiez les renouvellements d'abonnement (vérifier expires_date_ms ).

5voto

Benjamin Mayo Points 4133

Des remboursements sont effectués, mais votre application n'en est pas informée. Qu'il s'agisse d'un achat In-App, d'un téléchargement d'application ou de tout autre contenu iTunes, l'utilisateur peut toujours utiliser le contenu même s'il a demandé un remboursement.

0 votes

OK, donc quand je fais une "restauration", je vais récupérer une transaction pour l'article remboursé, sans aucune indication qu'il a été remboursé ? Ou est-ce que je n'obtiendrai PAS de transaction pour cet article ? S'agit-il d'une hypothèse ou d'une expérience ?

1 votes

Il apparaîtra comme n'importe quel achat. Il n'y a pas de distinction entre les achats remboursés et les achats. Vous ne pouvez pas faire de distinction entre les remboursements.

0 votes

@BenjaminMayo - Parlez-vous également des abonnements, ou seulement des achats ponctuels ? Si un utilisateur obtient un remboursement pour un abonnement et que vous effectuez par la suite un appel pour vérifier le reçu, la date d'expiration et le code d'état ne refléteront-ils pas l'annulation ?

2voto

Dans iOS 14, une nouvelle méthode est ajoutée au protocole SKPaymentTransactionObserver et est appelée lorsque l'utilisateur n'a plus droit à un ou plusieurs achats in-app. https://developer.apple.com/documentation/storekit/skpaymenttransactionobserver/3564804-paymentqueue Bien que la documentation ne dise pas dans quelle situation cette méthode est appelée, Apple le dit dans cette vidéo WWDC2020 à 26:55 https://developer.apple.com/videos/play/wwdc2020/10661/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X