问题
技术,包括开发和测试,与产品之间,关于兼容性问题经常出现争论。两者的诉求往往是相反的。
产品:最好是全覆盖,兼容的版本越低越好;
技术:有时候一个功能,需要针对不同版本写几套代码;测试要准备一堆手机;少兼容一个版本,可以少做很多工作。
在兼容性和成本之间,如何达到平衡?
这个就需要技术和产品之间好好商量,相信能达到一个好的妥协。
如果运气不好,遇到不讲理的产品,(概率比较低),那么技术就要苦逼了。兼容性,基本上都是重复劳动,枯燥而乏味,纯粹的成本,是精神和金钱的双重损失。比如,开发就可能要做给XCode打补丁这种无聊的事情。Xcode8 支持 iOS7及以下版本
标准
主要是操作系统版本,手机型号两个;对于安卓来说,再增加一个厂商;
举个例子:
iOS:
操作系统: iOS9及以上
手机型号: iPhone6及以上
Android:
操作系统: Android4.0及以上;(API Level15以上)
手机型号和厂商: 华为、小米、魅族、VIVO、OPPO等品牌三年内主流型号
中兴、联想、一加、锤子等品牌两年内主流型号
像这样说,虽然不够精确,但是好处是大家都能够看懂。
开发
- 将开发工具,iOS是XCode,Android是Android Studio,升级到最新版本
- 设置最低支持的版本号
- 根据要求的机型,适配屏幕尺寸
- 根据相应的分辨率,从UI那边要不同的图片资源,放到工程合适的地方
- 检查业务代码,在需要的地方,根据不同的手机系统版本,采用不同的API实现相同的功能
- 检查使用的第三方库,看兼容性是不是符合要求。这个一般问题不大,不过不符合的话,都是比较头疼的问题
注意: 对于Android来说,具体支持那些厂商,哪些机型,开发并不能够指定。之所以会出现兼容性问题,是一些厂商的机型的屏幕尺寸比较特殊,对于给定的图片显示不好,或者提供的系统API功能实现上有缺陷。
测试
以上面的iOS为例子,看上去好像不多,但是要做到全覆盖还是不现实的。比如iOS9也分为好几个小版本,再跟不同机型组合一下,情况也很多。另外,苹果对于碎片化控制比较严格,支持往上升,但是不支持版本往下降。
所以,一个推荐的做法是将兼容性分为A、B、C三个等级;A类属于重点支持,功能和UI两方面关注;B类属于有限支持,重点在功能,UI方面放宽要求;C类属于关注类型,不做兼容性要求。
以iOS为例:
A类: iPhone X + iOS11.; iPhone8 + iOS11.; iPhone 7 Plus + iOS10.; iPhone 6s + iOS10.; 自己团队的测试进行人工验证;
B类: 以兼容性要求,“操作系统: iOS9及以上手机型号: iPhone6及以上”,找一家云测试服务商进行自动化测试
C类: 上线后收集用户反馈,根据实际情况,调整A类和B类的列表
覆盖率
-
要求100%的覆盖率是不现实的;
-
一般情况下,有90% ~ 95%的覆盖率就差不多了;
习惯上,年轻人2年就会换新手机,换下来的老款,给父母用了;那缺失的5% ~ 10%一般都是非活跃用户,价值很小。
- 苹果自己的用户量统计,这是一个很重要的参考指标。iOS系统-官网统计
image.png
根据这张图,当前,只要重点支持iOS11和iOS10两个版本就可以了。
-
国内,统计中国用户量的分布,这个有一定的参考价值。只是,目前还没有比较有公信力的网站,所以不能作为主要依据。比如:2018年2月,中国iOS各版本占有率(份额)排行榜:iOS 11.3第22
腾讯移动分析 -
自己的统计结果。这个可以作为主要依据。一般的移动应用,都会有专门的用户统计模块,一般是集成第三方库,比如免费的友盟统计就很好用。根据后台数据,需要支持的系统版本和机型就比较清楚了。这是应用自己的数据,应该重点关注。
经验规律
以iOS为例:
-
重点兼容两个版本,比如当前,重点兼容iOS11和iOS10
-
有限支持第三个版本,比如当前,有限支持iOS9
-
需要支持的机型,从苹果官网可以看出来。还在卖的机型,一般要支持。
image.png
从这里可以看出,iPhone X, iPhone 8, iPhone 7, iPhone 6s, iPhone SE这几个机型应该支持兼容性
-
苹果公司提供的开发工具XCode,升级到最新版本,里面有支持的iOS版本和具体机型,这个代表了苹果公司对兼容性的态度,很有参考价值。
-
根据产品所处阶段和用户数灵活调整兼容性需求
初创阶段:
上线时间少于1年,或者用户数10w以下;
偏重节约成本,集中资源打磨产品,覆盖率80%左右;
以iOS为例,只要适配iOS11就可以了;
发展阶段:
上线时间少于2年,或者用户数100w以下;
成本和覆盖率平衡,覆盖率达到90%以上;
以iOS为例,需要适配iOS11,iOS10;
成熟阶段:
上线时间大于3年,或者用户数100w以上,还没有突破1000w;
偏重覆盖率,覆盖率达到95%以上;
以iOS为例,需要适配iOS11,iOS10,iOS9;
独角兽阶段:
用户数突破1000w;
覆盖率作为一件重要事情来抓,增加资源投入,覆盖率向100%方向努力;
以iOS为例,需要适配iOS11,iOS10,iOS9;iOS8看活跃用户数占比评估是否支持;
H5兼容性
大多数情况,移动APP是混合结构,APP通过UIWebView(也就是常说的内嵌浏览器,iOS是Safari,Android是chrome)来调用H5页面,所以不需要单独考虑。
当然,如果是H5插件,写出的页面不是通过App访问,而是通过浏览器形式访问,那么还需要额外考虑浏览器的兼容性。比如UC浏览器,QQ浏览器,百度浏览器等等。
大公司的态度
- 苹果:不重视兼容性,留出一定的时间,等待客户升级最新的操作系统版本,更换硬件设备。对于碎片化的控制很好。在移动端,是无可争议的老大。在PC领域增长很快,全MAC开发,成了很多公司吸引人才加盟的一个有效手段。
- 谷歌:不想考虑兼容性,然而由于对于Android系统控制力弱,导致碎片化严重,很无奈的感觉。Android里面做的比较好的厂商,比如华为,基本上也是在向苹果学习。比如主流机型P20,P10,跟iPhone真的很像。
- 微软:很重视兼容性。特别是PC时代,一个API,由于兼容性,可能有10多个版本,让开发者很是讨厌。在移动端,几乎退出了竞争。在PC领域,面对Mac的进攻,也基本没什么好的方法。IE,在前端领域,几乎成了头疼的代名词。Windows版本,已经不是碎片化的问题,是有些机子,是根本不会考虑升级系统的问题了。
折中方案: 在覆盖率和成本之间找到一个平衡点
参考文章
ios用户系统占比研究-老铁,是时候干掉 iOS8 了!
iOS系统-官网统计
对于不同iOS系统的兼容性探讨
Android兼容性测试
Android版本兼容性问题
网友评论