说话可以不介意先后,代码回调顺序乱了,代码就乱了

晚上我想加个鸡腿

我想加个鸡腿,晚上


上面这两句话,表达的是同一个意思。先后顺序调换一下,没有太大的影响。


但是计算机程序,是按照代码顺序执行的,如果换了先后顺序,那逻辑就变了。


1.先看一个现象:看完激励视频,正常关闭,没有奖励


这个时候用户就“咯噔”一下,神马情况,不给奖励,这不是相当于外卖付钱了,不给发货吗?

再看一个试试,结果还是同样的问题,不给奖励。


当遇到线上的产品,出现这样的情况;我就是被@的对象,有bug,你来解决。


嗯,莫慌,打个debug包,日志调试一下,发现有一家渠道的广告,先发送close的回调,再发reward的回调。通常是先reward,再close。

在业务逻辑当中,现在reward中,做一个标记,表示激励看完了,当用户关闭的时候,再给奖励。这么做就是避免reward消息来了,用户还没关闭,如果在用户没有看到的情况下给用户奖励,用户会以为没给。所以这里等close的时候再给。


也不知道哪个版本开始,突然遇到了回调的顺序变了,这就导致执行close的时候,reward还没有执行,标记位是false,此时就不给用户奖励,导致了误解。


2.再来看另外一个现象


回调执行多次,广告开始播放的回调执行的次数,是累加的。

看第1个广告的时候,广告开始播放的回调执行了1次;

看第2个广告的时候,广告开始播放的回调执行了2次;

看第3个广告的时候,广告开始播放的回调执行了3次;

看第4个广告的时候,广告开始播放的回调执行了4次。


这就相当于看了4次广告,后台统计打点,统计了10次。

此刻通过升级SDK版本到最新版,解决了这个问题;至于为什么,现在还没查明原因。


3.这就给SDK开发带来了很大的麻烦


平台修改了接口,如何避免线上的版本出问题。

这里建议如下:

  1. 不要用build.gradle依赖版本时,用+,最新版本是否兼容,这个说不好

  2. 建议平台的SDK,对外暴露的接口不要轻易修改,修改需要考虑兼容性。

  3. 自己每写一个版本的代码,都需要全面测试一下,功能是否还是正常的。


写完Android的SDK,写iOS;写完iOS,写Android。循环播放。



内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/171185.html

(0)

相关推荐