2011-10-13 17 views
39

Llegué hasta ahora: después de reinstalar, un usuario debe hacer clic en "comprar función", luego se asusta con la pregunta de $ 0.99, luego tiene que iniciar sesión y luego se le dice que la función ya está comprada y la obtiene de forma gratuita.Restaurar ya compró compras en la aplicación en el iPhone?

Sé que la manzana es una religión y los usuarios son fuertes creyentes, pero ¿acaso no hay una mejor manera? :-) Lo que quiero es verificar la característica sin comprarla realmente. Permitir que el usuario ingrese la información de su cuenta parece ser necesario, ¿tal vez comprar una característica de $ 0.00? o hay un método en alguna parte que hace esto?

Estoy usando MKStoreKit para toda la compra integrada en la aplicación, pero cualquier solución sería genial.


ACTUALIZACIÓN

Gracias a darvids0n, su método resuelve mi problema! aquí hay un código de trabajo para otros tratando el mismo:

- (void)removePreviousPurchases { //just for sandbox testing 
    [[MKStoreManager sharedManager] removeAllKeychainData]; 
} 

- (void)restorePreviousPurchases { //needs account info to be entered 
    if([SKPaymentQueue canMakePayments]) { 
     [[MKStoreManager sharedManager] restorePreviousTransactionsOnComplete:^(void) { 
      NSLog(@"Restored."); 
      /* update views, etc. */ 
     } 
     onError:^(NSError *error) { 
      NSLog(@"Restore failed: %@", [error localizedDescription]); 
      /* update views, etc. */ 
     }]; 
    } 
    else 
    { 
     NSLog(@"Parental control enabled"); 
     /* show parental control warning */ 
    } 
} 

Respuesta

33

Si el artículo $ 0.99 es no consumible, a continuación, se debe proporcionar un botón "Restaurar compras" (o similar) que llama

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 

Asumiendo ya ha agregado un observador de transacción e implementó el protocol, incluido un caso para manejar una transacción restaurada (con el estado SKPaymentTransactionStateRestored), esto funcionará.

+0

Gracias, finalmente encontró el método MKStore-kit a utilizar para esto! (ver edición de mi pregunta) –

+0

Si tengo 10 identificadores de compra no consumibles y de los cuales 4 son comprados por el usuario. Durante la restauración, ¿cómo puedo saber cuáles se compraron anteriormente y cuáles no? – Satyam

+0

@Satyamsvv No recibirá devoluciones de llamadas por las compras que su usuario no haya comprado. Solo obtendrá 4 transacciones actualizadas en el método 'SKPaymentTransactionObserver' [' -paymentQueue: updatedTransactions: '] (http://developer.apple.com/library/ios/documentation/StoreKit/Reference/SKPaymentTransactionObserver_Protocol/Reference/Reference.html # // apple_ref/doc/uid/TP40008262-CH1-SW3), y el 'transactionState' de estos será' SKPaymentTransactionStateRestored'. – darvids0n

9

Añadir estos dos métodos:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

[[SKPaymentQueue defaultQueue]restoreCompletedTransactions]; 
+0

¿dónde debería agregar estos dos métodos? –

+0

donde debería poner esto – coolcool1994

Cuestiones relacionadas