2017-02-16 24 views
0

Я немного новичок, но в течение последних трех месяцев я очень много учился писать код (спасибо youtube!). Поэтому, пожалуйста, извините меня, если я сделаю очевидную ошибку.iOS IAP - Обработка восстановления, когда предыдущая покупка не производилась

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

По сути, мой IAP-процесс работает правильно, как и функция восстановления большую часть времени. Однако я ударил ошибку, когда пользователь нажимает кнопку восстановления, но раньше не делал никаких покупок в приложении. Мое приложение просто остается в состоянии «восстановления» с помощью spinner и interactiveEvents игнорируется.

Я не знаю, где разместить код, чтобы отменить счетчик и прекратить игнорировать события взаимодействия в ситуации, когда PaymentQueue, по-видимому, не возвращает никаких восстановленных транзакций.

Я попытался поместить это под .DEFAULT для следующих целей:

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { 
    for transaction in transactions { 
     switch transaction.transactionState 

, но это не кажется, не работает.

Кто-нибудь сталкивался с этим раньше и имеет предложения относительно того, как справиться с этой ситуацией?

С уважением, Gavin

ответ

0

Когда вы начинаете восстановление, метод наблюдателя paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) вызывается с ранее приобретенными сделками. Если никаких покупок не было сделано, то этот метод не вызывается.

Как только восстановление покупок завершено, вызывается метод наблюдателя paymentQueueRestoreCompletedTransactionsFinished(_:). Это метод, в котором вы должны обновить свой пользовательский интерфейс, чтобы указать, что восстановление завершено; скрыть прядильщик и т. д.

+0

О, ничего себе! haha, у меня даже есть эта функция в моем коде, но она просто ничего не сделала. Имеет смысл, однако, когда я перемещаю свои функции обновления пользовательского интерфейса (удаляю прядильщики и т. Д.) Из функции «paymentQueue (_ queue: SKPaymentQueue, updatedTransactions ...») в «paymentQueueRestoreCompletedTransactionsFinished (_ :)», теперь пользовательский интерфейс не обновляется ни в одной из ситуаций, где: 1) Пользователь ранее совершил покупку, не оплачиваемую IAP, или 2) Пользователь никогда не совершал покупку IAP до ... Что мне не хватает ?! –

+0

Вы отправляете обновления своего интерфейса в основной очереди? – Paulw11

+0

Paulw11, спасибо за ваши быстрые ответы! Хорошо, так что, честно говоря, я не совсем уверен ... но я не пошел вперед и сознательно создал дополнительные очереди, поэтому я предполагаю, что восстановление происходит в главной очереди в следующей функции: 'func paymentQueue (_ queue: SKPaymentQueue, updatedTransactions транзакции: [SKPaymentTransaction]) '. Мы знаем, что функция работает, потому что мы получаем вывод в консоли из switch transaction.transactionState ... case SKPaymentTransactionState.restored function. <Продолжение ниже> –