这几天遇到一个苹果内购问题困扰了好几天才解决,在此记录一下,希望能帮助遇到同样问题的你。
1、事情起因:
我们使用Flutter开发了一个商城类的应用,在iOS
平台使用苹果内购,Android
平台使用微信、支付宝,这个项目已经上线很久了,iOS内购使用的是flutter_inapp_purchase
插件,充值购买都没有问题。最近客户突然反馈我们的应用在iOS平台充值的时候报错,咦?充值怎么会有问题呢?距离上次更新版本有两三个月了,上线之前肯定是测试过没有问题的,上线后测试同学也会复测。
2、排查问题:
打开项目启动,排查问题,经过调试发现,使用插件 FlutterInappPurchase.instance.getProducts
调用我们在苹果App Store Connect 配置的商品信息返回为空数组,我登录到苹果开发者网站查看,商品信息都是没问题的,这就怪了,我们的苹果开发者账号是在前两周过期时,手动重新续的费,其他的都没有改动,难道跟账号过期续费有关?我直接在Xcode中打开iOS项目写了一个方法查看内购是否可用
项目启动后,res
结果返回true
,这里也是没问题。
继续使用方法查看是否能返回可用商品:
在代理方法中发现products 确实跟使用flutter_inapp_purchase 中调用结果一样,返回空数组,并且invalidProductIdentifiers
返回了上面传的商品id,证明当前这个商品是不可用的,但是登录到App Store Connect 查看这个产品状态是正常的,进入到商品信息中查看也没有任何异常。
3、猜想
是不是跟重新续费有关?重新续费后有某些缓存,导致我的商品信息不能正常取到?反正苹果经常出现一些幺蛾子,为了验证我的猜想,我新建了一个商品,填入了各种信息,保存后,把Xcode项目中 productId 替换成现在这个,运行,发现invalidProductIdentifiers
为空,说明新建的这个商品是OK的,为啥以前的商品就不行了呢。我把以前的商品重新编辑了一下,然后保存,再次启用程序,发现居然可以了!!!下载一个线上的App,试了一下,可以充值了。
至此问题解决,也就是把存在的商品重新编辑保存了一下,但是这个过程真是老费脑筋了。