Восстановить уже купленные в приложении покупки на iPhone? - PullRequest
40 голосов
/ 14 октября 2011

Я дошел до этого: после переустановки пользователю нужно нажать «купить функцию», затем он испугается вопроса о $ 0,99, затем должен войти в систему, а затем ему говорят, что функция уже куплена, и он получает ее бесплатно,

Я знаю, что яблоко - это религия, и пользователи - сильные верующие, но разве нет лучшего способа?:-) То, что я хочу, это проверить эту функцию, фактически не покупая ее.Разрешение пользователю вводить данные своей учетной записи кажется необходимым, может быть, купить функцию за 0,00 $?или есть метод где-нибудь, который делает это?

Я использую MKStoreKit для всей покупки в приложении, но любое решение было бы замечательно.


ОБНОВЛЕНИЕ

Спасибо darvids0n, ваш метод решил мою проблему!вот некоторый рабочий код для других, пытающихся сделать то же самое:

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

Ответы [ 2 ]

33 голосов
/ 14 октября 2011

Если предмет стоимостью 0,99 долл. США не является расходуемым, вам следует предоставить кнопку «Восстановить покупки» (или аналогичную), которая вызывает

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

Если вы уже добавили наблюдателя транзакции и внедрили протокол , включая случай обработки восстановленной транзакции (с состоянием SKPaymentTransactionStateRestored), это будет работать.

10 голосов
/ 23 августа 2012

Добавьте эти два метода:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self];

[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];
...