【iOS】内购项目审核被拒的坑

接手维护公司老项目,主要是开发新功能。之前运行正常的代码防止误伤就没有动。这周照常更新版本,提交到App Store,没想到竟然被拒,拒绝理由是内购期间无限期加载,无法查看订阅内容。

一番查找发现:

苹果在审查的时候,环境是release,但账号是沙盒账号。而老项目中直接判断debug环境来设置检验地址是沙盒还是正式环境,导致苹果审查时用沙盒账号走了正式环境的凭证检测地址,后续向公司服务器二次检验、解锁内购项目等等操作都没有实现。
急忙将根据debug环境判断改成根据凭证判断。这种情况可以打AdHoc的包上传到分发平台再下载来测试,果然测试通过。记录一下下次省得踩坑

0628更新——————————————

苹果让我知道我太天真,修改过后的版本依旧被无情拒绝,原因还是同样的:无法查看付费内容。

这让我百思不得其解,明明已经修改了验证环境,怎么还会出现这种状况呢,研究了一天,百度了所有我能找到的关于苹果内购的代码依旧没有发现问题。于是我在所有验证失败的地方都加入了svprogressHUD,信息为验证失败的错误码,这样如果还是不可以的话,苹果拒绝的时候附件就会是带有错误码的截图。
果然第二天又被拒了,查看附件得知是公司服务器的二次验证没有通过,返回值是21002,所以没有进行后续的解锁操作。
但我这边的逻辑是:购买成功之后获取receipt,先在本地向苹果服务器请求验证,验证成功后才会向服务器请求进行二次验证。没道理本地能通过服务器不能呀,于是和公司后台进行探讨,期间也骚扰过多个ios开发的兄弟,得出结论可能是传输数据格式的问题。也百度了一下21002错误码,有说是因为传输过程中“+”变成“ ”了的,有说是php直接json_encode导致“\”转译成了"\"的,需要手动拼接成一个字符串。
所以目前的解决方法就是:获取receipt后,先本地验证,验证通过请求服务器二次验证的函数json编译接口,返回是21002时再请求手动拼接json的接口,如果两个都不行则调用保存参数的接口,方便第二天分析。

好了,上包去了,祝我好运。

你可能感兴趣的:(ios问题)