时间如白驹过隙,一晃又是一年。
本打算效仿某些知名人士写个年终总结,总结过去、展望未来,发篇辞旧迎新的“深度好文”。随后一想,还是算了吧。一是文采有限,高质量文章写不来;二是毕竟还没到那个level。
对于总结?我想说:有些事情不必说、不能说也无需说,放在心里,时间久了,自然就成了故事。
对于展望?我想说:如果真打算完成某些计划、实现某些目标,不必声张,只管默默地努力就好。
回到本文主题,最近项目在集成IAP功能,开始之前,浏览了Apple的官方文档,也看了大量的国内教程,推荐这篇博客,写得很详细,按照教程一步步操作即可。然而,虽然参阅了很多资料,但是对于第一次没啥经验的我,还是会踩坑。遇到一个主要的问题就是,请求商品时,返回的商品ID是无效,我一直在纠结这个问题:
Why are my product identifiers being returned in the invalidProductIdentifiers array?
于是又翻阅了Apple文档,当我看到与** invalidProductIdentifiers**相关的讲解时,真的是人生又充满了希望。苹果给的解释如下:
共八种情况可能导致该问题的发生(其中倒数第二条只针对非消耗型商品,而本人项目是消耗型商品,所以可忽略该条)。大概意思就是说:
- 使用了带有通配符(*)的App ID。(这个问题很好排查,去ITC看一眼即可)
- 最近提交的二进制文件被拒或者自己撤回。(修改App为准备提交状态即可,最好在ITC删除被拒的二进制文件,不上传二进制文件也可测试IAP)
- 没有清除ITC上在出售的IAP商品。
- 没有使用与App ID相关联的描述文件来签名App。
- 你可能更改了商品,但是还没有在AppStore服务器生效。(大概会等几个小时吧,具体不是很清楚)
- 还没完成所有的金融需求。(我最初的理解是:协议、税务和银行业务没有填写完整,也许是我理解错了->_->,接着往下看,一会还会Block到此处)
- 针对非消耗型商品,本人没仔细研究,感兴趣的童鞋可以点这里了解。
- ITC上的商品ID和代码里的不一致。(对比一下即可排查)
协议、税务和银行业务,我已经填写完整并提交审核,只不过status显示为:processing,所以按我当时的理解,上面的第六条情况也排除了,另外的七种情况也排除了。但是商品ID仍旧是无效的,导致返回的product数量为0。
只好翻阅官方文档并Google,但是并没有得到一个比较肯定的答案,甚至看到一个博客说,即使status == processing也不影响IAP测试,于是,我真特么信了。直到今天晚上(2017-01-01),协议、税务和银行业务的状态才审核通过(2016-12-28填写的),status变为Contract In Effect,商品请求成功,IAP测试成功。Block(@"上面的第6条");
所以,IAP可以测试的必要条件之一:Contract In Effect。