Обнаружение отмененного входа в систему itunes для покупок в приложении
У меня есть класс, который реализует SKPaymentTransactionObserver
. Однако при нажатии кнопки "купить", если пользователь не подписан в хранилище приложений, он получает предупреждение с запросом на существующий идентификатор или для создания нового. Если пользовательские клики отменили это действие или последующее оповещение учетных данных для входа в систему, я не получаю уведомления об этом отмене. У меня есть вид активности, охватывающий экран после нажатия кнопки покупки, поэтому мне действительно нужно знать, было ли отменено предупреждение о регистрации.
Я уже тестирую код ошибки SKErrorPaymentCancelled
, и это работает, если процесс покупки отменяется после входа в систему. Я тестирую на устройстве.
Любые подсказки?
-UPDATE-
Извиняюсь, что забыл упомянуть, что это произошло только при попытке восстановить транзакции, и это показывает ответ: отсутствие знаний о протоколе.
Ответы
Ответ 1
Чтобы обнаружить событие отмены после того, как пользователь пытается отменить реализацию запроса на восстановление, выполните следующие действия.
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
{
// test error.code, if it equals SKErrorPaymentCancelled it been cancelled
}
Ответ 2
В Swift 3.0
public func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
print("Cancel Transaction");
}
Ответ 3
В Swift 2.2
public func paymentQueue(queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: NSError) {
print("Cancel Transaction")
}
Ответ 4
Когда пользователь отменяет приглашение, в котором они вводят свои учетные данные Apple ID, состояние транзакции SKPaymentTransactionStateFailed
. Это может сбивать с толку, потому что транзакция технически "не удалась", если пользователь добровольно вышел из процесса. Чтобы определить, действительно ли пользователь вышел из процесса, проверьте, не является ли код ошибки ошибки транзакции (доступ к которой равен transaction.error.code
) SKErrorPaymentCancelled
. Если это не так, у приложения действительно были проблемы с обработкой транзакции.