[Résolu] Appli payante supprimée par le user avant paiement et réinstallée
busterTheo
Membre
Bonjour à tous, je reviens vers vous car je n'ai strictement rien trouvé pour résoudre mon problème.
Mon app est gratuite pour 21 jours, puis achat version payante par achat intégré (une seule app).
Je gère tout ça dans mon code avec les UserDefault... Tout va bien.
Par contre, si le user supprime l'app lorsqu'il doit l'acheter, et qu'il la redownload, je ne trouve pas comment détecter qu'il l'avait déjà downloadé et atteint la durée limite pour l'envoyer automatiquement vers l'achat obligatoire.
Je crois avoir compris qu'il sagit de keychain, mais je ne trouve pas comment faire.
Une super idée serait la bienvenue.
Merci d'avance.
busterTheo
PS : Pour ceux qui sont intéressés par ce sujet, je peux mettre du code si ils le désirent.
Voici au passage, mes deux posts précédents concernant ces vastes sujet :
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
L'utilisation de Keychain est une fasse bonne idée. Surtout depuis la 10.3 ou les items Keychain semble être effacés en même temps que l'app.
Oui, peut être qu'une version plus abouti pourrait consister à stocker les mêmes informations dans le key/value store d'Apple. A confirmer avec les gens sur le forum. Suis-je dans le juste?
L'inconvénient de cette solution, c'est que si l'utilisateur fait "l'effort" de supprimer les données iCloud de ton application, alors le problème reste entier. Donc on a fait que repousser le problème. Mais je suppose fortement que pour 90% des utilisateurs cette simple idée devrait suffire.
A vrai dire, je pense que l'implémentation que tu proposes, en utilisant le UserDefault, devrait suffire pour 80% des gens.
Maintenant si tu veux une solution plus aboutie, peut être que les receipt est une possibilité? Contient-il la date d'achat de l'application? L'utilisateur peut-il supprimer son acte d'achat dans l'historique de son compte iTunes/AppStore? Quelqu'un sait-il répondre à toutes ces questions? :-)
Mais c'est quoi les receipts ?
Alors, je ne suis pas un expert, mais en gros, de ce que je comprends, le receipt est le fichier qui liste les achats que l'utilisateur a fait dans ton application. Ce fichier permets de restorer les achats de ton utilisateur lorsqu'il change d'iPhone/iPad. Ou quand il a supprimer ton application (localement) de son iPhone/iPad. C'est en tout cas ce que j'en ai compris.
Ma supposition c'est ce que ce fichier Receipt existe même si aucun n'achat in-app ont été fait. Ma question est: ce fichier contient-il une information qui te permets de connaitre la date d'achat de l'application. Je ne connais pas la réponse à toutes ces suppositions/questions. Il faut aller voir dans la doc d'Apple pour cela. :-)
Hum, le plus sécurisant serait l'utilisation d'un serveur pour le stockage de data, mais si nous oublions cette idée, peut être que l'idée de ifou pourrait être la bonne.
Je n'ai pas tout lu mais ça pourrait marcher, car même si l'utilisateur supprime les "documents, datas" de l'app sur iCloud les "NSUbiquitousKeyValueStore" sont encore conservés !
https://developer.apple.com/documentation/foundation/nsubiquitouskeyvaluestore
@horus59153: En fait je pensais plutôt à utiliser le "In-App Purchase". Qui apparemment fait partie du StoreKit.
Cependant, comme je le disais précédemment, encore faudrait-il que le receipt contienne la date de téléchargement de l'application. J'ai parcouru rapidement la doc, et je n'ai pas trouvé mention de cela. Maintenant je suis passé très vite. Je n'ai pas l'intention de me taper toutes la doc maintenant. Peut être une autre fois. :P
J'en suis à deux doigts de conclure que la méthode de horus59153 est probablement la meilleure.
Je ne touche pas à iCloud ni à IOS. Mais que se passe-t-il si le user un peu malin se déconnecte du réseau et supprime le fichier receipt ? J'ai utilisé deux ans une appli essayable pendant un mois en me déconnectant du réseau et en changeant la date courante ! Pour ma part, je suis convaincu que, en paraphrasant Jules Vernes, tout ce que vous imaginez, d'autres pourront passer par dessus ! J'espère quand même que vous trouverez une solution suffisamment sécuritaire.
Bonjour, et merci à tous pour vos réponses qui m'ont bien aidé pour mes recherches.
J'ai donc résolu le problème en mélangeant un peu plusieurs technos, et en posant bien l'algo qui suit le comportement du user.
Pour stocker 3 choses : app déjà installée ou pas, date première installation, app déjà achetée ou pas.
Puis pour les cas où le user jette l'app lorsqu'elle devient payante (21 jours),
Je donne ici un lien où une class keychain est donnée cadeau
Merci encore.
Si qq a besoin de code, qu'il ne se gène pas...