关于内购项目的基本配置,在此就不啰嗦了,需要注意的是我们配置内购项目的时候,选择类型为“自动续期订阅”即可。具体的内购项目的配置在这里
本篇文章主要记录代码实现自动续期订阅与普通内购的区别,以及上架的注意事项 !
1. 代码实现区别
1> 需要在app启动的时候添加观察者到支付队列,因为续期订阅之后的凭证都是无交互,应用启动的时候下发。
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
}
建议设置一个支付管理类,此类为单例,去监听管理内购。
2> 建议应该有一个重发的机制。
防止一些网络原因造成验证失败、丢单,设置一个凭据管理类(负责凭据的存储和删除)。当服务器验证某个凭证成功之后删除这个凭证,当验证失败之后保留凭证,启动时再次上传凭证验证。(这里的成功是指的服务器已经验证了,并且可以删除的凭证,而非只有验证成功的凭证,比如重复订单等...)
代码上处理与普通的内购没有很大的区别。
2. 关于自动订阅服务端
1> 关于验证
服务端验证基本姿势不变,但是传参有些变化,除了receiptData之外,还需要一同上传“共享秘钥”。
如果您有多个App,可以使用主共享秘钥,也可以自己单独生成app专用秘钥。具体的位置下图标出:
这里可以生成主共享秘钥(所有账号下app共用)
这里可以生成app专用
2> 苹果提供了端到端的异步通知服务
statusUpdateNotification, 我们需要提供一个https的接口,添加到App connect 中app Store信息中的“订阅状态url”。
apple 会给我们返回5中状态
如下图:
订阅状态返回状态表
具体官方文档:点击这里
注意:1.沙盒环境中不会无法模拟取消订阅的操作,所以并无“cancel”的状态。2. 自动续期订阅的产品凭证中会返回一个“original-transaction-id”首次订阅我们可以用这个id和用户关联,以确保每次订阅正确订阅。
下面附上沙盒凭证具体字段(凭证中的purchase-info 可以用base64解码获得):
凭证中的具体字段
3. 自动续期订阅测试注意事项
1>我们需要注意,利用沙盒测试自动续期订阅的产品,相关的时间都会缩短方便测试。
沙盒测试时限
官方文档点击这里
2> 由于apple 测试服务器不稳定,所以有可能下发凭证不及时,或者偶然会下发50条以上的凭证,需要注意避免上传机制。尽量使用新账号测试。
4. 自动续期订阅上架注意
1> 需要在app内部订阅的位置、appStore说明出添加“自动续费说明”,否则审核被拒。
喜马拉雅
喜马拉雅appstore描述
2> 需要在app内部订阅的位置、appStore说明出添加"会员服务协议"、“自动续费协议”、“隐私协议”。并且app内部协议交互性明显(也就是用户一看就知道可点击),否则也会被拒。
相关被拒原因:
We noticed that your app and its metadata
did not fully meet the terms and conditions for auto-renewing subscriptions, as specified in Schedule 2, section 3.8(b) of the Paid Applications agreement...
3> 订阅总价尽量明显, 明显度要高于其他细分价格,否则会拒绝。价格造成用户困惑😪
还是跟进中....