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

SKProductsRequestDelegate请求商品未触发,自研StoreService类失效排查求助

针对SKProductsRequestDelegate未回调及RevenueCat超时问题的排查方案

1. 项目配置与权限检查

  • 确认项目Signing & Capabilities中已添加In-App Purchase能力,且关联的开发者账号已签署完整付费协议、启用内购权限。
  • 若使用StoreKit本地配置文件,检查.storekit文件是否已正确关联到项目Scheme,且文件内商品ID与代码请求的完全一致(含大小写),商品状态设为Available。

2. 网络环境排查

  • 关闭全局代理、VPN或防火墙,切换至手机热点测试——即使是本地配置,模拟器仍可能尝试连接Apple服务器,网络拦截会导致请求无响应或超时。
  • 终端执行ping sandbox.itunes.apple.com,确认Apple沙箱域名的连通性,这是RevenueCat和原生StoreKit请求的核心依赖。

3. 代码细节验证

  • 强制确保SKProductsRequest的初始化、代理设置及启动逻辑都在主线程执行,可添加断言验证:
    assert(Thread.isMainThread, "StoreKit API must be called on main thread")
    
  • 检查StoreService实例是否全程保持强引用,可通过断点或打印日志确认实例未被提前释放;排查代码中是否存在意外将delegate置空的逻辑。
  • 确认SKProductsRequestDelegate的方法签名完全正确,尤其是错误回调方法,避免因签名错误导致无响应:
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        // 处理商品数据
    }
    
    func request(_ request: SKRequest, didFailWithError error: Error) {
        // 打印错误信息,定位问题
        print("Store request failed: \(error.localizedDescription)")
    }
    

4. StoreKit本地配置额外注意

  • 仅iOS 15+模拟器支持本地配置,确认模拟器系统版本符合要求;Scheme设置中需明确选中对应的.storekit文件。

5. 沙箱账号与开发者后台检查

  • 沙箱账号需为当前开发者账号下创建的有效账号,且已在设备设置->App Store->Sandbox Account中登录(不可在App内直接登录)。
  • 开发者后台内购商品状态需为Ready to Submit或Approved,Rejected或Invalid状态的商品无法在沙箱环境获取。

内容的提问来源于stack exchange,提问作者Bruno Pantaleão

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:18:34