流程很简单,简单到险些不消跟业务后台打交接,但是坑却随之而来:
① 付出数据完全依靠前端应用,很难跟业务后台的订单体系一一对应;
② 针对①的问题,IAP付出支持通报skPayment对象,里面的applicationUsername常常用来生存体系的OrderId;
但是应用付出成功后收到的回调中,applicationUsername却偶尔会出现为null的情况,没有了对应关系,就没办法核销业务体系中的订单从而为用户充值;
③ iOS付出回调非常不稳定,有时延迟严重;且没有任何注定查询的方法;
④ iOS应用内付出有许多异常情况要处置处罚,最常见的就是没有登录、没有同意最新的iOS付出协议等,都会发送给app付出失败的回调;
但是当用户登录或是同意后,iOS体系又会触发新的付出,导致旧的附带业务订单号的付出无效,莫名又多出一个没有订单号的新付出;
⑤ 国内网上资料非常缺乏,基本都是19年从前的,Flutter的文章更是少的可怜,可参考性不强。
⑥ 测试文档对于中断购买的测试流程有巨坑,后面菜单肯定不要错过~
通过检察文档和不断调试,我们发现:
① 付出错误的回调,基本能立刻收到; ② 上面流程说到IAP付出需要手动结束付出流程。同时iOS规定不能对同一个skuId重复发起多次付出的,只要当前skuId有没有final的付出,再次发起都会失败; ② 无论付出成功或失败,只要app没有主动对当前付出进行final,每次启动app后,app都会收到这个付出信息的通知; ③ 关于applicationUsername,只有在付出完成立刻收到回调的情况下,回调信息才会有这个信息;到②中的情况,肯定不会返回applicationUsername; ④ 没有applicationUsername就意味着订单对不上,因此我们需要进行凑单机制。
综上,我们对异常处置处罚有了确定方案: