2012-07-14 8 views
7

Ciao ho bisogno di implementare la funzionalità di ripristino in InApp-acquisto, per questo ha fatto un pulsante "Ripristina" che si chiama il metodopaymentQueue: (SKPaymentQueue *) updatedTransactions coda: (NSArray *) operazioni non viene chiamato mentre restoreCompletedTransactions

-(void)restorePurchasedProductsWithProductId:(NSString*)prodID 
{ 
    _productIdsArray = [[NSMutableArray alloc] init]; 
    productID = [prodID retain]; 
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
} 

Mi dà un popup per inserire la password di apple id.E dopo aver fatto ciò non accade nulla.

ho letto da qualche parte che si chiama

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

così ho fatto come questo

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
    NSLog(@"paymentQueue"); 
    for (SKPaymentTransaction *transaction in transactions) 
    { 
     switch (transaction.transactionState) 
     { 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateFailed: 
       [self failedTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateRestored: 
       NSLog(@"restored"); 
       [self restoreTransaction:transaction]; 
       break; 
      default: 
       break; 

     } 
    } 
} 

Ma il problema è il metodo di cui sopra non sta chiamando né questo

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 

-(void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error 

Ho incluso anche i protocolli necessari,

Può un corpo aiutarmi perché questi metodi delegato non chiedono processo di ripristino. Lo sto provando con un account di prova.

risposta

11

È necessario assicurarsi che la classe che implementa paymentQueueRestoreCompletedTransactionsFinished: e paymentQueue: restoreCompletedTransactionsFailedWithError: sia registrata come osservatore per la coda di pagamento.

Se hai scritto questo codice in un UIViewController, prova ad aggiungere questo nel vostro viewDidLoad:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

e in viewDidDisappear:

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self]; 
1

anch'io sto affrontando un problema come quello;

Dopo la ricerca & modifica, ho capito che:

[[SKPaymentQueue defaultQueue] finishTransaction:transaction] 

metodo non è implementato immediatamente.

In genere, controllo transaction.transactionReceipt e lo invio al mio server e, dopo tutto, invio una richiamata per completare la transazione. Infine, ho capito il problema non chiamando immediatamente la transazione finale. Quando cambio il mio codice, la mia app funziona.

La parte interessante era che, quando eseguo il test nell'ambiente sandbox, tutto funziona correttamente. Tuttavia, nell'app AppStore non ha funzionato bene. Quando ho apportato questa modifica, il mio problema è stato risolto.

Problemi correlati