You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

内购时点击登录提示取消按钮出现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:54:45