3

所以基本上,我想在由于某些网络/iTunes 特定的原因恢复已完成的交易失败时显示警报,而不是当用户在 Apple ID/密码提示上点击“取消”时。

在我的实施中:

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

...我正在测试error.codeSKErrorPaymentCancelled也许我也应该测试SKErrorPaymentNotAllowed,但现在不相关)。

尽管如此,当点击“取消”时,警报仍然显示。NS-Logging 其值表明error.code == 0(即SKErrorUnknown)。

这发生在 iOS 4.3.1、Xcode 4.2、build 4C199(当然是沙盒商店)上。

我已经检查了类似的问题,但是在我的情况下所回答的不是正在发生的事情(也就是说,我已经在做的事情应该产生正确的行为)......有什么想法吗?

4

2 回答 2

3

检查这些。应该够了。

// 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 版本有问题吗?

于 2013-05-02T01:48:10.347 回答
3

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

于 2015-10-29T05:28:16.330 回答