如何在iOS InApp购买时select不购买商品时自定义error handling?

例如,当用户要求在InApp购买期间login时,他们可以点击“取消”button,然后应用程序将鞋

Can't connect to the iTunes Store 

是否有可能使用我们自己的callback,而不是这个标准的消息?

我相信你没有得到“无法连接到iTunes商店”的警报,我怀疑你是显示警告视图与callback错误。

我已经检查了iOS 5和4.3。 如果你没有看到这个4.3和以上,我不会担心这一点。

你可以检查用户是否用下面的代码取消了交易

尝试下面的代码restoreCompletedTransactionsFailedWithError

 if (!((error.code != SKErrorPaymentCancelled) && (error.code != SKErrorPaymentNotAllowed))){ NSLog(@"User Cancelled"); } 

我知道这看起来有点混乱,但效果很好,即使用户在恢复或新购买时取消,它也能正常工作。

购买取消时,系统不会显示任何提醒,取决于您的应用程序。 请参阅文档中的步骤#10。

基本上,这是这样的:

方法paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions您的transactionObserver在事务开始,成功或失败时被调用。 如果失败, -[SKPaymentTransaction error]将包含一个常规的NSError。 然后你可以检查它的代码并采取相应的行动。

已知的代码是:(从<StoreKit/SKError.h>

 // 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 }; 

您可能至less要检查SKErrorPaymentCancelled和SKErrorPaymentNotAllowed。

另一个有趣的地方是NSError包含一个可以在UIAlertView显示的localizedDescription 。 这就是“无法连接到iTunes Store”文本的地方。

(另外,可能有关:用于testing应用内购买的Sandbox商店是flakey,这可能会解释错误。)

我在testing的时候,在取消login的时候我不会得到这个消息,但是只有我的代码生成的消息:

你确定你没有触发SKPaymentQueue Callback方法中的消息paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions处理状态SKPaymentTransactionStateFailed

在取消事务的情况下, transaction.error.code被设置为SKErrorPaymentCancelled 。 在这种情况下,可以省略任何popup窗口或显示自己的错误。