android 更新平台,Android更新平台架构方案

这篇文章是去年写的,我们的两款app一直这使用umeng的更新服务,但是16年umeng开始放弃更新服务,考虑到切换到其他更新平台也会面临这样的问题,我开始着手自己搭建一个更新平台。整体方案包含前后端,客户端代码封装成jar包并上次maven平台,方便每个app直接使用;服务端代码用nodejs来快捷实现。

1、系统结构

(1)整体结构

71853b3dd1e5e11839aaee3e26719646.png

整体结构

服务端的各个模块描述如下:

- WebConsole:提供上传更新包、配置更新策略的网站操作界面。

- FS:文件系统,存储文件及提供下载服务。

- DB:用于更新策略及更新信息,例如版本号,更新描述,文件的md5等。

- Server:接收客户端请求,返回更新信息。

(2)WebConsole结构

47635a7c6b3ad308ef886b0cf74fe28a.png

WebConsole结构

WebConsole的各个模块描述如下:

- 应用管理:创建应用、管理应用基本信息、管理应用的版本列表(包括versionCode、versionName、发版日期等) 。

- 更新应用:选择应用上传更新包,配置更新信息及策略。

- 任务管理:管理更新任务、定时任务。一个app有且只有一个运行中的更新任务,可以有多个定时任务。

- 测试机管理:查看管理测试机列表,用于。测试机的标识是以deviceId及MAC地址为判断依据。

- 用户管理:管理用户权限。

- 操作日志:查看管理操作日志。

2、 服务端流程

(1)在WebConsole配置更新信息和策略及上传更新包。将更新信息及策略保存至DB,将更新包保存至FS。

更新信息:版本(versionName,versionCode)、大小、包名、MD5、签名SHA1、更新日志等。其中版本、大小、包名、MD5、签名SHA1信息可通过对上传文件解析自动得到,并且通过对比包名和签名SHA1(忽略大小写)判断上传文件是否合法 。

更新策略:

1)低版本强制更新:设定一个版本(versionCode),在这个版本及之前版本的app必须进行更新。

2)定时更新:设定一个时间,到时自定启动更新任务。注意在后台有且只有一个运行中的更新任务,当启动新任务则之前的任务自动取消。但是创建一个定时任务,在到时之前上一个运行中的更新任务依然有效。

3)测试阶段:默认开启,用于正式更新前进行更新测试,可在任务管理进行切换。当开启测试阶段,只有在测试机列表中的才会进行更新。

(2)客户端请求Server,传入客户端的包名、版本等信息。Server与DB存储的信息比较,如果需要更新则返回更新包的url及更新信息,否则返回不更新。

346a898381a74196b7b7086444dacc5b.png

Server流程

验证请求:主要验证客户端的请求参数。首先验证参数齐全切不为空,否则为无效请求;然后通过包名和签名SHA1(忽略大小写) 判断是否为官方应用,非官方应用不允许更新,返回非官方错误码。

对比版本:判断客户端是否为最新版本,是则无需升级。

测试阶段:判断更新任务是否是测试阶段。如果是测试阶段则判断客户端是否为测试机,是则升级,否则不升级。

强制更新:判断客户端版本是否不高强制更新的版本,是则进行强制更新,否则非强制更新。

3、交互协议

Request:

{

"pkgName": "com.xxx.xxx",

"versionCode": 1,

"versionName": "1.0.0",

"signedSHA1": "xx:xx:xx:xx:xx",

"deviceKey": "xxxxxxx"

}

其中signedSHA1的校验注意忽略大小写;deviceKey用于判断测试机,由deviceId和MAC地址组合而成的唯一校验码

Response:

{

"update": true,

"msgCode": 1,

"msg": "已是最新",

"data": {

"pkgName": "com.xxx.xxx",

"versionCode": 2,

"versionName": "1.0.2",

"updateInfo": "优化xxxx",

"signedSHA1": "xx:xx:xx:xx:xx",

"forceVersion": 1,

"forceUpdate": false,

"apkSize": 123143,

"md5": "xxxxxxx",

"apkUrl": "http://www.xxx.xxx/xx.apk"

}

}

其中msgCode和msg是没有更新的原因;forceUpdate是否强制更新;forceVersion表示这个版本及之前版本的app都需要强制更新,只是forceUpdate的一个补充;signedSHA1和md5的校验注意忽略大小写。

msgCode-msg:

0-更新

1-已是最新版本

2-更新请求失败,请重试。

3-非官方应用,请卸载后到官网下载安装。

4-新版本马上到来,请稍后再试。(测试阶段)

4、客户端流程

3b8454e47b06ac8fbc5f00d0124c7056.png

(1)非官方应用:弹出不可关闭的提示弹窗,提示用户卸载当前应用,去官网下载官方版本。

(2)手动更新:app启动会自动检查更新,另外用户可以在设置中手动检查更新。手动检查更新结果必须反馈给用户,自动检查更新要保证不影响用户操作。

(3)忽略更新:读取本地存储,判断用户是否已经忽略本版本。

(4)强制更新:弹出不可关闭的提示弹窗,提示版本过低,必须更新后使用。

(5)正常更新:提供更新、取消两种操作及忽略选项。选中忽略取消更新则在本地进行存储。

(6)下载校验:校验文件的大小、md5,保证文件的合法性正确性。如果校验失败则删除已下载文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Storm编程入门API系列之Storm的可靠性的ACK消息确认机制

概念,见博客 Storm概念学习系列之storm的可靠性 什么业务场景需要storm可靠性的ACK确认机制? 答:想要保住数据不丢,或者保住数据总是被处理。即若没被处理的,得让我们知道。 public void nextTuple() {num;System.out.…

iOS网络编程开发-数据加密

iOS网络编程开发-数据加密 一、简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题。 如:可以利用软件(比如Charles)设置代理服务器&am…

图片向上滚动字幕代码html,如何通过制作滚动字幕的软件实现这种片尾的向上滚动字幕效果...

如何制作滚动字幕 特殊滚动类字幕制作 向上向下向左向右滚动字幕制作效果 含拖动和消失全程 真是酷B了爽呆了,赶快学习吧!电影、连续剧等影视作品片尾,都会在播放片尾曲时,出现向上滚动的字幕,显示演员表、导演、编剧等…

【图片服务器】搭建Nginx图片服务器

一、安装Nginx 二、安装vsftpd 三、开始搭建Nginx图片服务器 1、效果 例如:图片通过ftp服务上传到/home/ftpuser/www/images目录下,我想通过访问Nginx服务器来访问ftp目录下的图片文件,该url为http://192.168.128.128/images/xxx.jpg。即使用…

html怎么让方块自动旋转,如何使用纯CSS实现一个圆环旋转错觉的动画效果(附源码)...

本篇文章给大家带来的内容是关于如何使用纯CSS实现一个圆环旋转错觉的动画效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。效果预览源代码下载https://github.com/comehope/front-end-daily-challenges代码解读定义 dom&…

同志亦凡人第五季/全集BQueer As Folk 5迅雷下载

同志亦凡人 第五季 Queer as Folk Season 5 (2005) 本季看点:这是一群生活在匹兹堡男人和男人,女人和女人的故事。在他们的王国里有各色人物。王国的国王Brian(葛尔?哈罗德 Gale Harold 饰),只追求性不问爱&#xff1…

html怎么使图片无法另存为,如何禁止图片另存为?禁止网页另存为到本地的方法...

在很多企事业单位,处于商业机密保护的需要,常常需要禁止一些文件格式的“另存为”功能,防止通过“另存为”将文件另行保存,据为己有的目的;尤其是在局域网中访问服务器共享文件的时候,常常需要禁止将共享文…

正益工场为京西创客工场输送双创“软”实力

12月30日,中关村门头沟科技园“京西创客工场”正式揭牌,这里将成为京西“生态科创”的聚集地。正益工场作为唯一入驻的“移动互联网”双创生态平台,将为双创输送“移动技术移动模式”等软实力。北京市副市长隋振江、市政协、中关村管委会等领…

几种服务器端IO模型的简单介绍及实现(转载)

作者:阿凡卢 出处:http://www.cnblogs.com/luxiaoxun/服务器端几种模型: 1、阻塞式模型(blocking IO) 我们第一次接触到的网络编程都是从 listen()、accpet()、send()、recv() 等接口开始的。使用这些接口可以很方便的…

2021年高考成绩查询襄阳状元,大胆猜测一下,2021年高考,湖北省文理状元会花落谁家?...

随着2021年高考的逼近,考生进入紧张有序的复习中,家长也在为孩子筹谋着哪所学校更适合,作为吃瓜群众的我们,可能更关注今年湖北省的文理科状元会花落谁家,要知道,一所学校如果可以出现一名高考状元&#xf…

为什么写Java程序需要接口

为什么写Java程序需要接口 我之所以以这个作为标题,并不是为了玩噱头,讲一些似是而非的空话,还是以探索加发现, 追本溯源的讲解一下为什么Java需要接口,怎么理解,怎么用它。 首先接口并不是Java才有的&…

《领域特定语言》一1.5使用代码生成

1.5使用代码生成 在迄今为止的讨论中,要处理DSL,组装“语义模型”(第11章),然后执行语义模型,提供我们希望从控制器得到的行为。在语言圈子里,这种方式称为解释(interpretation&…

SVG 基础图形

SVG 基础图形 SVG包含了以下的基础图形元素&#xff1a; 矩形&#xff08;包括可选的圆角&#xff09;&#xff0c;使用<rect>元素创建圆形&#xff0c;使用<circle>元素创建椭圆形&#xff0c;使用<ellipse>元素创建直线&#xff0c;使用<line>元素创…

枣庄三中高考2021成绩查询,2021枣庄中考成绩查询系统入口

2021枣庄中考成绩查询系统入口2021-05-20 19:11:35文/王佳慧2021年&#xff0c;枣庄的中考时间快到了&#xff0c;本文分享了枣庄中考成绩查询入口&#xff0c;系统开通后考生可登陆查询成绩。枣庄中考成绩查询入口志愿填报须知1.录取标准&#xff1a;提前批、第一批、第三批学…

移动端”宴席知多少

转载(http://adt.aicai.com/index.php/archives/179/) 瞎折腾移动端的项目已经很长一段时间了&#xff0c;并不像其它企业一样&#xff0c;可以有项目组去完成&#xff0c;基本都是一个人瞎尝试&#xff0c;时而web&#xff0c;时而web app。恍恍惚惚过了这段岁月&#xff0c;也…

快速的取整方法(~~)

为什么80%的码农都做不了架构师&#xff1f;>>> 最近看一篇js装逼小技巧————双波浪号的妙用(将内容转化为数字,或者小数取整)&#xff0c;但是本身我的JavaScript水平比较低对其底层操作和其使用范围不甚了解&#xff1b;通过翻阅资料现进行简单的整理。 ###装…

git log友好显示

查看commit 提交日志 $ git log $git log --prettyoneline $git reflog 显示所有提交记录&#xff0c;包括已经回退的提交&#xff0c;如图&#xff1a;提交了abc 和 bb 然后回退到 abc   $git log 只显示abc提交 可以使用 $git reset --hard commit号 回退到bb git reflog…

南理工计算机技术专业学位,南京理工大学计算机技术(专业学位)考研难吗

很多考生在准备南京理工大学计算机技术(专业学位)考研难吗&#xff1f;是考研报考的时候都会产生这样的疑问&#xff1a;这个专业的研究生好吗&#xff1f;适合我吗&#xff1f;对我以后的人生和职业会有帮助吗&#xff1f;考生在准备南京理工大学计算机技术(专业学位)专业考研…

《分布式系统:概念与设计》一2.3.2 体系结构模式

2.3.2 体系结构模式 体系结构模式构建在上述讨论过的相对原始的体系结构元素之上&#xff0c;提供组合的、重复出现的结构&#xff0c;这些结构在给定的环境中能运行良好。它们未必是完整的解决方案&#xff0c;但当与其他模式组合时&#xff0c;它们会更好地引导设计者给出一…

javascript sort()实现元素json对象的排序

看以下代码&#xff1a; var s [ { name: "Robin Van PurseStrings", age: 30 } ,{ name: "Theo Walcott", age: 24 } ,{ name: "Bacary Sagna", age: 28 } ].sort(function(obj1, obj2) {// 实现增序排列&#xff1a;前者的 age 小于后者…