订阅型内购, 有一套完整的销售体系, 这一点非常重要. 以往的内购app, 一般上都使用我们自己的销售体系, 然后跟苹果的内购配合起来, 尤其是消耗性内购, 在我们自己的商品体系中, 加上一个ID对应到苹果的内购ID, 用户在我们的商品体系内获取商品信息, 然后苹果那里支付, 支付完成了, 再到我们自己的体系内完成购买. 这个过程, 对我们开发者来说, 其实就是拿iap仅仅当做支付工具来用, 而放弃它的销售体系. 当然, 不排除有人老老实实的使用苹果内购的销售体系, 但是, 对大部分开发者来说: 内购就仅仅只是一个支付工具.

将iap仅仅当做支付工具, 在订阅型内购中, 已经不起作用了, 因为, 订阅型内购它自带的一整套销售模型, 必然会迫使我们产品修改自己的商业销售模型. 这里要额外提一下, 原本我并不关注订阅型内购, 但是, 一旦程序中涉及一段时期的VIP服务, 苹果的审核人员会强迫我们使用订阅型内购, 所以, 逼得我只能去研究这个工作了. 下面, 我总结一下, 从苹果的各个官方资料里面总结下来的信息:

1. 要使用订阅型内购, 一定要在Connect的协议,银行一栏里面重置Request, 一个新注册的空白账号, 是无法新建订阅型内购的.

2. 订阅型内购的每个时期, 是一个Cycle期, 这个Cycle期结束后, 会自动发起一次新的订阅, 这个过程无需用户确认.

3. 订阅内购可以带试用模式, 试用模式过期后, 会提示用户正式购买订阅.

4. 订阅内购是跟随AppleID的, 所有的使用同一AppleID的设备上, 是会同步订阅的. 这一点就是一大坑, 直接将订阅型内购绑定到苹果的账户, 如果我们自己有商业销售体系, 往往都是有自己的用户体系, 跟苹果的体系直接产生冲突.

5. 订阅模式下, 用户第二年继续订阅的话, 开发者可以获得85%的收益. 这里是指积累订阅, 而且是同一个Group的订阅, 不包括免费的时期. 这一点倒是很爽的.

6. 一个Group内的订阅不能选择多个, 只能选择一个, 用户可以在多个订阅之间切换, 这一点, 同样也导致了跟我们自己的商业销售模式会有冲突.

7. 一个订阅型内购, 可以给新老用户不一样的定价体系, 比如给老用户优惠, 新用户原价.

8. 订阅内购降价的时候, 不会有任何提示信息, 但是, 一旦涨价的时候, 自动会给用户(AppleID)的设备弹出提示, 通知用户订阅的新价格, 用户在这个时候, 是可以直接退订的.

通过自己的实践, 以及阅读苹果的资料, 大概总结了以上的内容, 仅供参考.

自动订阅商品在订阅过程及订阅完成后的有效期内,均可理解为非消费品,其支付过程及恢复流程(这里特指苹果自身的恢复流程)均和非消费品相同。

目前主要有如下几个问题需要注意:

1、订阅到期的处理

目前网上并没有对于订阅到期的明确处理方式,目前据说有如下几种做法:

a、订阅到期或者用户手动取消订阅之后,再次进入客户端,会收到苹果发来的回调,就是在之前的购买成功/失败/恢复流程接收回调的observer里,客户端根据该回调进行相关处理。

这其实是最合理的处理方式,但是经过自测,发现客户端并未收到任何消息,至少在测试环境下没有收到任何消息,网上有朋友说是测试环境收不到,但是正式环境可以收到,由于测试难度较大,所以一直没有拿线上产品这么尝试过。

b、客户端自行连服务器判断是否订阅过期,过期之后执行恢复流程。

执行恢复流程确实可以达到目的,可以通过恢复回来的receipt向苹果验证,从而得到用户在苹果当前的订阅信息。但是恢复流程的一个致命缺陷就是需要输入密码,而且用户可以选择不输入,这样的话用户体检就大打折扣了。

c、客户端在订阅成功后将苹果返回的receipt记录本地,每次程序启动后(防止客户端时间被篡改的情况)向苹果验证一次订阅是否有效,然后执行后续逻辑。

这样处理也可以达到目的,但是与其如此做,还不如把记录和验证receipt的工作放在服务器,过期时间也由服务器判断,这样可以保证稳定性,同时也可以优化流程。

因此可考虑如下操作:

当客户端订阅成功之后,苹果会返回当前订阅的有效期及其相应的receipt,服务器记录这些参数。

在订阅到期时(可先由客户端判断订阅是否到期,未到期则不做处理,客户端判断到期则先向服务器验证是否真的订阅到期,若服务器也判断为订阅到期,则说明确实到期),服务器用之前记录的receipt向苹果再次验证,通过苹果返回的错误码来判断用户已经自动续订还是手动取消订阅。

在这个过程中,客户端不需要做任何处理,只需要走check订阅有效期的流程即可。(当客户端判断出用户已经不在有效期后,会向服务器请求,服务器会将新的有效期下发给客户端)

2、用户手动篡改时间的预防机制

可考虑如下操作:

在客户端订阅成功之后,苹果会返回当前订阅的有效期间(起始时间+中止时间,是两个时间点),客户端记录该时间。

每当程序切换到前台之后,获取系统当前时间。用该时间对上述已记录的订阅有效期进行验证。若当前时间仍在订阅有效期内,则更新起始时间为当前时间;若不在有效期内,则向服务器发送请求,服务器将当前时间及有效期等相关信息回传给客户端,客户端再次检测当前是否在有效期之内,然后执行后续流程。

这样处理可以不停的缩短用户的订阅有效期,并在很大程度上避免客户端修改本地时间的作弊行为。

3、订阅模块的返回结果

由于每套订阅流程对应的业务逻辑不同,因此目前暂定为订阅模块可返回一个BOOL标志当前是否在有效期之内,和两个时间戳,标识订阅起始时间和终止时间,由外部接到返回数据之后进行自身业务逻辑的处理。

4、订阅商品的family

由于本支付模块包含多处订阅+普通购买,因此每一处订阅可使用一个family标签,其中可包含多个期间档。不同的订阅使用不同的family。

一个family下可以包含多个订阅商品,但最多6个(7天,1个月,2个月,3个月,6个月,1年)。同一个family下的多个商品,当已有商品被订阅且当前仍在有效期时(如7天),其他商品(如1个月)不可被订阅。不同family没有此限制。

5、过度订阅

需要确定订阅到期之后,是否所有订阅过程中获取到的信息全部清零,如有需要延续的物品,则需要考虑过度订阅的问题。如在某些应用中,在订阅期内把所有的商品都购买了,然后取消订阅。这里需要考虑清楚预防机制。

6、恢复流程相关

该恢复流程是指广义上的恢复,即通过服务器的同步操作,可将用户的相关信息跨设备共享,操作对象为已登陆用户和获取openUDID后的未注册用户。

可优先选择使用服务器的同步操作,同步完成之后,可提示用户是否需要执行苹果的恢复操作,并以此来决定是否执行苹果的恢复流程(狭义上的恢复流程)。如需执行苹果的IAP恢复操作,则需要注意从苹果拿到数据后的处理,有些数据可能在服务器同步的过程中已经被恢复过了,这里要注意兼容。

7、管理已订阅内容

  1. 在设备的主屏幕上,轻按 App Store
  2. 轻按屏幕底部的精品推荐
  3. 滚动到页面底部。
  4. 轻按左下角的 Apple ID 按钮。(如果未登录,可轻按登录按钮并通过您的 Apple ID 登录。然后滚动回页面底部,轻按Apple ID 按钮。)
  5. 轻按查看 Apple ID 按钮。
  6. 输入您的密码,然后点按“好”。
  7. 在帐户主页面上,向下滚动并轻按管理 App 订阅。如果您没有 app 订阅,此按钮将不显示。
  8. 从 iPhone、iPad 或 iPod 上的“管理 App 订阅”页面中,轻按您要管理的 app。
  9. 根据不同的 app,您可以选择管理不同的订阅类别。

详见 http://support.apple.com/kb/HT4098?viewlocale=zh_CN&locale=zh_CN

iOS订阅型内购要点相关推荐

  1. 关于iOS订阅型内购开发

    ####由于公司项目里面有一个类似购买一个时期的产品,原本使用消耗式内购来做,但是被苹果审核拒绝了,苹果建议(要求)使用订阅式内购来做这个,于是就来研究一下 #####1.第一步添加内购产品 首先还是 ...

  2. iOS:苹果内购实践

    iOS 苹果的内购 一.介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝等),当然开发 ...

  3. iOS IAP应用内购详细步骤和问题总结指南

    最近公司在做APP内购会员功能 遇到了很多问题 总结记录一下 首先一定要区分Apple pay 和IAP内购的区别 可以先去看一下官方文档地址 有每个步骤的详细解释 本篇文章分为:1. 内购支付流程: ...

  4. iOS通讯录,蓝牙,内购等开发系列

    –系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系 ...

  5. IOS OC IPA内购流程

    IOS 内购分为四种商品类型: 消耗品项目 非消耗品项目 自动续期订阅 非续期订阅 基本实现流程 添加支付监听 [[SKPaymentQueue defaultQueue] addTransactio ...

  6. 【iOS】苹果内购调研

    参考文章 官方文档 iOS开发内购全套图文教程 App Store上架指导 苹果不允许 iOS 应用内置购买(IAP)使用第三方支付方式,那么跨平台的电子书阅读器怎么解决这个问题? 应用内购(In-A ...

  7. 1、ios开发之 内购

    大家都知道做iOS开发本身的收入有三种来源:出售应用.内购和广告.国内用户通常很少直接购买应用,因此对于开发者而言(特别是个人开发者),内购和广告收入就成了主要的收入来源.内购营销模式,通常软件本身是 ...

  8. [iOS]swift版内购

    //内购Demo,看代码说话吧 class IAPTestViewController: UIViewController ,SKProductsRequestDelegate, SKPaymentT ...

  9. iOS开发支付 — 内购(IAP)

    为什么要使用内购? 如果你购买的商品,是在本App中使用和消耗的,就一定要用内购,否则会被拒绝上线,例如:游戏币.在线书籍.直播中用来打赏用的金币.app中使用的道具等.如果是直接购买商城之类的快递包 ...

最新文章

  1. 算法(2)KMP算法
  2. ICCV 2021 | 国科大提出首个CNN和Transformer双体主干网络!Conformer准确率高达84.1%!...
  3. python 100题
  4. yolov3 pytorch错误集合
  5. 架构设计中服务层的简单理解
  6. Eclipse中如何恢复已删除文件
  7. 信息设计中的“父子关系”
  8. 冈萨雷斯《数字图像处理》读书笔记(十一)——表示和描述
  9. JAVA入门级教学之(第一章总结)
  10. java 大数四则运算_大数四则运算java(转)
  11. maven 构建 springmvc + spring security 权限控制示例
  12. Java学习笔记1.2.1 使用Java集成开发环境 - Eclipse
  13. 请郎平回归执教中国女排
  14. 热烈祝贺人生第一篇论文发表成功
  15. mac系统spss26软件下载及安装教程
  16. IV-18(前苏联ИВ-18)荧光管电子钟【Energy Pillar.能量柱】
  17. java xsd校验xml文件
  18. 8弦金属摇滚电吉他音源 Orange Tree Samples Evolution Dracus Kontakt
  19. [Hexo]Hexo+github搭建静态博客
  20. java 动态代理实现原理

热门文章

  1. [附源码]Java计算机毕业设计SSM高校网上报销系统
  2. 基于SpringBoot 的报销系统
  3. [转帖]OEM、ODM、OBM分别是什么?
  4. B域,M域,O域具体是指什么
  5. windows7中用vitualbox安装OS X 10.11 El Capitan 及 Xcode 7.0--转载
  6. 洛谷P1926-小书童——刷题大军(01背包)
  7. 调整图像亮度brightness,对比度contrast,饱和度saturation方法整理
  8. 一篇易懂的ECU故障诊断指南
  9. java 算法移植_Java:Chacha20算法(从openssl移植)
  10. winform wpf 全屏最大化