内购(IAP)
为什么必须用 IAP?根据 App Store 审核指南 3.1.1,数字内容、数字服务、订阅会员必须使用 App 内购买(IAP)支付;绕开内购(如跳转网页、引导支付宝/微信)会触发审核拒绝,严重时影响账号信誉。
内购的四种类型
| 类型 | 英文 | 适用场景 | 典型例子 | 购买特点 |
|---|---|---|---|---|
| 消耗型 | Consumable | 用完即消失的道具/货币 | 游戏金币、提示次数 | 可重复购买 |
| 非消耗型 | Non-Consumable | 一次购买永久拥有 | 解锁完整版、去广告 | 只能买一次(可恢复购买) |
| 自动续订订阅 | Auto-Renewable Subscription | 持续提供服务/内容 | 会员、流媒体 | 周期性自动续费 |
| 非续订订阅 | Non-Renewing Subscription | 有期限的服务 | 3 个月期限内容包 | 到期后需手动续购 |
选择类型的核心判断:你的商品是「一次性解锁」还是「持续服务」? 一次性解锁用非消耗型;持续订阅用自动续订订阅(体验更好、苹果推荐);短期限期内容可用非续订订阅。
创建内购的步骤
- 进入 App Store Connect → 选择 App → App 内购买项目(In-App Purchases)。
- 点击 +,选择内购类型。
- 填写:
- 参考名称(Reference Name):内部识别用,不会展示给用户。
- 产品 ID(Product ID):代码中调用的唯一标识(如
com.example.app.coins),创建后不可修改。 - 本地化名称与描述:至少提供主语言的名称与描述,会展示在购买弹窗中。
- 价格(Price):选择价格等级或为各国家/地区单独定价。
- 审核截图(Review Screenshot):展示 App 内购买界面,审核员需要看到真实的购买入口与流程。
- 保存并提交审核(IAP 与 App 版本可分别审核,但通常一起通过才可生效)。
产品 ID 的设计规范
- 使用反向域名格式:
com.yourcompany.appname.itemname。 - 创建后不可更改,删除后也不建议复用(历史数据/对账会混乱)。
- 一个 App 下产品 ID 全局唯一;多个平台(iOS/macOS)共用一套购买时需规划一致。
- 命名建议携带语义:
com.example.app.vip_monthly比item1可维护性高得多。
定价与收入
- 收入分成:标准分成比例为 30% 归 Apple;加入 App Store 小型企业计划(Small Business Program) 后降至 15%(年收入低于约 100 万美元的开发者可申请)。
- 价格等级:苹果提供固定价格档位(如 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 等平台可共享内购(开启「通用购买 / 跨平台购买」),但需要单独配置与测试。
