IAP在Apple的沙盒环境中测试得好好的,一上到App Store上,就不能用了!你说着不着急!蛋不蛋疼!
当你还在为又一个新项目这么快成功上线而心里暗暗窃喜的时候,老板在群里来了一句“所有内购支付都不能用。。。”,此时你是不是有一种从天堂跌入地狱的感觉!你的心里会不会咯噔一下子!会不会额角留下两滴冷汗。。。然后马上连滚带爬的跑去zhou开电脑,验证下到底是为啥!
根据表现可以发现,是
-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response;
代理方法中response.products
这个数组一直为空。
开始检查:
- 打开XCode,看看《IAP沙盒环境 + 自己的生产环境》的表现有没有异常:秒过,没问题;
- iTunes Connect里的《App内购买项目》的状态都是《已批准》。没问题;
- 跟后台和负责转发的web同事确认下,生产环境的代码有没有变动,是不是就是之前测过的版本,有没有跨环境提交代码;有没有自己不知道的可能对IAP造成影响的改动:都没有。没问题;
- 抓下包,看看进入内购前的最后的相关的网络请求(因为IAP过程是无法进行抓包的,而且在修改证书后,IAP也会自动断掉支付过程,应该是做了本地的证书校验),尤其是《产品 ID》是否是正确的,由于我这里是由web转发的,所以还要找web同事确认下是不是他要的内容:都对。没问题
- Google下,看看有没有前辈遇到过类似的问题。没有。。。
冷静下,好好想想。
如果我们的代码没有任何问题(之前在多个app中加入过IAP,都没有问题),而且在sandbox环境下即时检测都没有问题,那么在正确和错误唯一的变量就是环境,IAP的环境;而且,最重要的是,我们当时已经是过审了,而且是最严格的首次提审,新上架,所以IAP这里应该是通过了iTunes Connect自己的审核的。所以,我更加确认:是Apple在将我们的IAP从sandbox环境切换到生产环境的过程中,没有把Production ID即时/成功的切过去。
接下来,先安抚下公司的各位大佬;
然后,联系下Apple吧~
Apple开发者首页最下面的Support中的Contact Us,点进去;
选择《App 设置和分发》里面的《App 内购买项目和订阅》(具体如何选择,各位根据实际内容自行选择即可);
-
可能是因为当时是周末,只有邮件的方式可供选择,平时应该还会有一个电话选项的;说是邮件,实际上还是Apple自己的页面,只不过会给你的邮箱回复。按要求填写即可,具体如下:
我描述了一下具体的表现,并强调了上面👆提到的代理方法中返回数组为空的问题,然后就进入了漫长而焦急的等待之中。。。
期间实际上也在不停的做尝试,但一直还是那个问题。。。哎呀呀~ 好煎熬啊~
第二天一早六点多,老板在群里说可以支付了!看截图是显示的昨天晚上将近10点的时候。
期间我和后台没有做任何代码/数据层面的更新!果然又是iTunes Connect的坑!我终于又得以平冤昭雪了🤣。。。
...
然后在下一周的周二,给我回复了这么一封邮件:
大意就是,你这是代码问题,我们爱莫能助,你得去找专门的Code-level Support部门寻求帮助。
就是你们的问题,还不承认🤪
自此,这次IAP上正式环境无效的问题,算是很被动的的解决了。全程大约历时12个小时。
除此之外
就在这次上架的过程中,还出现了一个老问题的变种类型:app release后搜索不到。
这个问题可以说是老生常谈了,网上也有很一致且有效的解决方法:修改价格及地址。
但是这次有了一些不同:
首先,修改完价格及销售地区后,保存,App的状态不在发生变化,变成等待协议之类的;
其次,如此操作之后,大约10分钟左右,确实生效了,在手机的《Connect》App中,选择《View on App Store》,可以跳转到App Store中,也可以正常显示;但是!你自己在App Store中搜索App名是搜索不到的!!!恐不恐怖!别人也搜索不到,但是如果你在View on App Store后,将当前页面通过微信分享给别人,别人通过分享链接是可以打开的。。。就这样,大约能又过了三四个小时,才能完全正常搜索到。。。
最近iTunes Connect进行了一次大的改版,猜测这些问题可能与这次改版有关吧~希望这次的这些BUG不会一直存在🙏