2013-03-14 8 views
5

Ho implementato l'acquisto in-app basato sul tutorial this. Il problema che ho riscontrato è che non riesco a rilevare quando si preme il pulsante Annulla sulla comunicazione "Conferma l'acquisto in-app", che è una parte del framework StoreKit.Rileva pulsante Annulla Toccare "Conferma l'acquisto in-app" UIAlert

Alcune fonti suggeriscono che -(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions viene chiamato quando viene premuto Annulla, ma nel mio caso non viene mai eseguito. Il mio set up è il ViewController che importa IAPManager: classe NSObject conforme a SKProductRequestDelegate e SKPaymentTransactionObserver. Il prodotto viene richiesto con successo ma l'osservatore delle transazioni non chiama mai paymentQueue.

Come posso farlo funzionare in modo da poter rilevare il pulsante Annulla?

risposta

0

Non ho usato StoreKit, ma suppongo che il tuo SKRequestDelegate riceverà il messaggio request:didFailWithError: se l'utente annulla.

+0

No, anche questo metodo non viene chiamato. – Vad

+0

Hmm. Sei sicuro che stai impostando il tuo controller di visualizzazione come delegato? – bdesham

+0

My ViewController importa IAPManager (NSObject) che imposta SKRequestDelegate e altri delegati (SKProductRequestDelegate e SKPaymentTransactionObserver). – Vad

10

in metodo delegato guardo il tutorial failedtransaction non fa nulla se l'utente annulla. ma puoi aggiungerlo in questo modo.

- (void)failedTransaction:(SKPaymentTransaction *)transaction 
{ 
    if (transaction.error.code != SKErrorPaymentCancelled) 
    { 
     // error! 
      NSLog(@"Something went Wrong!"); 
     [self finishTransaction:transaction wasSuccessful:NO]; 
      NSLog(@"transaction error :%@", transaction.error.localizedDescription); 
    } 
    else 
    { 
      NSLog(@"Cancelled"); 
     // this is fine, the user just cancelled 
     [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
    } 
} 
1

Questa linea ha dovuto essere aggiunti per farlo funzionare:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

Grazie a tutti per il vostro aiuto.

Problemi correlati