51 votes

Quand utiliser restoreCompletedTransactions pour les achats intégrés?

Pour une application de base durables avec les achats in-app, personne n'a jamais trouvé de meilleures pratiques pour l'utilisation de SKPaymentQueue de l' restoreCompletedTransactions?

Observations

Je sais qu'il est recommandé de toujours enregistrer une transaction d'observateur à recevoir opérations en cours qui font leur chemin de retour à l'application, mais cela est une autre question. Il ressemble restoreCompletedTransactions est quelque chose que l'application a activement décider quand faire appel à un sondage pour tous les achats, le client a déjà fait.

À partir de ce que je peux dire, la méthode est conçue pour récupérer les achats qui peuvent avoir été perdus. Par exemple, un client peut installer ou de déplacer une application vers un nouvel appareil de telle manière que l'application locale de dossiers de paiements de perte ou de réinitialisation.

Préoccupations

Ce n'est pas clair pour moi, c'est comment faire pour détecter automatiquement cette condition (c'est à dire la façon de déterminer quand un sondage pour le manque d'achats) d'une façon fiable. Je ne veux pas le visser et risque de refuser un client d'accéder à la fonctionnalité qu'ils ont déjà payé.

En même temps, je ne veux pas l'appeler restoreCompletedTransactions chaque fois que l'application est lancée juste pour être sûr et fondamentalement revenir transactions, je sais déjà à propos de 99,9% du temps. (Sauf pour les in-app achats, mon application n'a pas vraiment besoin de toute la connectivité du réseau.)

Notes

La documentation d'Apple précise que les clients ne sont pas facturés à nouveau pour tout achats durables qu'ils ont déjà faites. Si ils essaient de ré-achat, l'opération de paiement est encore soi-disant envoyé à l'application.

Le pire des cas, un client peut récupérer les achats de cette façon, mais je voudrais encore pour éviter de marcher vers le bas un chemin qui ressemble à ré-achat de quelque chose qu'ils ont déjà payé.

35voto

otto Points 951

Après avoir écrit la question et de penser à ce sujet, je suis venu avec un couple de solutions.

Automatique (Non Recommandé)

Une option consiste à enregistrer dans les paramètres utilisateur par défaut si restoreCompletedTransactions a été appelé (et réussi), mais dans l'application. Si non, l'application appelle une fois sur start-up. Depuis cet indicateur pourrait être stockée dans le même lieu que l'durables des paiements en cas de défaut d'obtenir effacé par la suite, la méthode de restauration appelait à nouveau lorsque l'application démarre.

De cette façon, si un client est en quelque sorte de faire une nouvelle installation de l'application, ils ont encore leurs achats rétabli automatiquement. Si elles sont un nouveau client qui n'a jamais lancé l'application avant de l', puis l'opération de restauration ne retourne rien.

Dans les deux cas, restoreCompletedTransactions n'est appelée qu'une seule fois au lieu de à chaque lancement.

Manuel (Recommandé)

Une autre option est d'offrir au client une "Restaurer les Achats" bouton quelque part, de le raccorder à l' restoreCompletedTransactions et les laisser décider si et quand il pourrait être nécessaire.

(Les commentaires ci-dessous pourquoi aller dans un manuel de restauration est probablement mieux que d'essayer de le faire automatiquement.)

16voto

Craig Points 1113

N'oubliez pas qu'un IDENTIFIANT Apple peut s'étendre sur plusieurs appareils. Afin de maintenir un drapeau sur un périphérique (par exemple, l'utilisateur de l'iPhone) qui vous indique si oui ou non vous avez fait une restauration ne vous permettra pas de détecter si le client a déjà effectué un achat sur un autre appareil (dire son iPad) qui doit être restauré sur l'iPhone. Afin d'avoir une méthode manuelle de lancer une restauration est ÉGALEMENT nécessaire, même si vous avez une méthode automatique.

Pour aggraver les choses, je n'ai pas encore appris comment vous êtes averti lorsque les REMBOURSEMENTS des Pi sont faites. Je soupçonne que le processus de restauration d'suffit de retourner une liste de non-remboursés transactions. Donc, vous devez SUPPRIMER de votre dossier de l'utilisateur du PEI lorsque vous faites votre restauration en cas remboursés produits ne sont tout simplement pas signalé lors de la restauration, et b) vous devez régulièrement faire une restauration automatiquement, dans l'ordre de ramasser les remboursements.

Tout cela met en lumière le problème avec Apple PEI -- c'est mal conçue et mal documentées -- et maintenant, il est NÉCESSAIRE pour les fournisseurs de contenu, comme les lecteurs de livres électroniques qui ont déjà parfaitement le fonctionnement basé sur le web des magasins qui travaillent déjà dans leurs applications (comme le Kindle).

4voto

Mark Bridges Points 567

Chaque fois que vous effectuez un achat intégré non consommable, pour un exemple de nouvelle piste de course, vous devez implémenter un bouton 'Restaurer' quelque part dans l'application afin que l'utilisateur puisse restaurer son achat s'il change de périphérique ou supprime l'application. C'est obligatoire et Apple a déjà refusé une application pour ne pas avoir mis en œuvre le bouton Restaurer.

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