根据苹果公司的App Store Review Guidelines应用审核规则:
3.1.5Physical Goods and Services Outside of the App: If your app enables people to purchase goods or services that will be consumed outside of the app, you must use purchase methods other than IAP to collect those payments, such as Apple Pay or traditional credit card entry. Apps may facilitate transmission of approved virtual currencies (e.g. Bitcoin, DogeCoin) provided that they do so in compliance with all state and federal laws for the territories in which the app functions.
需要在应用内购买使用的服务,应该接入内购。最近在项目中也遇到这个情况,我们做在线教育,卖的是视频课程,所以按照apple的规则需要接入内购。但是内购是需要与apple三七分成的,价格也是需要按照apple的价格表选择,很不灵活。那么怎么解决这种问题呢,我想了这么几种解决方案:
1、直接不接入内购,在审核时隐藏相应购买模块。现讨论一种情况的代码实现方式,比如项目是Tabbar布局,购买模块是其中一个tabbar,在审核时隐藏这个tabbar。思路如下:
1)首先需要后台提供一个接口,判断是不是在审核状态。此时,会出现这么个问题,如果包含内购的版本2.0通过审核了,那下次提交2.1时,如果还使用这个接口来判断是否在审核状态的话,就不行了,因为用户已经在使用2.0了。所有,每次提交都要换个判断状态的接口。但我觉得每次都换接口有点麻烦,我是这样做的:假如2.0版是2016年7月10日提交的,那在进行请求接口之前,先判断当前时间,如果当前时间在2016年7月10号到8月10号之间,就进行请求操作,否则直接认为是非审核状态。当然这个时间段是自己定的,一个月足够上线了,也可以设置10天,毕竟每次被拒都可以改这个代码,再提交个二进制文件。说的有点啰嗦,在Demo中会有相应代码。
2)写一个VC,此VC的作用有两个:一:添加一个全屏的与启动图片一样的图片;二:进行第一步说的操作,进行时间判断和网络请求,并使用block通知外面。
3)keyWindow的RootVC先设置成第二步说的VC,在VC的block回调中做相应操作。回调参数是yes的话,再本地存储个值。此时把rootvc切换成tabbar,在tabbar中添加childVC时,根据本地的值,判断添加相应模块。
GitHub - mws100/AvoidIAPExample: 绕过苹果IAP审核的Demo
2、接入内购,同样需要一个接口,在审核时使用内购付款,通过后使用其他方式。至于内购的接入步骤,网上有很多不错的教程,github上也有不错的框架。这里各推荐一个:
内购教程:iOS开发内购全套图文教程
内购框架:RMStore
都是个人见解,有更好的方式,或对文章内容或内购流程有疑问可留言讨论。