web-dev-qa-db-fra.com

Restaurer des achats intégrés déjà achetés sur iPhone?

Je suis arrivé jusqu'ici: après une réinstallation, un utilisateur doit cliquer sur "acheter une fonctionnalité", puis il a peur de la question à 0,99 $, puis doit se connecter et se fait dire que la fonctionnalité est déjà achetée et qu'il l'obtient gratuitement.

Je sais Apple est une religion et les utilisateurs croient fermement, mais n'y a-t-il pas une meilleure façon? :-) Ce que je veux, c'est vérifier la fonctionnalité sans vraiment l'acheter. Laisser l'utilisateur entrer ses informations de compte semble être nécessaire, peut-être acheter une fonctionnalité à 0,00 $? ou y a-t-il une méthode quelque part qui fait cela?

J'utilise MKStoreKit pour l'ensemble de l'achat intégré, mais toute solution serait excellente.


MISE À JOUR

merci à darvids0n, votre méthode a résolu mon problème! voici un code de travail pour les autres qui essaient la même chose:

- (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 */
    }
}
40
Daniel Brown

Si l'article à 0,99 $ n'est pas consommable, vous devez fournir un bouton "Restaurer les achats" (ou similaire) qui appelle

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

En supposant que vous avez déjà ajouté un observateur de transaction et implémenté le protocole incluant un cas pour gérer une transaction restaurée (avec l'état SKPaymentTransactionStateRestored), cela fonctionnera.

33
darvids0n

Ajoutez ces deux méthodes:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];
10
manish