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

使用StoreKit 2的Product.products()获取订阅产品时解码失败求助

StoreKit 2 Product.products() 解码错误分析与解决

错误原因

这个countMismatch错误的核心是:App Store返回的产品数据中,attributes、offers、discounts字段的数组长度不符合StoreKit 2的解码规则——这几个字段被要求只能是0个或1个元素的数组,但实际返回了2个元素,直接导致解码失败。

常见触发场景:

  • App Store Connect中订阅产品的**促销优惠(Offers)或折扣(Discounts)**配置了重复项
  • 订阅产品的**属性(Attributes)**添加了重复的键值对
  • 跨区域的优惠配置冲突,导致接口返回的数组包含多条重复数据

解决方法

  1. 检查并修正App Store Connect配置

    • 进入App Store Connect对应订阅产品的编辑页面
    • 清理**促销优惠(Promotional Offers)和订阅折扣(Subscription Discounts)**板块的重复项,确保每个类型下最多保留1个有效配置
    • 删除**产品属性(Attributes)**中的重复键值对
  2. 清理缓存后重新测试

    • 卸载测试设备上的App,彻底清除StoreKit缓存
    • 重启Xcode和测试设备,重新运行项目获取产品数据
  3. 验证产品ID有效性

    • 确认代码中传入的product_id与App Store Connect的配置完全一致,无拼写错误
    • 检查该产品是否已在对应App ID下启用,且状态为「准备提交」或「已批准」
  4. 临时替代方案(可选)
    如果暂时无法修改App Store配置,可以用StoreKit 1的SKProductsRequest作为临时替代:

    let request = SKProductsRequest(productIdentifiers: ["product_id"])
    request.delegate = self
    request.start()
    

    实现代理方法处理结果:

    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        if let product = response.products.first {
            // 处理产品逻辑
        }
    }
    

内容的提问来源于stack exchange,提问作者nagy csongor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:40:35