2010-08-12 2 views
4

J'écris du code pour les achats in-app et j'utilise une vue "Processing ..." avec un indicateur d'activité pour bloquer le bouton "Buy Now" initié. Toutefois, comment pouvez-vous savoir quand l'utilisateur clique sur un bouton "Annuler", car ces vues d'alerte proviennent de AppStore.app?Savoir quand l'utilisateur a appuyé sur les boutons d'annulation pendant l'achat In-App

Existe-t-il une méthode déléguée qui est appelée lorsque ces boutons d'annulation sont enfoncés? Ou est-ce une question de votre vue de devenir firstResponder encore? Qu'est-ce que j'oublie ici? Si vous pensez que ce n'est pas possible, jetez un oeil à l'application "I Am T-Pain" ... ils font quelque chose de très similaire et rejettent leur vue immédiatement après avoir appuyé sur le bouton Annuler.

alt text http://i37.tinypic.com/1t4ead.png

Répondre

8

En supposant que tout est correctement configuré, vous devriez avoir un objet implémentant SKPaymentTransactionObserver qui recevra les callbacks pour le succès de la transaction/échec/annulation.

Dans mon exemple, il est le purchaseManager objet mentionné dans cet appel

[[SKPaymentQueue defaultQueue] addTransactionObserver:purchaseManager]; 

Lorsque l'utilisateur annule un paiement, vous devriez recevoir un rappel avec un état de transaction d'annulation:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 

     switch (transaction.transactionState) 
     { 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       break; 

      case SKPaymentTransactionStateFailed: 
       // THIS IS THE STATE YOU SHOULD SEE 
       [self failedTransaction:transaction]; 
       break; 

          ... 
}

Vous peut utiliser ce rappel pour rejeter votre vue etc ...

+0

Honnêtement, je ne sais pas comment j'ai raté cela .... Je vérifiais pour annuler avec dans une instruction 'failedTransaction:' if et n'a jamais réalisé qu'il n'a jamais été dans cette instruction if. Je suppose que tout ce qu'il faut, c'est une autre paire d'yeux sur la situation. Merci mec! J'apprécie vraiment cela – iwasrobbed

+0

Comment cela résout-il le problème? Il n'y a pas encore d'état "Annulé" ici, alors comment savoir si la transaction a échoué ou a été annulée avant d'être émise? – Stavash

+4

Une fois que vous avez une transaction échouée, vérifiez si (transaction.error.code == SKErrorPaymentCancelled). . . – codeghost

Questions connexes