App版本更新接口的设计

Posted imock

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了App版本更新接口的设计相关的知识,希望对你有一定的参考价值。



工作这几年碰到的版本检测升级的接口也算是五花八门,啥样的都有,但肯定有的功能是有个apk的下载链接,能间接或直接提示你是强制还是非强制更新:


- 间接是指提供你后台最新版本号,让你自己与本地版本号通过比较得出是否升级;
- 直接就是后台接口直接返回个Boolean类型告诉你是强制或者非强制更新。

如感觉排版看着不舒服,前往 【App版本更新接口的设计】
个人认为一个好的版本检测接口需要设计的更灵活更清晰用起来更方便,下面就我理解的接口设计如下(如思路有误,欢迎指正):


    总字段如下(并不是所有字段都要返回给客户端):
      1.最新版本号 :newVersion
      2.最小支持版本号 : minVersion
      3.apk下载url : apkUrl
      4.更新文案 : updateDescription
      5.是否有更新 : isUpdate
      6.是否强制更新 : forceUpdate
    可选字段:
      7.apk文件大小:apkSize
      8.apk的文件MD5值:md5


**方案一(后端处理逻辑):**
在客户端请求参数中添加当前版本号currentVersion传输给后台,由后台根据客户端传过来的当前版本号currentVersion做相应的判断后给出是否强制更新。
**后端逻辑如下:**
1. 如果currentVersion < newVersion,则isUpdate = true;
   - 如果currentVersion < minVersion,则forceUpdate = true;
   - 如果currentVersion >= minVersion,则forceUpdate = false;
   - 如果有特殊需求可指定某个版本必须强制更新,如currentVersion == XXX,则forceUpdate = true;
2. 如果currentVersion == newVersion,则isUpdate = false.


**结论:**
返回客户端的字段仅需要`apk下载url : apkUrl `、`更新文案 : updateDescription `、`是否有更新 : isUpdate` 、 `是否强制更新 : forceUpdate` 这四个字段即可。


**方案二(前端处理逻辑):**
逻辑和后端处理逻辑大体上一致,只是把逻辑判断移到前台,故需要后端提供`最新版本号 :newVersion` 、 `最小支持版本号 : minVersion` 、`apk下载url : apkUrl` 、`更新文案 : updateDescription` 这四个字段。


客户端逻辑如下:


1. 如果currentVersion < newVersion,则有更新信息;
   - 如果currentVersion < minVersion,则需要强制更新;
   - 如果currentVersion >= minVersion,则不需要强制更新;
2. 如果currentVersion == newVersion,则没有更新信息。


****
**总结:**
细心的你可能会发现上面的可选字段apkSize和md5并没有用到,既然是可选字段也就是可用可不用,根据需要决定是否采用,这里来讲下他们的用处。
+ **apk文件大小apkSize**
这个用处可以说出于考虑用户体验,需要在升级弹框出来展示给用户将要更新的内容多大,让用户决定在非WIFI状态是否要更新,不能为了拉用户下载量或所谓的UV数直接让用户在不知道大小的情况下去直接下载`(土豪用户绕路)`。
+ **apk的文件MD5值**
这个主要是出于安全考虑吧,因为文件内容固定的话对应的md5是一样的,我们可以通过这个md5值来和下载的apk的md5值进行比较去保证我们从服务器更新下载的apk是一个完整的未被篡改的安装包,也就是说如果我们下载的apk的md5值和服务器返回的md5值相等,则说明我们下载的apk是完整的,且没有被相关有心人处理过的apk。


综上所述,这个版本更新的处理逻辑客户端和后端谁来做都可以,无关乎懒不懒的问题,个人感觉灵活性后端比客户端方便多了,毕竟后端可以指定minVersion与newVersion中间的任意一个版本强制更新,而客户端做起来就没有那么灵活了,个人见解,如有更好的方案,欢迎指教。




以上是关于App版本更新接口的设计的主要内容,如果未能解决你的问题,请参考以下文章

移动端接口:版本的兼容

Java版本APP接口安全设计

app更新提示后台接口开发-数据库表设计

APP接口版本兼容的问题

uniapp - 实现安卓APP实时在线更新APP

java类与实例