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

iOS 18.4下StoreKit 2加载订阅产品失败问题求助

iOS 18.4中StoreKit 2 Product.products(for:)返回空列表的解决办法

排查与修复步骤

1. 沙盒账号与设备配置校验

  • 确保测试设备已登录沙盒测试账号:进入「设置」→「App Store」→「Sandbox Account」,退出原有账号后重新登录沙盒账号。iOS 18.4对沙盒验证流程做了调整,未正确登录沙盒可能导致产品拉取失败。
  • 核对App Bundle ID:确认项目中的Bundle ID与App Store Connect中的配置完全一致(包括大小写),18.4版本强化了Bundle ID的匹配校验。

2. 代码层面调整与日志优化

  • 显式初始化支付队列:在调用Product.products(for:)前,添加SKPaymentQueue.default().add(self)(若已实现SKPaymentTransactionObserver协议),StoreKit 2在18.4中可能依赖支付队列的初始化状态。
  • 完善错误日志:将原代码中的错误打印改为:
    print("Product fetch error: \(error.localizedDescription), full error: \(error)")
    
    详细的错误信息能帮助定位是权限问题、区域限制还是产品ID无效。

3. App Store Connect产品配置复查

  • 确认产品状态:确保订阅产品的状态为**「已批准」**,而非「准备提交」或「等待审核」,iOS 18.4仅拉取完全激活的产品。
  • 检查区域与本地化:验证测试设备所在地区在产品支持的本地化区域列表中,18.4版本严格过滤区域不匹配的产品。
  • 重新同步订阅组配置:进入App Store Connect的订阅组页面,重新保存配置后等待10-15分钟,让苹果服务器同步最新的产品数据。

4. 临时测试替代方案

如果上述方案暂时无法解决,可使用StoreKit 1的SKProductsRequest作为临时替代,代码示例:

class ProductsFetcher: NSObject, SKProductsRequestDelegate {
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        print("Fetched products: \(response.products)")
        print("Invalid IDs: \(response.invalidProductIdentifiers)")
    }
    
    func request(_ request: SKRequest, didFailWithError error: Error) {
        print("Request failed: \(error.localizedDescription)")
    }
}

// 使用示例
let fetcher = ProductsFetcher()
let request = SKProductsRequest(productIdentifiers: ["upm1"])
request.delegate = fetcher
request.start()

内容的提问来源于stack exchange,提问作者vivek malani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:57:13