内购(IAP)

内购的四种类型

类型英文适用场景典型例子购买特点
消耗型Consumable用完即消失的道具/货币游戏金币、提示次数可重复购买
非消耗型Non-Consumable一次购买永久拥有解锁完整版、去广告只能买一次(可恢复购买)
自动续订订阅Auto-Renewable Subscription持续提供服务/内容会员、流媒体周期性自动续费
非续订订阅Non-Renewing Subscription有期限的服务3 个月期限内容包到期后需手动续购

创建内购的步骤

  1. 进入 App Store Connect → 选择 App → App 内购买项目(In-App Purchases)
  2. 点击 +,选择内购类型。
  3. 填写:
    • 参考名称(Reference Name):内部识别用,不会展示给用户。
    • 产品 ID(Product ID):代码中调用的唯一标识(如 com.example.app.coins),创建后不可修改
    • 本地化名称与描述:至少提供主语言的名称与描述,会展示在购买弹窗中。
    • 价格(Price):选择价格等级或为各国家/地区单独定价。
    • 审核截图(Review Screenshot):展示 App 内购买界面,审核员需要看到真实的购买入口与流程。
  4. 保存并提交审核(IAP 与 App 版本可分别审核,但通常一起通过才可生效)。

产品 ID 的设计规范

  • 使用反向域名格式:com.yourcompany.appname.itemname
  • 创建后不可更改,删除后也不建议复用(历史数据/对账会混乱)。
  • 一个 App 下产品 ID 全局唯一;多个平台(iOS/macOS)共用一套购买时需规划一致。
  • 命名建议携带语义:com.example.app.vip_monthlyitem1 可维护性高得多。

定价与收入

  • 收入分成:标准分成比例为 30% 归 Apple;加入 App Store 小型企业计划(Small Business Program) 后降至 15%(年收入低于约 100 万美元的开发者可申请)。
  • 价格等级:苹果提供固定价格档位(如 0.990.99、1.99…),并自动换算各国家/地区货币;也可为个别地区单独设置价格。
  • 沙盒测试:IAP 在正式发布前用**沙盒账号(Sandbox)**测试,不产生真实扣款。

审核要求与常见被拒

  • 内购必须在 App 内真实可购买,审核员会实际走一遍流程。
  • 提交审核的截图必须展示真实购买界面,不能造假
  • 未完成的 IAP(缺截图、缺本地化、价格未设置)会导致审核延迟或拒绝。
  • 3.1.1 相关被拒:App 内出现第三方支付跳转、引导用户站外购买、数字内容未走 IAP 等。

自检清单

  • 内购类型选择正确(消耗/非消耗/订阅/非续订)
  • 产品 ID 使用反向域名且不会与未来冲突
  • 主语言名称与描述已填写
  • 价格等级已设置(含地区调整如需要)
  • 审核截图已上传且展示真实购买界面
  • 已在沙盒环境完整测试购买/恢复流程
  • App 代码中的产品 ID 与后台完全一致

常见问题

  • 沙盒账号怎么创建? App Store Connect → 用户与访问 → 沙盒(Sandbox)→ 创建测试账号,用它在设备上登录 App Store 后即可测试内购。
  • 恢复购买(Restore Purchases)怎么做? 非消耗型内购必须在 App 内提供「恢复购买」入口(restoreCompletedTransactions),避免用户换设备后重复购买。
  • IAP 和 App 版本必须一起过审吗? 可以分别提交,但最终用户购买需要 App 已上架且 IAP 状态为「批准」。
  • 多平台要建多套 IAP 吗? 同一 App 在 iOS/macOS 等平台可共享内购(开启「通用购买 / 跨平台购买」),但需要单独配置与测试。