Apple IAP非消耗品按单个事件独立购买的实现问题咨询
Apple IAP 多活动重复购买解决方案
问题核心原因
你当前使用的是非消耗型IAP产品,这类产品的规则是苹果服务器会永久记录用户的购买状态,同一个产品ID用户只能购买一次,因此第二次购买时就会弹出「已购买可免费获取」的提示,完全不符合你单活动单付费的业务场景。
最优解决方案:切换为消耗型IAP产品
这是苹果官方推荐的适配方案,操作逻辑如下:
- 登录App Store Connect,新增和原付费档位价格一致的消耗型IAP产品,提交审核通过后,替换原有业务流程里调用的非消耗型产品ID
- 消耗型产品没有购买次数限制,苹果不会永久留存购买记录,用户可以重复购买同一个产品ID,完美适配不同活动单独付费的需求
配套业务逻辑调整
切换产品类型后,你需要自行管控业务侧的权限,不要依赖苹果的购买记录:
- 用户点击某活动的「生成影片」触发支付时,在你的服务端提前生成关联该活动唯一ID、用户唯一ID的待支付订单记录
- 拿到苹果返回的支付凭证后,必须将凭证传到你的服务端,调用苹果校验接口验证凭证合法性,校验通过后将该订单标记为已支付,同时给对应活动解锁影片生成权限
- 权限开通完成后,调用
finishTransaction:方法结束当前交易,避免出现掉单问题
老用户兼容方案
如果已经有用户购买过旧的非消耗型产品,你需要:
- 遍历之前存储的老用户非消耗型购买凭证,给对应的历史活动保留已付费权限,不影响老用户正常使用
- 新活动的付费流程全部走新的消耗型产品ID即可
不推荐的备选方案
如果坚持要使用非消耗型产品实现,只能在App Store Connect提前创建大量同价格、不同ID的非消耗型产品,不同活动分配不同的产品ID,但该方案存在明显缺陷:产品ID数量有上限,新增产品需要重新审核,维护成本极高,完全不建议使用。
内容的提问来源于stack exchange,提问作者Zento
相关产品推荐
相关产品推荐

