iOS订阅型内购要点
订阅型内购, 有一套完整的销售体系, 这一点非常重要. 以往的内购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、用户手动篡改时间的预防机制
可考虑如下操作:
在客户端订阅成功之后,苹果会返回当前订阅的有效期间(起始时间+中止时间,是两个时间点),客户端记录该时间。
每当程序切换到前台之后,获取系统当前时间。用该时间对上述已记录的订阅有效期进行验证。若当前时间仍在订阅有效期内,则更新起始时间为当前时间;若不在有效期内,则向服务器发送请求,服务器将当前时间及有效期等相关信息回传给客户端,客户端再次检测当前是否在有效期之内,然后执行后续流程。
这样处理可以不停的缩短用户的订阅有效期,并在很大程度上避免客户端修改本地时间的作弊行为。
由于每套订阅流程对应的业务逻辑不同,因此目前暂定为订阅模块可返回一个BOOL标志当前是否在有效期之内,和两个时间戳,标识订阅起始时间和终止时间,由外部接到返回数据之后进行自身业务逻辑的处理。
4、订阅商品的family
由于本支付模块包含多处订阅+普通购买,因此每一处订阅可使用一个family标签,其中可包含多个期间档。不同的订阅使用不同的family。
一个family下可以包含多个订阅商品,但最多6个(7天,1个月,2个月,3个月,6个月,1年)。同一个family下的多个商品,当已有商品被订阅且当前仍在有效期时(如7天),其他商品(如1个月)不可被订阅。不同family没有此限制。
5、过度订阅
需要确定订阅到期之后,是否所有订阅过程中获取到的信息全部清零,如有需要延续的物品,则需要考虑过度订阅的问题。如在某些应用中,在订阅期内把所有的商品都购买了,然后取消订阅。这里需要考虑清楚预防机制。
6、恢复流程相关
该恢复流程是指广义上的恢复,即通过服务器的同步操作,可将用户的相关信息跨设备共享,操作对象为已登陆用户和获取openUDID后的未注册用户。
可优先选择使用服务器的同步操作,同步完成之后,可提示用户是否需要执行苹果的恢复操作,并以此来决定是否执行苹果的恢复流程(狭义上的恢复流程)。如需执行苹果的IAP恢复操作,则需要注意从苹果拿到数据后的处理,有些数据可能在服务器同步的过程中已经被恢复过了,这里要注意兼容。
7、管理已订阅内容
- 在设备的主屏幕上,轻按 App Store。
- 轻按屏幕底部的精品推荐。
- 滚动到页面底部。
- 轻按左下角的 Apple ID 按钮。(如果未登录,可轻按登录按钮并通过您的 Apple ID 登录。然后滚动回页面底部,轻按Apple ID 按钮。)
- 轻按查看 Apple ID 按钮。
- 输入您的密码,然后点按“好”。
- 在帐户主页面上,向下滚动并轻按管理 App 订阅。如果您没有 app 订阅,此按钮将不显示。
- 从 iPhone、iPad 或 iPod 上的“管理 App 订阅”页面中,轻按您要管理的 app。
- 根据不同的 app,您可以选择管理不同的订阅类别。
详见 http://support.apple.com/kb/HT4098?viewlocale=zh_CN&locale=zh_CN
iOS订阅型内购要点相关推荐
- 关于iOS订阅型内购开发
####由于公司项目里面有一个类似购买一个时期的产品,原本使用消耗式内购来做,但是被苹果审核拒绝了,苹果建议(要求)使用订阅式内购来做这个,于是就来研究一下 #####1.第一步添加内购产品 首先还是 ...
- iOS:苹果内购实践
iOS 苹果的内购 一.介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝等),当然开发 ...
- iOS IAP应用内购详细步骤和问题总结指南
最近公司在做APP内购会员功能 遇到了很多问题 总结记录一下 首先一定要区分Apple pay 和IAP内购的区别 可以先去看一下官方文档地址 有每个步骤的详细解释 本篇文章分为:1. 内购支付流程: ...
- iOS通讯录,蓝牙,内购等开发系列
–系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系 ...
- IOS OC IPA内购流程
IOS 内购分为四种商品类型: 消耗品项目 非消耗品项目 自动续期订阅 非续期订阅 基本实现流程 添加支付监听 [[SKPaymentQueue defaultQueue] addTransactio ...
- 【iOS】苹果内购调研
参考文章 官方文档 iOS开发内购全套图文教程 App Store上架指导 苹果不允许 iOS 应用内置购买(IAP)使用第三方支付方式,那么跨平台的电子书阅读器怎么解决这个问题? 应用内购(In-A ...
- 1、ios开发之 内购
大家都知道做iOS开发本身的收入有三种来源:出售应用.内购和广告.国内用户通常很少直接购买应用,因此对于开发者而言(特别是个人开发者),内购和广告收入就成了主要的收入来源.内购营销模式,通常软件本身是 ...
- [iOS]swift版内购
//内购Demo,看代码说话吧 class IAPTestViewController: UIViewController ,SKProductsRequestDelegate, SKPaymentT ...
- iOS开发支付 — 内购(IAP)
为什么要使用内购? 如果你购买的商品,是在本App中使用和消耗的,就一定要用内购,否则会被拒绝上线,例如:游戏币.在线书籍.直播中用来打赏用的金币.app中使用的道具等.如果是直接购买商城之类的快递包 ...
最新文章
- 算法(2)KMP算法
- ICCV 2021 | 国科大提出首个CNN和Transformer双体主干网络!Conformer准确率高达84.1%!...
- python 100题
- yolov3 pytorch错误集合
- 架构设计中服务层的简单理解
- Eclipse中如何恢复已删除文件
- 信息设计中的“父子关系”
- 冈萨雷斯《数字图像处理》读书笔记(十一)——表示和描述
- JAVA入门级教学之(第一章总结)
- java 大数四则运算_大数四则运算java(转)
- maven 构建 springmvc + spring security 权限控制示例
- Java学习笔记1.2.1 使用Java集成开发环境 - Eclipse
- 请郎平回归执教中国女排
- 热烈祝贺人生第一篇论文发表成功
- mac系统spss26软件下载及安装教程
- IV-18(前苏联ИВ-18)荧光管电子钟【Energy Pillar.能量柱】
- java xsd校验xml文件
- 8弦金属摇滚电吉他音源 Orange Tree Samples Evolution Dracus Kontakt
- [Hexo]Hexo+github搭建静态博客
- java 动态代理实现原理
热门文章
- [附源码]Java计算机毕业设计SSM高校网上报销系统
- 基于SpringBoot 的报销系统
- [转帖]OEM、ODM、OBM分别是什么?
- B域,M域,O域具体是指什么
- windows7中用vitualbox安装OS X 10.11 El Capitan 及 Xcode 7.0--转载
- 洛谷P1926-小书童——刷题大军(01背包)
- 调整图像亮度brightness,对比度contrast,饱和度saturation方法整理
- 一篇易懂的ECU故障诊断指南
- java 算法移植_Java:Chacha20算法(从openssl移植)
- winform wpf 全屏最大化