我有一个实现SKPaymentTransactionObserver
的类。但是,当单击购买按钮时,如果用户未登录到应用商店,则会收到警报,要求提供现有ID或创建新ID。如果用户点击取消此消息或后续登录凭据警报,则不会收到该取消的通知。点击购买按钮后,我有一个覆盖屏幕的活动视图,所以我真的需要知道登录提醒是否被取消。
我已经测试了错误代码SKErrorPaymentCancelled
,如果在登录后取消购买流程,则会有效。我正在设备上进行测试。
任何线索?
-UPDATE-
道歉我忘了提到这只发生在尝试恢复交易时,并且揭示了答案:我对协议缺乏了解。
答案 0 :(得分:36)
在用户尝试取消恢复购买请求工具后检测取消事件:
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error
{
// test error.code, if it equals SKErrorPaymentCancelled it's been cancelled
}
答案 1 :(得分:9)
在Swift 3.0中
public func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
print("Cancel Transaction");
}
答案 2 :(得分:1)
在Swift 2.2中
public func paymentQueue(queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: NSError) {
print("Cancel Transaction")
}
答案 3 :(得分:0)
当用户取消让他们输入Apple ID凭据的提示时,交易状态为SKPaymentTransactionStateFailed
。这可能会造成混淆,因为交易在技术上并没有失败"如果用户愿意退出流程。要检测用户是否已实际退出流程,请检查事务错误的错误代码(由transaction.error.code
访问)是否为SKErrorPaymentCancelled
。如果不是,那么应用程序实际上在处理交易时遇到了问题。