2012-02-08 4 views
2

J'essaie de comprendre comment je peux écouter le bouton "Annuler" qui apparaît dans l'alerte de "confirmation" lorsque l'utilisateur essaie d'acheter quelque chose. Vous savez, la version officielle faite par Apple, ressemble à quelque chose comme: "Confirmer votre achat In App. Voulez-vous acheter un produit $ pour $ prix? [Annuler] [Acheter] »Achat via l'application: Ecouter le bouton "Annuler"

Si je comprends mon code correctement, l'alerte initié par quelque chose comme ceci:.

SKPayment *payment = [SKPayment paymentWithProductIdentifier:productIdentifier]; 
[[SKPaymentQueue defaultQueue] addPayment:payment]; 

Donc, fondamentalement, je voudrais faire quelque chose s'ils ont frappé Annuler Merci

Répondre

7

mettre en œuvre la méthode paymentQueue:updatedTransactions: du SKPaymentTransactionObserver Protocol Il vous pouvez vérifier la transactionState et la error de chaque objet transaction

J'utilise quelque chose comme ça:..

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 
    for (SKPaymentTransaction *transaction in transactions) { 
     switch (transaction.transactionState) { 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateFailed: 
       if (transaction.error.code == SKErrorPaymentCancelled) { 
        /// user has cancelled 
        [self finishTransaction:transaction wasSuccessful:NO]; 
       } 
       else if (transaction.error.code == SKErrorPaymentNotAllowed) { 
        // payment not allowed 
        [self finishTransaction:transaction wasSuccessful:NO]; 
       } 
       else { 
        // real error 
        [self finishTransaction:transaction wasSuccessful:NO]; 
        // show error 
       } 
       break; 
      case SKPaymentTransactionStateRestored: 
       [self restoreTransaction:transaction]; 
       break; 
      default: 
       break; 
     } 
    } 
} 
0

Utilisez quelque chose comme ceci:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 
    for (SKPaymentTransaction *transaction in transactions) { 
     switch (transaction.transactionState) { 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateFailed: 
       if (transaction.error.code == SKErrorPaymentCancelled) { 
        /// user has cancelled 
        [self finishTransaction:transaction wasSuccessful:NO]; 
       } 
       else if (transaction.error.code == SKErrorPaymentNotAllowed) { 
        // payment not allowed 
        [self finishTransaction:transaction wasSuccessful:NO]; 
       } 
       else { 
        // real error 
        [self finishTransaction:transaction wasSuccessful:NO]; 
        // show error 
       } 
       break; 
      case SKPaymentTransactionStateRestored: 
       [self restoreTransaction:transaction]; 
       break; 
      default: 
       break; 
     } 
    } 
} 
Questions connexes