Unity应用订阅集成:Apple沙盒测试卡异常问题排查
Unity Apple沙盒订阅内购失败:NoProductsAvailable与vip-vip产品名问题
核心疑问解答:为什么产品“vip”变成“vip-vip”?
这是UnityPurchasing针对Apple平台的默认行为:它会自动将你代码中定义的Product ID与App Store Connect里应用的SKU前缀拼接。如果你的应用在App Store Connect中的SKU前缀设置为“vip”,就会生成[SKU前缀]-[代码中的Product ID]的拼接结果,也就是“vip-vip”。
这个拼接行为会直接导致Unity找不到后台配置的“vip”内购项目,是初始化失败的核心原因之一。
你的操作中存在的关键错误
- 内购项目配置不完整:仅填写价格、区域信息不足以让沙盒识别内购项目,Apple要求内购项目必须完成所有必填字段(名称、描述、本地化信息等),状态至少为“准备提交”才能被沙盒环境读取。
- SKU前缀与Product ID冲突:应用的SKU前缀和代码中的Product ID都是“vip”,触发自动拼接后ID与后台配置不匹配。
- 测试账号使用不当:管理员账号无法作为沙盒测试员,且提前在设置中登录沙盒账号可能引发缓存冲突,正确流程是触发内购时再登录沙盒测试账号。
- 未明确指定Apple平台的Product ID:默认配置下Unity自动拼接SKU前缀,导致ID不匹配。
解决步骤
1. 补全App Store Connect内购项目配置
进入App Store Connect → 你的应用 → 内购项目 → 找到“vip”订阅:
- 补全所有必填字段(名称、描述、价格等级、本地化内容),确保状态为**“准备提交”**(无需提交审核,沙盒环境即可识别)。
- 查看应用的SKU前缀:进入应用「更多」→「关于此App」,确认前缀内容,后续在Unity代码中针对性处理。
2. 修改UnityPurchasing初始化代码
明确指定Apple平台的Product ID,跳过自动拼接逻辑:
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance()); // 明确指定Apple端内购ID为"vip",避免SKU前缀自动拼接 builder.AddProduct("vip", ProductType.Subscription, new IDs { { "vip", AppleAppStore.Name } }); UnityPurchasing.Initialize(this, builder);
3. 核对Unity项目Bundle ID
确保Unity中「Player Settings → iOS → Bundle Identifier」与App Store Connect中应用的Bundle ID完全一致(大小写、字符均需匹配)。
4. 正确使用沙盒测试账号
- 在测试设备上退出所有App Store账号(设置 → App Store → 退出登录)。
- 打开应用触发内购操作,此时会弹出沙盒登录框,输入沙盒测试员账号“inapptester”的信息。
- 禁止使用管理员账号或提前在设置中登录沙盒账号,避免权限冲突。
5. 重新构建测试
- 清理Unity缓存(「Assets → Clear Cache」),重新构建Xcode项目。
- 确保Xcode项目签名配置正确:App ID已启用「In-App Purchase」权限,使用的证书包含内购权限。
- 可直接通过Xcode将应用安装到测试设备,或重新上传TestFlight(等待构建包可用后,用沙盒测试员账号下载测试)。
内容的提问来源于stack exchange,提问作者Potion
相关产品推荐
相关产品推荐

