检测已取消的itunes登录提醒以进行应用内购买

时间:2013-02-05 15:35:45

标签: ios objective-c storekit

我有一个实现SKPaymentTransactionObserver的类。但是,当单击购买按钮时,如果用户未登录到应用商店,则会收到警报,要求提供现有ID或创建新ID。如果用户点击取消此消息或后续登录凭据警报,则不会收到该取消的通知。点击购买按钮后,我有一个覆盖屏幕的活动视图,所以我真的需要知道登录提醒是否被取消。

我已经测试了错误代码SKErrorPaymentCancelled,如果在登录后取消购买流程,则会有效。我正在设备上进行测试。

任何线索?

-UPDATE-

道歉我忘了提到这只发生在尝试恢复交易时,并且揭示了答案:我对协议缺乏了解。

4 个答案:

答案 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。如果不是,那么应用程序实际上在处理交易时遇到了问题。