Restaurar compras in-app ya compradas en iPhone?


Llegué hasta ahora: Después de una reinstalación, un usuario necesita hacer clic en "comprar función", luego se asusta con la pregunta de 0 0.99, luego tiene que iniciar sesión y luego se le dice que la función ya está comprada y lo obtiene de forma gratuita.

Sé que Apple es una religión y los usuarios son fuertes creyentes, pero ¿no hay una mejor manera? :- ) Lo que quiero es comprobar la característica sin realmente comprarla. Dejar que el usuario ingrese la información de su cuenta parece ser necesario,tal vez comprar una función de 0 0.00? ¿o hay un método en algún lugar que hace esto?

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


UPDATE

Gracias a darvids0n, su método resolvió mi problema! aquí hay un código de trabajo para otros que intentan lo 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 */
    }
}
Author: iwasrobbed, 2011-10-14

2 answers

Si el artículo de 0 0.99 no es consumible, debe proporcionar un botón" Restaurar compras " (o similar) que llame a

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

Suponiendo que ya haya agregado un observador de transacciones e implementado el protocolo incluyendo un caso para manejar una transacción restaurada (con estado SKPaymentTransactionStateRestored), esto funcionará.

 33
Author: darvids0n,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-13 23:33:14

Agregue estos dos métodos :

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];
 10
Author: manish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-23 09:30:16