Flutter in_app_purchase插件iOS端:模拟器正常真机异常问题排查
商品ID与App Store Connect配置不匹配
代码里的productIds必须和App Store Connect中创建的内购商品ID完全一致,大小写、特殊字符都不能错。模拟器依赖本地StoreKit文件可能会宽松匹配,但真实设备和TestFlight环境会严格校验。另外要确认商品状态是「准备提交」或「已批准」,未通过审核的商品无法在真实环境被查询到。StoreKit.storekit文件配置问题
即便同步了StoreKit文件,也要核对文件内的商品ID和App Store Connect的完全一致,有没有遗漏或拼写错误。同时检查Xcode中该文件的目标成员资格是否勾选了当前主App的target,没勾选的话真实环境无法读取这份配置。签名与权限配置问题
实体设备和TestFlight使用的签名文件(Provisioning Profile)必须关联开启了「In-App Purchase」功能的App ID。可以在Apple开发者后台确认App ID的内购权限是否开启,以及签名文件是否包含该权限。插件版本或初始化问题
虽然用的是in_app_purchase: ^3.1.7,但建议尝试更新到最新稳定版,旧版本可能存在真实环境的适配bug。另外要确保调用queryProductDetails前,_inAppPurchase已经完成初始化,并且正确监听了productStream等状态流。App Store Connect服务器延迟
刚创建或修改内购商品后,服务器可能需要1-2小时的同步时间,模拟器用本地文件即时生效,但真实环境要等服务器同步完成才能查询到商品。地区限制冲突
检查设备上的Apple ID所在地区,是否和内购商品设置的可用地区一致。如果商品只在特定地区上架,其他地区的设备无法查询到对应商品。沙盒测试账号问题
TestFlight和实体设备测试内购必须使用App Store Connect创建的沙盒测试账号,普通Apple ID无法访问沙盒内购资源。同时要确认测试账号没有被禁用,且地区符合商品的地区限制。
内容的提问来源于stack exchange,提问作者Maxim Suponya

