2012-07-14 24 views
7

Hola necesito para implementar la funcionalidad de restauración en InApp-Compra, por esto hizo un botón "Restaurar", que está llamando al métodopaymentQueue: (SKPaymentQueue *) updatedTransactions cola: (NSArray *) transacciones no se llama mientras restoreCompletedTransactions

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

Me da una ventana emergente para ingresar la contraseña de apple id.Y después de hacer eso no pasa nada.

He leído en alguna parte que llama

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

Así que me ha gustado esta

- (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; 

     } 
    } 
} 

pero el problema es el método anterior no está llamando ni este

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 

ni

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

También he incluido los protocolos requeridos,

¿Puede algún cuerpo me ayude por qué estos métodos de delegado no están pidiendo proceso de restauración. Lo estoy intentando con la cuenta de prueba.

Respuesta

11

Debe asegurarse de que la clase que implementa paymentQueueRestoreCompletedTransactionsFinished: y paymentQueue: restoreCompletedTransactionsFailedWithError: esté registrada como observador para su cola de pagos.

Si usted ha escrito este código en un UIViewController, trate de añadir esto en su viewDidLoad:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

y en viewDidDisappear:

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self]; 
1

También estoy frente a un problema como tal;

Después de la modificación de investigación &, me di cuenta de que:

[[SKPaymentQueue defaultQueue] finishTransaction:transaction] 

método no se implementa inmediatamente.

Normalmente, verifico transaction.transactionReceipt y lo envío a mi servidor y después de todo eso envío una devolución de llamada para finalizar la transacción. Finalmente, entendí el problema de no llamar a finalizar transacción de inmediato. Cuando cambio mi código, mi aplicación funciona.

Una parte interesante fue que, cuando pruebo en entorno de entorno limitado, todo funciona bien. Sin embargo, en la aplicación AppStore no funcionó bien. Cuando hice esta modificación, mi problema fue resuelto.

Cuestiones relacionadas