RestoreCompletedTransactions сломан?
Исправлено восстановлениеCompletedTransactions в SDK 4.3?
Я пытаюсь восстановить мою автоматически возобновляемую подписку. Это не приводит к обратному вызову updatedTransactions. Вот мой код.
{
....
[appDelegate.inapp loadStore];
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
....
}
Ожидание обратного вызова на updatedTransactions, но не получает его.
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
NSLog(@"IN updatedTransactions, transaction.transactionState");
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
...
...
case SKPaymentTransactionStateRestored:
NSLog(@"IN updatedTransactions, SKPaymentTransactionStateRestored");
[self restoreTransaction:transaction];
break;
}
}
}
Но в конце я получаю звонок.
-(void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
}
Ответы
Ответ 1
Это может продолжаться (1), если вы тестируете среду Sandbox, а ваш Test User сломан. Создайте нового тестового пользователя в iTunes Connect и повторите попытку.
Не совсем понятно, что делает Test Users плохой; из того, что я собираю, использование их один раз в среде без песочницы может это сделать, но могут быть и другие причины.
(1) Xcode 4.3.1, iOS SDK 5.1
Ответ 2
Мне удалось обойти это, но это было очень странно. На моем устройстве тестирования я получаю прослушивание iTunes для входа в несколько тестовых учетных записей пользователей. Обычно я просто удаляю отмену и тестирую свое восстановление с учетной записью, которую хочу восстановить. На этот раз я решил ввести пароль для этих других раздражающих регистрационных ящиков. Это сработало, и в следующий раз, когда я перезапустил свое приложение и ударил его, я не ошибся, чтобы войти в другие тестовые учетные записи, только те, которые я тестировал. Я продолжил восстановление, и он восстановил элементы, которые я хотел увидеть.
Id сказал, что это были эксперименты с глупыми песочницами, а также мы знаем, что Apple изменила при покупке приложений в целом. Продолжайте играть с ним, вы получите его, чтобы поработать.
Надеюсь, это поможет вам.
Ответ 3
Обязательно добавьте наблюдателя перед использованием [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
Ваш код должен выглядеть примерно так:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
Ответ 4
Продукты Расходуемые не могут быть восстановлены.
Продукты Нерасходуемые могут быть восстановлены.
Проверьте, не являются ли ваши продукты типом Non-Consumable.
Ответ 5
Вы не должны нуждаться в обратном вызове updatedTransactions, если вы получаете paymentQueueRestoreCompletedTransactionsFinished. В "очереди" есть список ваших транзакций, и вы можете прокручивать их.
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
for (SKPaymentTransaction *transaction in queue.transactions)
if ([myItem.productID isEqualToString:transaction.payment.productIdentifier])
myItem.purchased = YES;
}
Ответ 6
Убедитесь, что ваш номер сборки в Xcode не содержит пробела. Например, "1.0 Beta". С пространством updatedTransactions не будет вызываться. Также проверка чека может завершиться неудачей.