restoreCompletedTransactionsFailedWithError:取消时出现错误代码0(SKErrorUnknown)

基本上,我想在完成某些特定原因的情况下恢复已完成的事务失败时显示警告,但是当用户在Apple ID /密码提示下点击“取消”时则不显示警报。

在我的实施中:

- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error 

…我正在测试针对SKErrorPaymentCancelled (也许我也应该针对SKErrorPaymentNotAllowed测试,但现在这不相关)。

无论如何,当点击“取消”时,警报仍显示。 NS-Logging其值显示error.code == 0 (即SKErrorUnknown )。

这发生在iOS 4.3.1,Xcode 4.2,build 4C199(当然是沙盒存储)上。

我已经检查了类似的问题,但回答的不是我的案例中发生的事情(也就是说,我已经在做的事情应该产生正确的行为)……任何想法?

检查这些。 应该够了。

 // error codes for the SKErrorDomain enum { SKErrorUnknown, SKErrorClientInvalid, // client is not allowed to issue the request, etc. SKErrorPaymentCancelled, // user cancelled the request, etc. SKErrorPaymentInvalid, // purchase identifier was invalid, etc. SKErrorPaymentNotAllowed // this device is not allowed to make the payment }; 

来自https://stackoverflow.com/a/9017990/129202 。

所以我做的是我在error.code上进行切换,并且只在代码不是SKErrorPaymentCancelled时显示错误。 用户可能知道他/她按下了取消按钮(进入用户/通行证时)。

因此SKErrorPaymentCancelled应该捕获取消。 如果取消按钮抛出另一个错误代码,那么iOS版本有问题吗?

我发现在iOS模拟器上,取消失败,错误代码为0( SKErrorUnknown )。 但是如果你在设备上运行它,它会正确返回SKErrorPaymentCancelled 。 这似乎也适用于iOS 9。