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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:43:17