Rafraîchissant de l'application iOS de la réception: Comment faire pour déterminer si l'utilisateur devrez vous connecter à l'app store?
Je suis implemeting Apple "Grand unified réception" sur iOS 7, ce qui permet à l'application pour vérifier l'application de la facture de l'achat sur place sans avoir à contacter les serveurs d'Apple pour validation & vérification. Cela fonctionne très bien si l'utilisateur dispose d'une réception stockées dans l'application. Dans le cas où l'application est absent de la réception, la meilleure pratique est de demander à l'application de l'actualisation de sa réception, en tant que tel:
SKReceiptRefreshRequest *request = [[SKReceiptRefreshRequest alloc] init];
[request setDelegate:self];
[request start];
Le problème est que le fait d'appeler ce code va demander à l'utilisateur de se connecter avec son IDENTIFIANT Apple. Je ne suis pas sûr à 100% si cela se produit tout le temps, ou seulement si l'utilisateur de l'app store de connexion a expiré. Je ne veux pas afficher l'IDENTIFIANT Apple de l'écran de connexion pour les utilisateurs, sauf si cela est vraiment nécessaire, je ne veux pas que les gens préoccupés par le fait que ceux-ci seront facturés à tort. Je voudrais montrer un affichage indiquant à l'utilisateur pourquoi il leur sera demandé pour leur compte Apple ID, mot de passe, mais seulement si elles seront effectivement nécessaires pour entrer leur mot de passe. Si ils n'ont pas besoin d'entrer leur mot de passe je veux être transparent et processus caché. Quelle est la meilleure façon de procéder? Je pense que la meilleure façon serait de vérifier si l'utilisateur a besoin pour vous connecter à l'app store, mais je ne suis pas sûr si c'est possible.
Vous devez vous connecter pour publier un commentaire.
C'est très compliqué à gérer cela, alors cette réponse ne peut pas être complètement satisfaisant (et je suis en retard - je suis au courant de cela), mais tout de même, j'espère que cela va vous aider un peu avec ce problème particulier.
Il y a une chance que je ne fais pas ce droit, mais jusqu'à présent, tout fonctionne et fait sens pour moi, mais s'il vous plaît si je suis "parler BS", n'hésitez pas à me corriger.
Mais de toute façon, vous ne pouvez pas vraiment empêcher l'authentification d'alerte d'apparaître, mais il existe quelques façons dont vous pouvez réduire combien de fois il s'affiche.
Vous n'avez pas besoin de re-télécharger un accusé de réception que vous connaissez n'existe pas. Si l'utilisateur n'a pas acheté ou n'a pas restauré la réception, vous pouvez éviter d'essayer de re-télécharger une réception et d'éviter l'alerte de vue tout à fait. C'est quelque chose que j'ai fait:
J'ai mis cela sur ma main.m fichier, avant la boucle principale de l'application, comme mon application a beaucoup de "pro" des fonctions qui déverrouillé avec PEI, mais vous pouvez vraiment mettre cette où vous trouvez que c'est pertinent.
L'idée principale est que la réception est en fait un fichier stocké dans votre app du répertoire. Donc, tout ce que nous faisons ici, c'est de vérifier si la réception existe réellement. Si ça ne marche pas, nous nous sauver de l'ennui de l'actualisation de celui-ci et donc de sauver la peine de montrer la auth écran de l'utilisateur.
Si vous le souhaitez, vous pouvez placer ce code n'importe où, où l'utilisateur peut utiliser un "pro" de votre application.
SKReceiptRefreshRequest
hérite deSKRequest
et de ce fait, il fera appel à laSKRequestDelegate
méthodes. Donc, dès qu'un utilisateur accède à un écran avec un pro, vous pouvez actualiser la réception, puis activer la fonction lorsque le délégué des méthodes appelée (et après avoir fait le travail supplémentaire de vérification de la réception du contenu).Le gros inconvénient de cette approche est qu'elle nécessite une connexion à internet. Si votre application fonctionne hors ligne, l'utilisateur s'attendre à tous ses Cci de travailler en mode hors connexion, donc télécharger à nouveau la réception va être un problème dans certains scénarios.
Dans une Application app Store de la réception en général. Il est téléchargé à partir de l'App Store avec l'application. Si l'utilisateur de chargement de votre application sur leur appareil avec iTunes (c'est à dire à partir d'une sauvegarde) il n'y aura pas de réception.
Les principaux cas d'utilisation pour la réception n'étant pas là, c'est quand vous êtes le débogage dans Xcode et n'ai rien fait pour provoquer la réception à être téléchargées (comme l'actualisation de la réception ou de l'achat de quelque chose).
En production, vous ne pouvez obtenir un nouveau (frais) de réception, après une action de l'utilisateur (qu'ils achètent quelque chose, vous vous rafraîchissez la réception et de leur connexion, leur restauration d'achats et de connexion). Il n'y a aucun moyen d'en silence actualiser la réception.
Si vous voulez obtenir une nouvelle réception sans action de l'utilisateur, vous devez passer par le serveur de la route. Envoyer la vieille de la réception par l'intermédiaire de votre serveur iTunes, obtenir de la dernière réception.
Je tiens à partager mon expérience. J'ai travaillé dans le Sandbox de l'application de la réception manquant après la suppression de l'application. (Et puis re-Commande-R-ing), je ne sais pas si cela se produit dans la production, mais il semble comme si il n'. En demandant une actualisation lors de la première application de démarrage, et de demander à l'utilisateur son mot de passe est saisissante. C'est une question, bien sûr.
Il semble que
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
aussi silencieusement rafraîchit l'application de la réception sans l'affichage d'une boîte de dialogue. Sens, après la transaction ont été restaurés, en demandant l'appReceiptURL + Données renvoie une non-valeur nil. C'est seulement à partir de mon court laps de test. Merci de faire vos propres tests.