根据苹果公司的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
都是个人见解,有更好的方式,或对文章内容或内购流程有疑问可留言讨论。











网友评论
情况是这样的,应用同时接了内购,支付宝微信支付.内购只有部分商品上架了.后台有一个接口返回一个状态,根据状态判断是否在审核期间.这个状态可去后台修改.而且会影响所有的线上版本.审核的时候点击确认订单调起内购,非审核则跳转另一个控制器进行支付宝微信选择支付.
然后有一次没有更改后台接口参数.被拒了.再次提仍被拒.因为被拒的那次是可以看到支付宝微信支付的.然后就一直未通过.是不是苹果留心了呢.......存不存在审核的时候检测是否集成了支付宝SDK呢?Alipay这个东西要检测还是很好检测的吧....审核不过很烦恼哦.去掉微信支付宝吧,公司没那想法...
然而,劝你不要这么做,一旦被发现,帐号都会被封,得不偿失。
这包括将任意参数传递给动态方法(如dlopen(),dlsym(),respondingToSelector :, performSelector :, method_exchangeImplementations())和运行远程脚本以便更改应用程序行为或调用SPI的任何代码,下载的脚本。 Objective-C方法respondToSelector:和performSelector:仍然被支持和允许。例如,它们可以用于在使用选择器之前检查操作系统兼容性。但是,您应该只将选择器传递给在编译时指定的这些方法。如果您认为您使用的是静态选择器,可能是您添加到应用中的第三方框架不符合规定。即使远程资源不是故意恶意的,它也可能很容易被劫持通过中间人(MiTM)攻击,这可能对您的应用程序的用户造成严重的安全漏洞。
请对您的应用执行深入审核,并删除与上述功能相符的任何代码,框架或SDK,然后再提交下一个更新以供审核。
最好的祝福, )
到底这种跳过失败了会发生什么情况呢?