一、iOS 内购类型概述
iOS 应用内购(IAP)主要分为以下四种类型:
-
消耗型商品:一次性使用的产品,使用后即失效,需再次购买。
示例:钓鱼应用中的鱼食。 -
非消耗型商品:一次性购买,永久有效,不会过期或减少。
示例:游戏应用中的赛道。 -
自动续期订阅:用户在固定时间段内购买动态内容的产品,除非用户取消,否则订阅会自动续期。
示例:每月订阅提供流媒体服务的应用。 -
非续期订阅:用户购买有时限性的服务,订阅不会自动续期。
示例:为期一年的已归档文章目录订阅。
自动续期订阅是其中最复杂的一种,因为它涉及免费试用期、促销期、取消续订和恢复续订等概念,后台逻辑也较为复杂。以下将重点总结自动续订订阅的实现要点及注意事项。
二、创建自动续订订阅的注意事项
1. App 专用共享密钥
在创建自动续订订阅时,需要生成一个App 专用共享密钥。该密钥用于与苹果服务器校验票据(receipt),确保订阅的唯一性和安全性。如果需要将应用转让给其他开发者,此密钥尤为重要。
2. 订阅群组
订阅群组允许开发者向用户提供一系列内容或服务。每个群组下可以有多个订阅,但用户只能同时订阅一个群组中的一个选项。若需提供促销优惠,每个用户在每个订阅群组中只能享受一次优惠。
3. 订阅状态 URL
在App 信息中配置订阅状态 URL 后,后台将接收来自苹果的 Server to Server 通知,以便实时更新用户订阅状态。
4. 推介促销优惠
推介促销优惠可用于吸引新用户,常见形式包括前七天免费试用或前两个月半价等。需要注意的是,每个用户在每个订阅群组中只能享受一次推介优惠。
三、内购流程详解
1. 流程简述
iOS 内购的通用流程如下:
- 用户发起购买请求,苹果服务器完成购买并回调。
- 购买成功后,应用向服务器发送凭证进行验证。
- 服务器验证凭证后,更新用户权限或发放虚拟物品。
2. 具体实现
自动续订订阅的实现需要注意以下几点:
- 添加交易监听器:应用启动时需添加
SKPaymentQueue
的监听器,以便在续订时接收通知。 - 完成交易操作:每次交易结束后,必须执行
finishTransaction
操作。 - 验证票据:将票据发送至苹果服务器进行验证,并根据返回结果更新用户状态。
四、常见情况处理
1. 升级和计划变更
用户可随时更改订阅计划,变更将在下一个续订日期生效。开发者可通过收据的订阅自动续订首选项字段查询计划变更信息。
2. 到期和续订
订阅续订过程在到期日期前十天开始。苹果会检查可能的结算问题,并在到期前 24 小时尝试自动续订。若多次尝试失败,订阅将停止续订。
3. 取消订阅
用户可通过联系苹果客服取消订阅。开发者可通过收据中的取消日期字段确认订阅是否已取消。
五、服务端验证
为提升安全性,建议通过服务器端验证订单有效性。开发者需在 App Store Connect 中配置共享密钥和订阅状态 URL,以便接收苹果的通知。常见的通知类型包括初次购买、取消、自动续订等。
六、沙盒测试
在测试自动续订订阅时,沙盒测试时限会缩短,且最多自动续订 6 次。需要注意的是,沙盒测试无法模拟用户手动取消订阅的场景。
七、审核注意事项
- 自动续订说明:应用中需明确说明自动续订的条款,并在 iTunes Connect 中的应用描述中补充相关信息。
- 游客模式购买:苹果要求即使未登录应用账号,用户也能完成购买,确保不强制用户登录。