做客户端的同学对老版本兼容肯定是深恶痛绝,每到这个时候就会羡慕做web的小伙伴,起码人家能保证所有人看到的都是最新的版本,不用费心升级,更不用考虑老版本兼容。
1、老版本兼容问题的由来
老版本兼容为什么这么恶心呢,举个栗子,假设客户端有一个评论板块,用户的个人中心里面有“我的评论”,记录用户发表过的所有评论,样式大概是这样:
而且为了方便用户查看,这个资讯可以直接点击查看详情。那么问题来了,以往的版本,只有资讯下面能发表评论,而最近小视频很火,于是大家开会,一拍脑袋决定在app里面增加一个小视频板块,也需要有评论,这条评论也会记录在用户的评论列表中。
于是,假设有一个像我这么无聊的用户,在新版本小视频下面发布了评论,又跑到老版本上去看,发现点击资讯标题,客户端没有反应(更老火的情况是客户端没对无法识别的类型做处理,点击后直接崩掉了~)。
或许有人会说这么无聊的用户很少,那再进一步,假设你们为了加强用户之间的交流,在首页会展示你关注的人在app里面的动态,那在一个没升级最新版本的用户的首页就会出现上面这一条,无法点击的状态。
类似的情况还有很多,比如有一个广告位,之前只能填资讯,现在需要能填内嵌页,位置是一样的,展示也一样,只是多支持一种形式,但是如果不管老版本的话,那部分用户还是能看见,但是点不动(千万别崩)~
2、以前的处理方式
以往遇到这种情况,我们的处理办法非常简单粗暴,直接不给老版本返回,像广告位这种做起来倒简单,假设你填了新的类型,请求来源是老版本,就当没配这个位置就是了。
但是上面评论那个就复杂得多,假设你们一页展示二十条数据,服务端同学得去除掉新类型,然后再从剩下的数据里面取20条返回,无形中加大了服务端压力,而且当后面再增加新类型的时候,服务端小伙伴会崩溃的~
3、最终解决方案
在被老版本兼容折磨了无数个版本之后,我研究了一堆app,发现了一个终极解决办法,对无法识别的新类型,给一个统一的弹窗,或者跳转一个统一的页面,类似于这样:
毕竟,除了强更的app(关于升级,可以看我的另一篇文章:升级这件“小”事),总有一群对你的升级弹窗毫不在意的用户,用这种方法,只需要客户端加一个默认判断,换来的是你不用考虑这个功能是不是需要兼容老版本,服务端小伙伴也不用花时间去打一个又一个补丁,还可以巧妙的提示用户:升级新版本有好东西哟(/≧▽≦)/
在使用这种方式的应用,再举个栗子,微信电脑版,打开小程序的时候,会有这个页面: