Подтвердить что ты не робот

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 {
}
4b9b3361

Ответ 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 не будет вызываться. Также проверка чека может завершиться неудачей.