3.4.13
0,60,5
iOS
getAvailablePurchases n'a pas d'effets secondaires
L'appel de getAvailablePurchases
sur iOS fait apparaître une boîte de dialogue "Se connecter à l'iTunes Store".
Cela ne se produit pas sur Android.
J'appelle getAvailablePurchases
pendant le démarrage de l'application pour restaurer les articles achetés. D'après la documentation, j'ai compris que c'était la méthode courante, non?
Pour restaurer les articles achetés, j'appelle getAvailablePurchases
fonction des changements d' AppState . Malheureusement, l'AppState n'est pas seulement déclenché au démarrage de l'application, mais aussi p.ex. après être revenu à l'application à partir d'une boîte de dialogue (causée par l'application) p.ex. Connectez-vous à iTunes ... :(
Pour l'utilisateur, cela dérange. Surtout si l'utilisateur n'a pas l'intention d'acheter quelque chose, il ne voudrait pas entrer ses informations d'identification pour se débarrasser de cette boîte de dialogue.
appareil réel
appeler getAvailablePurchases
Lors du développement, cela montre que vous pouvez vous connecter avec votre compte sandbox. Je ne pense pas que les documents soient très clairs à ce sujet.
Je pense que pour la production, il peut également afficher une invite à chaque appel de cette fonction, non? La façon dont j'ai implémenté cela est que j'appelle cela lorsque l'utilisateur appuie sur "restaurer l'achat" et après que purchaseUpdatedListener est appelé. Pour savoir si l'utilisateur a un abonnement dans le futur, je le stocke dans le backend et le présente à l'application.
Hey @voxspox @alexpchin a raison. @alexpchin Puisque nous travaillons sur le pont, nous supposons que les gens en savent peut-être peu sur IAP
en natif. Mettre tout ce qui existe déjà dans chaque plate-forme est un fardeau pour les responsables. S'il y a des travaux sur le document qui vous semblent utiles, n'hésitez pas à ajouter quoi que ce soit et à envoyer un PR
.
@mifi Je n'ai jamais vu une application avec un bouton "restaurer mes achats". Du point de vue UX, un tel bouton est un fardeau et également inutile, car l'application doit savoir ce que j'ai acheté;)
@hyochan J'obtiens l'invite également après avoir distribué l'application via TestFlight (je suppose que c'est le mode production?!)
J'ai vu quelques applications avec cette fonction. Je ne me souviens pas très bien maintenant mais je pense que c'est nécessaire (ou requis par Apple) dans certains cas. Également dans les exemples de directives de l'App Store d'Apple, ils ont ce bouton:
https://developer.apple.com/app-store/subscriptions/
De plus, je pensais que ce serait une mauvaise UX si l'utilisateur devait un jour saisir son identifiant Apple lors de l'ouverture de mon application, je pense que ce serait déroutant. (J'ai déjà vu cela se produire si la session est expirée ou si quelque chose se passe avec SSL MITM, ce qui est souvent le cas avec les pages de destination wifi publiques)
edit: semble en fait que Apple l'exige
Existe-t-il un moyen de savoir avant d'appeler getAvailablePurchases
que l'invite apparaîtra? Ou en d'autres termes, comment puis-je détecter si l'utilisateur est connecté à iTunes ou non?
1+ même
Salut les gars, une réponse à ce sujet? si je comprends bien, il s'agit d'une fonctionnalité de débogage, mais je teste avec testflight et je veux éviter que cela se produise, est-il possible de quitter le mode sandbox?
En attendant, j'ai trouvé une solution pour moi. J'ai introduit une nouvelle variable isRestorePurchasesEnabled
qui est stockée en permanence par mon application.
Init:
isRestorePurchasesEnabled = false
Au démarrage de l'application:
if (Android || isRestorePurchasesEnabled) {
call getAvailablePurchases
on error.code === 'E_USER_CANCELLED' -> isRestorePurchasesEnabled= false
}
A l'achat:
isRestorePurchasesEnabled = true
requestSubscription ...
Réglages:
Button "restore purchases" -> isRestorePurchasesEnabled = true
L'utilisateur ne verra plus jamais l'invite connect-iTunes. La restauration n'a lieu qu'après qu'un achat a été effectué et donc les informations d'identification ont déjà été saisies + stockées et l'invite ne sera pas affichée.
Le seul cas où l'invite sera affichée, mais une seule fois, est si l'utilisateur se déconnecte dans Paramètres / iTunes / Compte Sandbox. Je ne sais pas si c'est là en mode production.
Salut, il semble qu'il n'y ait eu aucune activité sur ce problème récemment. Le problème a-t-il été résolu ou nécessite-t-il toujours l'attention de la communauté? Ce problème peut être résolu si aucune autre activité ne se produit. Vous pouvez également étiqueter ce problème comme "Pour discussion" ou "Bon premier numéro" et je le laisserai ouvert. Merci pour vos contributions.
Bonjour,
Je suis vraiment confus sur un sujet, quelqu'un peut-il m'aider?
Je veux construire un contrôleur qui vérifie si l'utilisateur possède toujours le produit ou non?
Comment puis-je détecter l'annulation de l'utilisateur en utilisant cette bibliothèque pour Apple et Google Play Store?
Je ne sais même pas si cela est lié à cette méthode getAvailablePurchase.
Merci.
J'aimerais savoir si cela se produirait également en production, plutôt que juste TestFlight.
Nous utilisons actuellement cette fonction au fur et à mesure que l'application se charge, plutôt qu'en appuyant sur un bouton.
Apple nous conseille toujours de ne pas appeler cette fonction sur l'application automatiquement ou au démarrage
Ne restaurez pas automatiquement les achats, en particulier lorsque votre application est lancée. La restauration des achats demande les informations d'identification de l'App Store de l'utilisateur, ce qui interrompt le flux de votre application.
https://developer.apple.com/documentation/storekit/in-app_purchase/restoring_purchased_products# : ~: text = Restore% 20Completed% 20Transactions, of% 20your% 20app's% 20completed% 20transactions.
La façon dont je l'ai implémenté consiste à envoyer le reçu au backend lorsque l'utilisateur appuie sur acheter ou restaurer l'achat. Ensuite, le backend peut fournir à l'application l'état de l'abonnement à l'avenir.
Apple nous conseille toujours de ne pas appeler cette fonction automatiquement ou au démarrage
Ne restaurez pas automatiquement les achats, en particulier lorsque votre application est lancée. La restauration des achats demande les informations d'identification de l'App Store de l'utilisateur, ce qui interrompt le flux de votre application.
https://developer.apple.com/documentation/storekit/in-app_purchase/restoring_purchased_products# : ~: text = Restore% 20Completed% 20Transactions, of% 20your% 20app's% 20completed% 20transactions.
La façon dont je l'ai implémenté consiste à envoyer le reçu au backend lorsque l'utilisateur appuie sur acheter ou restaurer l'achat. Ensuite, le backend peut fournir à l'application l'état de l'abonnement à l'avenir.
Pour un abonnement à renouvellement automatique, comment obtenir le dernier reçu sans téléchargement du client?
En exécutant un sondage périodique dans le backend qui valide périodiquement chaque achat comme celui-ci , prenez le dernier reçu de la validation (qui provient du serveur google / apple) et enregistrez-le dans la base de données.
En exécutant un sondage périodique dans le backend qui valide périodiquement chaque achat comme celui-ci , prenez le dernier reçu de la validation (qui provient du serveur google / apple) et enregistrez-le dans la base de données.
Salut @mifi Merci pour la réponse rapide! J'ai stocké le latestReceipt
sur le serveur après la transaction d'origine. Ainsi, lors de l'interrogation avec l'original latestReceipt
une nouvelle latestReceipt
est-elle renvoyée?
Oui, la fonction iap.validate
sur le backend appellera les apis apple / google qui renverront le dernier reçu. cela peut facilement être vu lors du test d'abonnements renouvelables avec un intervalle de développement (5min par période d'abonnement)
Merci @mifi Cela m'a vraiment aidé à comprendre! Il semblait juste étrange d'envoyer le "latestReceipt" pour recevoir le "latestReceipt"
Salut, il semble qu'il n'y ait eu aucune activité sur ce problème récemment. Le problème a-t-il été résolu ou nécessite-t-il toujours l'attention de la communauté? Ce problème peut être résolu si aucune autre activité ne se produit. Vous pouvez également étiqueter ce problème comme "Pour discussion" ou "Bon premier numéro" et je le laisserai ouvert. Merci pour vos contributions.
Clôture de ce numéro après une période d'inactivité prolongée. Si ce problème est toujours présent dans la dernière version, n'hésitez pas à créer un nouveau problème avec des informations à jour.
Commentaire le plus utile
Existe-t-il un moyen de savoir avant d'appeler
getAvailablePurchases
que l'invite apparaîtra? Ou en d'autres termes, comment puis-je détecter si l'utilisateur est connecté à iTunes ou non?