2012-08-31 6 views
1
inachevées

je mis en œuvre la vérification de réception supplémentaire pour les achats en application dans ma demande (inspirée par https://developer.apple.com/library/ios/#releasenotes/StoreKit/IAP_ReceiptValidation/_index.html). Donc, après que je me SKPaymentTransactionStatePurchased, j'effectuer cette validation, et en cas de succès, je déverrouiller de nouveaux contenus et, enfin, je termine la transaction pariOS achat In-App

[[SKPaymentQueue defaultQueue] finishTransaction:myTransaction]; 

Que se passe si le processus de vérification du jeu ne peut pas être fini dire en raison de échec de la connexion Internet ou si l'utilisateur met fin à l'application pendant le processus de vérification? Dans ce cas, je ne déverrouille pas le contenu et ne termine pas la transaction. Et je pense que c'est plutôt logique.

Cependant, quand je remis en marche l'application (qui avait été mis fin à l'état « transaction inachevée ») et a essayé d'acheter l'in-app, je suis tombé dans l'état SKPaymentTransactionStateFailed avec transaction.error.code == SKErrorPaymentCancelled. Également une boîte de message est apparue qui a déclaré:

"Vous avez déjà acheté cet article, mais il n'est pas encore chargé.Appuyez sur" OK "pour le charger maintenant."

Après avoir appuyé sur « OK », je ne reçois pas de rappel appelé - et donc je ne déverrouille pas le contenu. Donc, mes questions sont les suivantes: 1) Est-il acceptable de laisser la transaction à l'état inachevé (si elle ne peut pas être vérifiée)? 2) Et comment puis-je le restaurer? Peut-être qu'il me manque un rappel qui accompagne la boîte à message "Vous avez déjà acheté ..."?

P.S. Mon achat in-app est "consommable". Donc, je ne peux pas utiliser

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
+0

ce que vous transmettons en tant que produit consommable? –

Répondre

2

D'accord, je l'ai résolu. L'essentiel est d'écouter la file d'attente de paiement depuis l'App Delegate, et non depuis "l'écran d'achat de l'interface utilisateur". En d'autres termes,

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

doit être

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

pas viewDidLoad mon habitude écran d'achat.

explication Grand se trouvent ici: When should i validate in-app purchase transaction receipt?

Questions connexes