Я думаю, что ваша проблема связана с учетными записями пользователей песочницы в iTunes Connect. Если у вас нет пользователей с песочницей, это руководство было очень полезно для их настройки:
https://support.magplus.com/hc/en-us/articles/203809008-iOS-How-to-Test-In-App-Purchases-in-Your-App
Если у вас есть пользователи Песочницы:
Вы можете попробовать позвонить finishTransaction:
, однако вам необходимо убедиться, что SKPaymentTransactionState
транзакции приемлемы.
Согласно документации на finishTransaction
:
// Asynchronous.
// Remove a finished (i.e. failed or completed) transaction from the queue.
// Attempting to finish a purchasing transaction will throw an exception.
Чтобы безопасно удалить завершенные транзакции:
for transaction in SKPaymentQueue.default().transactions {
guard
transaction.transactionState != .purchasing,
transaction.transactionState != .deferred
else {
//Optionally provide user feedback for pending or processing transactions
return
}
//Transaction can now be safely finished
SKPaymentQueue.default().finishTransaction(transaction)
}
Документация по .purchasing
и .deferred
довольно расплывчата:
case purchasing // Transaction is being added to the server queue.
case deferred // The transaction is in the queue, but its final status is pending external action.
Насколько я понимаю, обработка ожидающих и / или обрабатывающих транзакций должна быть довольно пассивной. Приложение сделало все, что ему было нужно, и ожидает ответа от сервера iTunes Store или какой-либо другой зависимости (например, авторизация платежа).
paymentQueue: updatedTransactions:
будет вызываться в очереди SKPaymentTransactionObserver
при обновлении транзакции.
Поскольку ваша очередь транзакций застряла в подвешенном состоянии, я готов поспорить, что все транзакции в вашей очереди находятся в состоянии .purchasing
. Это, скорее всего, ошибка в iTunes Connect / пользователях песочницы / производственных учетных записях iTunes. Другие, в том числе и я, тоже имели эту проблему. Для этого есть отчет об ошибке. Попробуйте воссоздать / изменить пароль пользователя вашей песочницы или создать нового пользователя песочницы для тестирования.
Больше информации здесь:
https://forums.developer.apple.com/thread/70418