iOS内购规则
iOS内购规则
1 IAP规则详解
本⽂所述IAP(In-App Purchase),特指苹果App Store的应⽤内购买,是苹果为App内购买虚拟商品或服务提供的⼀套交易系统。
⾸先来讨论⼀下IAP的基本规则以及其中的⼀些要点:
1.1 适⽤范围
在App内需要付费使⽤的产品功能或虚拟商品/服务,如游戏道具、电⼦书、⾳乐、视频、订阅会员、App的⾼级功能等。
App内购买实体商品(如淘宝买⾐服)不适⽤IAP,不在App内使⽤的虚拟商品(如充话费)或服务(如滴滴叫车)也不适⽤IAP。
那么问题来了,假如在App内购买⼀个⾳乐专辑,既能在App⾥⾯听数字专辑,同时也能获得实体商品cd,适不适⽤IAP呢?
答案是适⽤的。因为App内的数字专辑和实体商品cd在使⽤上是可以分离的,数字专辑符合IAP的适⽤范围,购买就要⽤IAP。否则各种游戏⾥⾯卖648的道具,都声称商品不仅包含游戏道具,购买后还能获得⼀个5⽑钱的实体纪念品(举例),就直接绕过IAP,苹果岂不玩蛋?
励志名言名句大全苹果规定,适⽤范围内的虚拟商品或服务,必须使⽤IAP购买⽀付,不允许使⽤⽀付宝、⽀付等其它⽀付⽅式(包括Apple Pay),也不允许以任何⽅式(包括跳出App、提⽰⽂案等)引导⽤户通过应⽤外部渠道购买。
原则上苹果也不允许通过外部兑换码等⽅式在应⽤内解锁虚拟商品或服务,但实际上兑换码的限制是有些模糊的,因为有些App可以在应⽤内获得兑换码(⽐如活动发放优惠券或签到奖励),很难严格界定是⼀个外部兑换码还是内容兑换码。因此,在IAP购买中使⽤优惠券抵扣⼀般情况下是允许的,但如果很明显地引导⽤户在App外购买兑换码,再在App内兑换成虚拟商品或服务,是会被苹果Reject的。
另外在App Store Review Guidelines 3.1.4 ⾥⾯还有这样⼀条特殊规则:
“App features that work in combination with an approved physical product (such as a toy) on an optional basis may unlock functionality without using IAP, provided that an IAP option is available as well.”
意思就是说,⽤户在App内购买⼀个功能,⽽这个功能需要和⼀个实体商品结合起来使⽤,这种情况下,允许使⽤IAP之外的⽅式来解锁功能,但前提是仍然需要提供IAP购买的选项。
⽐如⽤户在⼀个健康管理App内购买⼀个⾼级计步器功能,但这个计步器功能需要跟⼿环配合使⽤,要和⼿环打包购买。这个情况下,App可以在IAP购买的选项基础上,再提供其它的购买⽅式。
但现实中好像并见过没有这样的案例。因为App完全可以把计步器变成免费功能,只是没有⼿环不起实际作⽤,然后把⼿环当成是⼀个在App外使⽤的实体商品,这样跟IAP就没有半⽑钱关系了。谁没事事还把这个东西做成IAP还要给苹果分成啊~
另外还有⼀些跨平台同步的复杂案例,在本⽂的第三部分再进⼀步介绍。
1.2 I A P类型
哪款防晒霜好用如前⾯说的,IAP是⼀套商品交易系统,⽽⾮简单的⽀付系统。每⼀个购买项⽬都需要在App的itunes connect后台创建⼀个商品,提交给苹果审核,审核通过后,购买项⽬才会⽣效。
在创建IAP商品时,主要有4种类型可供选择:
1.2.1 Consumable products
该类型适⽤于可多次购买的消耗型项⽬,如游戏道具、虚拟币等。
1.2.2 Non-consumable products
该类型适⽤于⼀次购买永久有效的项⽬,如电⼦书、游戏关卡等。
该类型项⽬⽀持跨设备同步和本地restore,⽐如说,⽤户在某个App中购买了⼀本书,可在所有相同Apple ID设备的App中免费获取这本书,⽽不要需要借助App本⾝的帐号体系,即使在App中删除了这本书,也可免费重新获取。
1.2.3 Auto-renewable subscriptions
该类型适⽤于⾃动续费的订阅项⽬,如Apple Music的按⽉订阅,⽤户购买后会每⽉⾃动续费,直到⽤户⼿动取消或者开发者下架IAP项⽬。
类似Non-consumable products,该类型也⽀持跨设备同步和本地restore机制。
之前这种类型只⽀持newsstand类别(报刊杂志)的App,从2016年6⽉开始⽀持所有类型的App,但除了newsstand类别之外,国内的App 很少使⽤这种类型的内购。
1.2.4 Non-renewable subscriptions
该类型适⽤于固定有效期的⾮⾃动续费项⽬,如云⾳乐的会员和⼀些视频App的会员。没有跨设备同步和本地restore机制,⽤户可以多次购买。
1.2.5 Free subscriptions
1.3 定价
1.4 分成
1.5 结算
针对IAP的交易收⼊,苹果⼀般以5周(每年1/4/7/10⽉)或4周(其余⽉份)作为⼀个结算周期,并在每个结算周期结束后第33天向开发者付账。
2 IAP设计开发要点
2.1 创建和提交I A P项⽬
2.1.1 尽量不要删除已创建的IAP
已创建的IAP除了product id之外的所有信息都可以修改,如果删除了⼀个IAP,将⽆法再创建⼀个相
同product id的IAP,也意味着该product id永久失效。⽽product id⼀般有特定的命名规则,⽤来标⽰App内的购买项⽬,如果命名规则下有某个product id永久失效,可能会导致整个product id命名规则都要修改,掉进坑⾥~
2.1.2 注意区分reference name和display name
reference name是给开发者⾃⼰看的,display name会在IAP⽀付流程的确认购买系统弹窗中展⽰给⽤户,⽽且不能随意修改(修改需要重新提交IAP审核),所以命名的时候要弄清楚。
2.1.3 当App审核被拒时
如果IAP随App版本⼀起提交审核,有问题时所有新提交的IAP项⽬和App版本会同时被拒,再次提交App审核时,⼀定要记得重新提交所有IAP 项⽬(每个IAP还得要⼿动编辑⼀下才能重新提交真⿇烦),否则苹果是⽆法继续审核的,不要傻傻的等上半个⽉发现苹果⼀点反应都没有~
2.2 I A P⽀付流程
⽤户准备购买某个项⽬时,App客户端通过product id向苹果API请求⽀付信息
⼿机系统弹窗验证⽤户的Apple ID(可能需要输⼊Apple ID密码或验证touch ID)
Apple ID验证完成后,苹果API向App客户端返回⽤户将要⽀付的价格和货币单位
App客户端再次验证product id对应的⽀付价格和货币单位⽆误(可跳过),继续请求⽀付
⼿机系统弹窗提⽰⽤户确认将要购买的内容和价格,⽤户点击确认购买
App客户端获得苹果API返回的⽀付成功通知以及⽀付凭据,向App服务端请求校验⽀付凭据
App服务端拿到客户端的⽀付凭据,再向苹果服务器请求校验⽀付凭据(避免⼀些越狱插件伪造客户端⽀付凭据)
App服务端校验⽀付凭据成功,通知App客户端
App收到⽀付凭据校验成功通知,代表⽤户付费成功,再处理后续业务逻辑
以上就是⼀个标准的IAP⽀付流程,看上去顺理成章,但实际上有很多坑,下⾯重点来讲⼀下需要注意的问题。
2.3 不能忽视的坑
2.3.1 延迟返回⽀付结果
在上述流程的步骤6,由于⽹络问题等种种原因,即使⽤户已经付款成功,客户端也可能⼀时半会收不到苹果API的⽀付成功通知,也⽆法主动向苹果API请求查询⽀付状态,只能被动等待通知。
因此有些情况下,客户端会延迟收到⽀付成功的通知(可能是过了⼏分钟,也有可能是下次打开App的时候),针对这种情况,需要做好两件事:
1 客户端本地保存所有⽀付结果未确认的交易信息,并设置⼀个监听进程,在收到⽀付成功的信息后,继续处理这笔交易的后续流程。极端情况下,⽤户在交易结果未确认的情况下删除App,保存在App本地数据库中的交易信息也会丢失,因此,更好的⽅案是把交易信息存到iOS系统的keychain⾥⾯
2 当本地存在⽀付结果未确认的交易信息时,在交互上提⽰⽤户可能需要等待⽀付结果,避免⽤户重复付款
2.3.2 服务端校验延迟
在上述流程6~8的⽀付凭据校验过程中,因为⽹络问题等各种原因,客户端可能⽆法及时收到服务端的校验成功通知,类似的,这种情况需要:
1 客户端本地保存⽀付凭据,并持续向服务端轮询校验结果,直到返回明确的校验成功或校验⽆效的结果。⽀付凭据最好也保存在keychain⾥⾯
2 在客户端向服务端轮询结果时,为了避免⽤户在⽀付结果页⾯等待过久,交互层⾯上可以先结束⽀付流程(经过⼀定超时时间),同时提⽰⽤户需要等待⽀付结果,避免⽤户重复付款
2.3.3 ⾮官⽅渠道包⽀付失败问题
在上述流程步骤1中,如果⽤户安装的App不是App Store官⽅渠道包(从PP助⼿、同步推等第三⽅应⽤商店下载),苹果API会直接返回product id不存在并结束⽀付流程,在交互层⾯上表现为⽤户点击购买后直接提⽰⽀付失败。这个问题曾经困扰我们很长⼀段时间,并且⽹上查不到任何相似问题的信息,⽤尽了⽇志埋点和⽤户调研等⼀系列⼿段,最后才定位出来。
类似的,越狱设备在安装某些内购破解插件后,也会导致⽆法进⾏内购(返回product id不存在)。不过现在iOS设备的越狱⽐例已经⾮常低了,基本可以忽略。
因此,针对这个问题的解决办法是:当返回product id不存在时,提⽰⽤户安装的可能是⾮官⽅渠道包,引导⽤户到App Store下载官⽅渠道包。
2.3.4 货币校验
如本⽂1.3部分所述,如果App在中国区以外发布,但由于某些原因⼜希望限制某些地区帐号的内购,可以在上述流程的步骤4校验⽤户⽀付的货币单位,并禁⽌某些货币的购买。同时在交互上也要给⽤
户相应的提⽰,类似不⽀持特殊地区帐号购买的弹窗说明。
2.3.5 未绑定App Store⽀付⽅式的⽤户⽀付流程
这是⼀个巨⼤的坑!
张艺兴加盟街舞如果⽤户在内购前未绑定App Store的⽀付⽅式,在上述流程的步骤5,点击系统弹窗(第1次)的确认购买后,会⾃动跳转到App Store的绑定⽀付⽅式界⾯。接着如果顺利完成⽀付⽅式的绑定,会再⾃动跳转跳回App,再次出现系统弹窗(第2次)让⽤户确认购买。铁血战将
但是,当⽤户点击系统弹窗(第1次)的确认购买后,苹果API会⽴即向客户端返回⽀付失败...⽀付失败...失败......⼀般情况下,客户端收到⽀付失败的返回,理所应当认为⽀付已经取消了,⽽丢弃本地的交易信息。但万万没想到后⾯⽤户绑定⽀付⽅式完成后会继续确认购买,这简直就是苹果IAP 系统设计的⼀个⼤bug!
如果知道了这个坑,解决⽅案也很简单,就是在苹果API返回⽀付失败时,⽤类似2.3.1的⽅式处理,保留待确认的交易信息并持续监听⽀付结果返回。
3 更多IAP实践经验总结
3.1 匿名购买
很多App在第⼀次提交IAP时都会因为不⽀持匿名购买被拒,原因是App Store Review Guidelines要求App在⾮必要的情况下,不允许强制⽤户注册/登录后才能使⽤某些功能。
⼀般情况下,对于没有IAP的App,强制⽤户注册/登录才能使⽤是不会被拒的(除⾮遇到很苛刻的审核⼈员),但是对于IAP,⼀般都会要求⽀持匿名购买。当然你也可以尝试编⼀堆原因说明为什么强制⽤户注册/登录是必要的(⽐如提供的商品或服务需要获取⽤户⼿机号或邮箱之类的理由),但也不能保证说服审核⼈员。
⽀持匿名购买,通常需要在⽤户未登录App帐号的情况下,临时保存⽤户的购买记录,并在⽤户登录后合并到App帐号数据。
3.2 跨平台同步
虽然在原则上,苹果不允许通过外部渠道解锁App内需要付费才能使⽤的功能或虚拟商品,⽐如在web端购买⼀个课程,在App内观看,但实际
在某些条件下是可以做跨平台同步⽤户购买的内容:
1 在iOS App内也提供相应商品IAP购买的前提下,通过App帐号同步⽤户在不同平台上购买的内容。这条规则适⽤到⼤部分游戏上可能会⽐较苛刻,但是⼀般的内容类App都是⾏的通的。
2 针对电⼦书、⾳乐、视频等项⽬,App只提供单纯的内容阅读/观看功能,⽽不提供任何发现和订阅内容的功能(⽐如Kindle iOS版),可⽀持⽤户在外部渠道购买内容后在App中使⽤(具体可参考App Store Review Guidelines 3.1.3)。但实际上是否允许可能也要取决于审核⼈员的判断,⽐如云课堂曾经提交过⼀个版本,不能购买付费课程,但是允许⽤户在web端购买付费课程后在iOS端观看,就被拒了,理由是付费课程不属于上述条件的内容范畴。
3.3 虚拟币
由于IAP的价格等级机制,⽆法⽀持灵活的商品定价(如9.9元⼈民币)和营销功能(如优惠券抵扣等),很多App会引⼊虚拟币,先通过IAP内购充值特定价格的虚拟币(如6、12、18、648等),再使⽤虚拟币购买具体的商品。
类似IAP跨平台同步问题,iOS平台充值的虚拟币不允许和其他平台(Android、web)流通,外部平台充值的虚拟币不能在iOS平台使⽤,同时iOS平台充值的虚拟币也不能在外部平台使⽤。
但实际中,我们会发现有些App,⽐如喜马拉雅和得到,⽀持⽤户在中充值虚拟币(虽然充值也区分了iOS平台和其他平台),再在App内使⽤,并且在App内的充值界⾯,隐晦的提⽰⽤户如果充值遇到问题,可以关注获取客服帮助(实际上就是引导⽤户⽤充值)。这种做法严格意义上是不合规的,但如果苹果审核不严也能通过,算是打擦边球,估计这招效果还不错~
3.4 退款问题
根据苹果政策,⽤户在购买IAP后90天内,能以各种原因申请退款(扣款后购买失败、买错了、不喜欢等等),但实际能不能退成功苹果说了算。如果⼀个⽤户申请退款成功,苹果会在与开发者结算时记⼀笔退款订单(当然原来购买成功的订单也在),钱就不给了,⽽且苹果也不会告诉你是哪个⽤户退款的,⽽且⽤户购买的东西还在,简直就是霸王条件~
订单数据可以在itunes connect后台的“付款和财务报告”中查看,但没有详细时间信息和⽤户信息,很难定位到相应的平台订单。
对于游戏或者⼀些⾃营平台来说,可能就是少点收⼊。⽽对于需要与平台CP⽅⼀⼀分成的产品来说,可能就要亏钱。为了解决这个问题,我们尝试设计过⼀套复杂的退款订单分配规则,根据IAP订单的时间周期、⾦额,结合平台订单的⼀些信息,将IAP退款订单分配到平台订单,由平台和CP⽅共同承担退款。但是由于开发排期原因,这个⽅案放了⼀年多⾄今都没做……退款都由平台承担了→_→
从历史数据来看,⼀般不遇到⼤量恶意退款的情况下,IAP的退款率可能在1~3%之间(取决于App内容质量、⽤户⼼情,还有苹果的⼼情)。对于IAP营收额很⼤的App,可能需要考虑⼀下退款的问题。
3.5 ⽀付成功率
云课堂曾经对⽐过iPhone端使⽤⽀付宝/⽀付(注意:绕过IAP使⽤第三⽅⽀付属于违规⾏为,可能导致应⽤下架或开发者被封号,切勿模仿!)和IAP的⽀付数据,发现第三⽅⽀付的⽤户⽀付成功率⼤概是IAP的2~3倍,反映在营收上也差了2倍多。
不难理解,国内App Store的⽤户⽀付习惯肯定不如第三⽅⽀付成熟。⽽经过进⼀步的⽤户问卷调研,发现影响IAP⽀付成功率的因素有很多⽅⾯:
1 ⽤户安装的App来⾃第三⽅应⽤商店或使⽤越狱设备,⽆法使⽤IAP⽀付(约5%⽤户)
好看的搞笑电影
2 ⽤户未绑定App Store⽀付⽅式(约75%⽤户,数据很惊⼈)
3 ⽤户在IAP⽀付过程绑定⽀付⽅式遇到问题,放弃了(约50%⽤户)
乔四美最后的结局以上数据仅代表云课堂iPhone端的⽤户,某种意义上也说明云课堂的⽤户⽐较⼩⽩(产品本⾝的⽬标⽤户很⼤⼀部分就是⼩⽩),没接触过IAP这种⽀付⽅式。不同产品的⽬标⽤户的App Store内购使⽤习惯肯定也存在差异。
不过,随着App Store内购的普及(⼀⽅⾯是游戏内购带动,另⼀⽅⾯也得益于苹果的推⼴,⽐如经常搞⼀些App⼀元购活动,还有从2016年11⽉开始⽀持绑定⽀付宝),⽤户的内购习惯也在持续养成,从数据上也能看出IAP⽀付成功率的上升趋势,对于接⼊IAP的产品是利好的。
3.6 作弊⾏为
考虑到IAP的分成、退款以及⽀付成功率等⼀系列问题,虽然我们有很多种办法可以偷偷绕过IAP使⽤第三⽅⽀付,⽐如:
1 通过后台开关控制在某些时间开启第三⽅⽀付
2 根据⽤户信息和⾏为识别出明显不是苹果审核⼈员的⽤户(特别是其中⼀些⾼客单价⽤户),开放第三⽅⽀付
等等……
但是根据公司企业发展部、市场部、法务部的要求,切勿在IAP的问题上搞事情!好好遵守苹果爸爸的规则,做好产品,争取App Store推荐才是正经事!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。