56 votes

SKPaymentQueue addTransactionObserver demandant le mot de passe de l'App Store au démarrage après l'achat intégré

Mon application est d'utiliser les achats in-app, et la plupart de mes utilisateurs peuvent acheter très bien sans aucun problème. Pour ces gens, mes téléchargements de l'application du contenu après l'achat réussit et ils sont heureux.

Cependant, pour un nombre croissant de mes utilisateurs, une fois qu'ils terminent avec succès un achat dans l'application, ils sont invités à donner leur App Store mot de passe à chaque fois que l'application démarre après que. Je crois que ce qui se passe sur l'appel à:

[[SKPaymentQueue defaultQueue] addTransactionObserver:observateur];

qui je suis d'appel au démarrage (conformément à l'étape 6 de la Pomme d'achat dans l'application guide: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/AddingaStoretoYourApplication/AddingaStoretoYourApplication.html).

Ma conjecture est que, pour une raison quelconque, Apple d'achat dans l'application des serveurs ne sont pas l'enregistrement de la transaction terminée avec succès - même si je l'appelle

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

lorsque la transaction est terminée et mon contenu a été téléchargé avec succès.

2 questions:

  1. Est ce que quelqu'un d'autre en voyant cela?

  2. Quelqu'un aurait-il une suggestion de correction?

Merci d'avance pour votre aide!

BOUNTY MODIFIER:

Sa une opération qui a été faite avec un autre Apple-ID. C'est pourquoi elle ne peut pas être fini, à moins que vous tapez les informations d'identification appropriées dans la boîte de dialogue. La Question devrait être:

  1. Comment puis-je éviter ces morts transactions (transaction n'a pas été terminé, l'utilisateur n'a pas de réseau, en attendant les changements d'App-ID)?
  2. Comment pouvez-vous tailler la SkPaymentQueue?

32voto

Ilker Baltaci Points 3129

J'ai eu le même problème. Assurez-vous que vous appelez

 [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
 

pour tous les états de transaction SKPaymentTransactionStatePurchased, SKPaymentTransactionStateRestored, SKPaymentTransactionStateFailed.

4voto

Peter B. Kramer Points 6129

Il y a un problème appelé "boucle sans fin". C’était un gros problème à l’origine des énergies renouvelables lorsque, pendant environ une semaine, les serveurs n’avaient pas limité les renouvellements à 5. Un appareil qui obtient une transaction et n’appelle pas finishTransaction l’obtiendra à peu près une fois. une semaine jusqu'à ce que cet utilisateur de test se connecte et appelle finishTransaction. Si vous passez en mode avion, vous pouvez effacer ces transactions pendant une semaine supplémentaire, mais elles reviennent.

3voto

Maxim Lavrov Points 68

Je pense que c'est un comportement correct. Lorsque vous définissez un délégué SKPaymentQueue essayez de vérifier si il y a quelques transactions pour finaliser. Il peut ne pas être pas fini d'opérations, mais le fait de cocher la nécessite de vous connecter iTunes. Et je pense que vous ne pouvez rien faire avec elle.

Il a généralement un sens, mais c'est assez gênant pour les utilisateurs qui ont mis en place en demandant un mot de passe sur chaque transaction (certaines de protection de l'enfance par exemple). Donc, la seule façon de lutter avec elle est de définir délégué explicitement lorsque vous êtes sur le point de demander à iTunes. Par exemple, vous pouvez ajouter le bouton en forme de "Restaurer mes achats". Pas très beau, mais nettement moins ennuyeux.

0voto

Maciek Czarnik Points 445

Je l'ai résolu en supprimant le compte d'utilisateur de test iTunes Connect lié à ce problème. En réalité, l'application a de nouveau demandé de se connecter, mais elle a ensuite disparu (j'ai également supprimé une application, redémarré l'iPhone et me suis connecté en tant qu'utilisateur normal autre qu'un bac à sable, effectué une restauration réelle dans une autre application autre qu'un bac à sable, puis lancé l'application).

0voto

pschwamb Points 291

Si vous supprimez et réinstallez l'application, toutes les anciennes transactions associées à un autre compte itunes seront supprimées. Si vous voyez toujours des transactions enregistrées dans la file d'attente des notifications, il y a probablement une branche dans votre logique qui n'a pas appelé finishTransaction.

Vous devez appeler finishTransaction pour toutes les transactions enregistrées dans paymentQueue: updatedTransactions:, même avec SKPaymentTransactionStateFailed.

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