8
votes

Apple a rejeté mon application en raison de la restauration de l'IAP

J'ai un bouton de restauration. Le problème est de savoir si ils n'ont pas fait une restauration, et ils essaient d'acheter un article et ils ont déjà acheté cet article, je dois leur dire qu'ils l'ont déjà acheté et n'effectuent pas l'achat. J'ai donc besoin d'une façon de savoir, sans faire de restauration, quels articles qu'ils ont achetés. J'ai essayé de faire une restauration d'abord, chaque fois que l'utilisateur tente d'acheter, mais Apple a rejeté mon application. Ils ont déclaré que la restauration ne peut pas se produire avant que la boîte de dialogue d'achat IN-app confirmer est affichée.

Aidez-moi s'il vous plaît à trouver la bonne façon.

Merci d'avance.


2 commentaires

Nsuserdefaults est votre meilleur pari. Mais toute forme de stockage fonctionnera aussi longtemps que vous êtes responsable de l'obtention des informations. On dirait comme une faille de conception, ne pensez-vous pas? Je comprends qu'ils veulent garder les données utilisateur sécurisées, mais jeez.


Si l'utilisateur tente à nouveau d'acheter un produit non consommable, ils ne seront plus facturés. Au lieu de cela, ils recevront un message indiquant qu'ils ont déjà payé et peuvent l'obtenir gratuitement.


3 Réponses :


1
votes

À ma connaissance, il n'y a pas d'autre moyen de le faire.

Vous devez fournir un bouton de restauration pour restaurer les achats intégrés, sinon Apple rejette votre application.

Vous ne vous connecterez pas à des serveurs intégrés ni à restaurer un profil sans afficher l'alerte de confirmation de l'achat intégré.


5 commentaires

: Oui, vous avez raison, j'ai déjà un bouton de restauration mais avant d'entrer dans cet écran, j'ai besoin de vérifier la météo que le produit est acheté ou non.


@ PM444: Ce n'est pas possible. Lorsque l'utilisateur clique sur l'achat à nouveau, cela donnera une réponse comme: SKPAYMENTTRANSACACTIONSATATEDESTORTESTESTORTES .


J'ai deux applications dans l'App Store qui prend en charge les achats intégrés. J'ai un bouton de restauration séparément et affiche la liste des produits séparément. Et si un utilisateur achète un élément, je conserve ces données dans mes NSUserDefaults et lorsque l'utilisateur est livré à la page d'achat In-App, je ne lui montre pas les produits qu'il a déjà achetés. Aussi simple que cela!!


@ Ushan87: En fait, mes besoins sont différents.Je besoin de connaître la météo Le produit disponible est déjà acheté ou non à l'heure de lancement de l'application.


@Midhunmp: En fait, j'ai deux boutons.Lors que l'utilisateur clique sur BTN1, j'ai besoin de vérifier la météo qu'il a acheté ce produit ou non.Si-il a acheté que l'utilisateur peut utiliser l'application, sinon il demande un paiement après le paiement, l'utilisateur réussie peut pouvoir s'inscrire à APP.IF BTN2 a cliqué sur la démo de l'application Wii Soyez apparaît. C'est mon flux.can, vous m'aidez à obtenir le bon débit.



6
votes

Vous pouvez conserver ces données dans Nsuserdefault . Et vous n'avez pas besoin de montrer une alerte disant que les articles sont déjà achetés. Si c'est un produit non consommable Apple montrant l'alerte indiquant qu'ils ont déjà acheté cet article!

EDIT: stry> p>

1) Vous devez ajouter 3 boutons à votre View p>

  • BOUTON ACHETER LI>
  • BOUTON DE RESTAURATION LI>
  • Version de démonstration Li> ul>

    Vous devez donner à l'utilisateur l'option de restauration si vous prend en charge les achats intégrés dans votre application. Sinon, Apple rejette votre application. P>

    2) Si l'utilisateur appuie sur le bouton Acheter, ne vérifiez pas si l'utilisateur a déjà acheté votre application ou non. Parce que Apple ne chargera pas deux fois les utilisateurs pour le même produit non consommable. Donc, vient de passer par votre code d'achat et si l'utilisateur a déjà acheté, le framework de Storekit d'Apple appellera sa méthode de déléguée p> xxx pré>

    avec p>

    SkpaymentTransactionStatePurchased p> blockQuote>

    état de transaction. Donc, vous pouvez lui présenter l'écran de connexion. P>

    3) Si l'utilisateur appuie sur le bouton de restauration, passez avec votre code de restauration P>

    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
    


12 commentaires

Cela ne fonctionnera pas de manière fiable: l'utilisateur a peut-être acheté l'application sur un autre périphérique (ou via iTunes); L'utilisateur a peut-être supprimé l'application manuellement ou essuyé l'appareil ...


Si l'utilisateur utilise le même identifiant Apple, Apple ne facturera pas à nouveau l'utilisateur et que vous obtiendrez la méthode de déléguée appelée dire à l'application achetée. Donc, vous pouvez déverrouiller les fonctionnalités cachées de votre application


Exactement. Ce qui signifie que l'utilisation de nsuserdefault ne résoudrait pas le problème de l'OP.


Cela peut être utile. La question dit "Je dois leur dire qu'ils l'ont déjà acheté et ne pas effectuer l'achat". Donc, si lorsqu'un utilisateur achète un article, il peut stocker ces données dans "nsuserdefault" et vérifier si l'utilisateur a déjà acheté cet article en vérifiant simplement "Nsuserdefault". Mais cela ne fonctionne pas pour deux appareils.


Apple rejeterait toujours son application pour la raison indiquée, donc non, ce ne serait pas utile.


J'ai deux applications dans l'App Store qui prend en charge les achats intégrés. J'ai un bouton de restauration séparément et affiche la liste des produits séparément. Et si un utilisateur achète un élément, je conserve ces données dans mes NSUserDefaults et lorsque l'utilisateur est livré à la page d'achat In-App, je ne lui montre pas les produits qu'il a déjà achetés. Aussi simple que cela!!


@ Ushan87: +1 Merci u pour votre bon flux et votre explication.avant accepter que je dois vérifier avec mon flux d'applications.


@ Ushan87: Si nous avons déjà acheté l'application, nous obtiendrons une pop up "Vous avez déjà acheté.TAP OK pour télécharger gratuitement." et avec deux boutons Annuler et ok.Can nous trouvons où il sera déclenché lorsque l'utilisateur clique sur ANNULER ou OK.


Il appellera la méthode des délégués, "- (vide) PaymentQueue: (Skpaymentie *) File d'attente Mise à jour de la file d'attenteTransactions: (Nsarray *) Transactions" Avec "SkpaymentTransActionActionStateD" Etat de transaction


@ Ushan87: quand je clique sur OK, l'état est SKPAYMENTTRANSActionState


YEP Lorsque vous appuyez sur OK, l'état est SKPAYMENTTRANSACACTIONStatePurchased et lorsque vous appuyez sur Annuler, l'état est SkpaymentTransactionState


Laissez-nous Continuer cette discussion en chat



2
votes

Selon Apple "Une restauration ne peut pas se produire avant la confirmation de la boîte de dialogue d'achat In-App s'affiche." Utilisez la - (VOID) PAYSQUESEUERESTORESTRANCEDTRANSActionDTransfinished: (SKPAYMENTQUEUE *) File d'attente fonction , cochez le code xxx


1 commentaires

: Merci de me donner la réponse. C'est aussi rien que d'appeler la méthode de restauration avant la confirmation de la connaissance inapprétache!