iOS 内购(IAP)自动续订订阅类型详解

一、iOS 内购类型概述

在 iOS 应用中,内购(IAP) 是开发者实现盈利的重要方式之一。iOS 的 App 内购类型主要分为四种:

  1. 消耗型商品:仅可使用一次,使用后即失效,需再次购买。示例:钓鱼 App 中的鱼食。

  2. 非消耗型商品:只需购买一次,不会过期或随使用减少。示例:游戏 App 的赛道。

  3. 自动续期订阅:允许用户在固定时间段内购买动态内容,除非用户主动取消,否则会自动续期。示例:每月订阅的流媒体服务 App。

  4. 非续期订阅:允许用户购买有时限的服务,内容可以是静态的,订阅不会自动续期。示例:为期一年的已归档文章目录订阅。

在这四类中,自动续期订阅 是最为复杂的,因为它涉及连续性的交易过程,包括免费试用期、促销期、用户取消或恢复续订等操作,后台逻辑也较为繁琐。以下将详细介绍自动续订订阅的注意事项及实现方案。

二、创建自动续订订阅的注意事项

1. App 专用共享密钥

在创建自动续订订阅时,首先需要生成一个 App 专用共享密钥。该密钥用于接收 App 自动续订订阅的唯一收据代码,用于向苹果服务器校验票据(receipt)。

注意事项

  • 如果 App 需要转让给其他开发者,或需要将主共享密钥设置为专用,可能需要使用此密钥。

👉 野卡 | 一分钟注册,轻松订阅海外线上服务

2. 订阅群组

如果尚未创建订阅群组,需要先创建一个。一个群组下可以有多个自动续订订阅,用户只能订阅一个群组中的一个选项。

特点

  • 订阅群组中的订阅是 互斥 的,用户不能同时订阅同一个群组中的多个选项。

  • 如果需要用户同时购买多个订阅,可以将这些内购项目放在不同的订阅群组中。

3. 订阅状态 URL

在自动续订订阅中,需要填写 订阅状态 URL。后台通过配置此 URL 可以接收 Server to Server 通知,获取订阅状态更新。

4. 推介促销优惠

推介促销优惠可以设置为免费试用、折扣等。例如,前 7 天免费试用或前两个月半价。

注意事项

  • 推介促销优惠仅适用于 新用户,每位用户只能享受每个订阅群组的一个推介优惠。

三、iOS 内购流程详解

1. 内购通用流程

iOS 内购的通用流程如下:

  1. 用户向苹果服务器发起购买请求,收到购买完成的回调。

  2. 购买成功后,向服务器发起凭证验证。

  3. 服务器接收 iOS 端发来的购买凭证,验证其有效性,并将结果返回给客户端。

验证环境

  • 沙盒环境:https://sandbox.itunes.apple.com/verifyReceipt

  • 生产环境:https://buy.itunes.apple.com/verifyReceipt

2. 自动续订订阅的特殊处理

自动续订订阅需要在 App 启动时添加监听:objc [[SKPaymentQueue defaultQueue] addTransactionObserver:self];

重要提示

  • 自动续订的扣费通常在订阅到期前 24 小时开始,Apple 会在扣费成功后通过 App 通知用户。

  • 订单结束后务必执行 finishTransaction 操作。

四、常见问题及解决方案

1. 升级和计划变更

用户可以在 App Store 或应用内的帐户设置中管理订阅。降级或交叉等级变更将在下一个续订日期生效。

2. 到期和续订

订阅续订过程在到期日期前 10 天开始。Apple 会检查可能影响续订的结算问题,并在到期前 24 小时尝试自动续订。

3. 取消

用户可以通过联系 Apple 客户服务取消订阅并申请退款。开发者需要在收据中检查 “取消日期” 字段以确认取消状态。

五、服务端验证

为了确保订单的安全性,建议通过服务器端验证订单的有效性。自动续订订阅需要生成 共享密钥 并配置 订阅状态 URL,以便接收 Apple 的服务器通知。

六、沙盒测试

在测试自动续订订阅时,沙盒环境中的时限会缩短,测试订阅最多仅能自动续期 6 次。开发者需要注意,沙盒账号无法模拟用户手动取消订阅的场景。

七、审核注意事项

  1. 自动续订订阅说明:必须在 App 中提供详细的订阅说明,同时需在 App Store Connect 的应用描述中注明。

  2. 强制登录限制:iOS 内购绑定的是 Apple 账号,因此不允许强制用户登录 App 账号才能购买。

通过以上步骤,开发者可以更好地实现和管理 iOS 自动续订订阅功能,提升用户体验和收入效率。

Subscribe to manni
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.