内购找不到商品 报错 Invalid product identifiers found
[苹果支付提示“无法找到商品”?这篇避坑指南帮你彻底解决]
()
//https://blog.csdn.net/weixin_39339407/article/details/148894917
一、苹果内购商品请求的核心前提
- 商品信息必须配置完整
商品 ID 要与 App Store Connect 中保持一致,大小写、空格都不能有差错;
商品的元信息(价格、描述等)需填写完整。
var productIdentifiers: Set<String> = ["year","week","month"]
- “协议、税务与银行业务”必须全部有效
苹果后台要求开发者在 App Store Connect 里签署付费协议;
完成税务信息的填写与审核;
银行账户信息必须有效且通过验证。
这三项若未完成或有待处理,苹果会静默禁止商品,导致无法请求到任何内购商品。
苹果不会对外公开这一点,但事实是:
如果你的付费协议过期、银行账户失效、税务信息缺失,所有商品都会被静默禁用,即使商品本身状态“已批准”。
请进入:
App Store Connect > 协议、税务与银行业务;
查看是否有协议待签署;
银行信息是否有效;
税务状态是否通过验证;
商品状态可以是“准备提交”或“等待审核”,即可用于沙盒测试
商品不必提交审核或处于已批准状态,只要配置完整,状态为“准备提交”或“等待审核”,就能在沙盒环境或 TestFlight 测试中成功请求;
只有当你希望商品正式上线销售时,才需要提交审核并获得批准。必须在真机环境下测试
内购商品请求不支持模拟器;
测试时需确保网络通畅,并使用正确的 Sandbox 测试账号或者TestFlight包进行测试。App 的 Bundle ID 必须与商品绑定的 App 完全一致
请确保:
当前 App 构建使用的 Bundle Identifier 与商品所属 App 完全一致;
没有改包名或误切换了目标环境;
商品不是属于另一个 App 或测试工程。
二、为什么你会遇到“无法找到商品”?
出现“无法找到商品”问题,往往不是单一原因,而是配置链路中某个环节未达标。这里帮你总结了最常见的几个坑:
排查点
商品 ID 是否完全一致: 大小写、空格等细节要严格匹配。
商品是否配置完整: 元信息未填写完整会导致无效。
付费协议、税务、银行信息状态: 三项必须均为有效状态,后台同步后才能生效。
是否在真机且使用了正确账号: 模拟器不支持内购,必须用真机且用 Sandbox 账号。
是否等待了足够的同步时间: 配置完成后苹果后台同步需要30分钟到数小时,过早测试会失败。
Bundle ID 是否一致: App 和商品关联的 Bundle ID 必须完全匹配。
三、沙盒环境下内购商品请求的正确姿势
在商品配置、协议、税务和银行信息都完整且有效后,耐心等待 30 分钟至半天,苹果后台会同步最新数据;
使用真机安装带有正确 Bundle ID 的 App;
账号登录使用 Sandbox 测试账号;
调用 StoreKit 的商品请求接口,检查返回的 products 和 invalidProductIdentifiers,确认商品是否正常返回。
四、总结
苹果内购商品请求失败,最重要的不是代码复杂,而是:
1.商品配置要完整且精准,包含所有元信息;
2.付费协议、税务和银行信息必须齐备且有效;
3.商品状态不要求上线批准即可沙盒测试;
4.耐心等待苹果后台同步,30 分钟到半天为宜;
5.使用真机和正确的 Sandbox 测试账号或者TestFlight