内购时点击登录提示取消按钮出现SKErrorDomain Code=0错误求助
解决SKErrorDomain Code=0 "Cannot connect Itunes store"(取消登录时触发)的问题
嘿,这个坑我之前踩过!其实这个错误是系统提示文案的误导——当用户点击登录提示框的「取消」时,Store Kit 确实会返回 SKErrorDomain Code=0,但这对应的是用户主动取消授权流程,而非真的无法连接到iTunes Store。系统默认的错误信息太容易让人误解了,咱们可以通过代码逻辑来修正这个问题:
核心原因
SKErrorDomain Code=0 对应的枚举是 SKError.paymentCancelled(Swift)或 SKErrorPaymentCancelled(Objective-C),只是系统返回的localizedDescription错误地显示成了"Cannot connect Itunes store",导致你误以为是连接问题。
具体修复步骤
- 精准捕获取消事件:在处理支付交易的回调里,不要只看错误码,而是通过SKError的枚举来判断具体错误类型,把用户取消的场景单独处理:
Swift 示例
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { switch transaction.transactionState { case .failed: guard let skError = transaction.error as? SKError else { queue.finishTransaction(transaction) return } switch skError.code { case .paymentCancelled: // 这里处理用户取消的逻辑,比如给用户友好提示:"已取消购买流程" print("用户主动取消了授权登录") default: // 这里才处理真正的连接/支付错误 print("支付出错:\(skError.localizedDescription)") } queue.finishTransaction(transaction) // 处理其他交易状态(如购买成功、恢复成功等) case .purchased, .restored: // 你的业务逻辑 queue.finishTransaction(transaction) default: break } } }Objective-C 示例
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions { for (SKPaymentTransaction *transaction in transactions) { if (transaction.transactionState == SKPaymentTransactionStateFailed) { NSError *error = transaction.error; if ([error.domain isEqualToString:SKErrorDomain]) { if (error.code == SKErrorPaymentCancelled) { // 用户取消授权,自定义提示 NSLog(@"用户已取消购买流程"); } else { // 处理其他真实错误 NSLog(@"支付错误:%@", error.localizedDescription); } } [queue finishTransaction:transaction]; } // 处理其他交易状态 else if (transaction.transactionState == SKPaymentTransactionStatePurchased || transaction.transactionState == SKPaymentTransactionStateRestored) { // 你的业务逻辑 [queue finishTransaction:transaction]; } } } - 替换错误提示文案:不要直接把系统返回的
localizedDescription展示给用户,针对取消场景自定义友好提示,避免用户困惑。 - 验证测试:再次测试取消登录的流程,确认代码分支正确触发,自定义提示正常显示,而不是弹出"无法连接到iTunes Store"的错误。
额外说明
根据你的描述,正常登录或创建ID时功能正常,说明你的IAP配置(App Store Connect商品、签名等)是没问题的,不用在这方面浪费精力,重点放在错误分支的区分处理上就好。
内容的提问来源于stack exchange,提问作者min
相关产品推荐
相关产品推荐

