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
相关产品推荐
相关产品推荐

