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.pswp.cn/news/257893.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257893.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257893.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

setSignVisible的修改

store傳入accountReducer 1.從cookie中獲取id,avatar,nickname.2.createStore(reducer, initState)傳入reducer,可以在頁面中state.accountReducer.current_account獲取 const middleware routerMiddleware(browserHistory); let initState {};if(Cookie.hasItem("id&qu…

DGbroker故障切換示例

1.主庫故障 SQL> startup ORACLE instance started.Total System Global Area 1068937216 bytes Fixed Size 2260088 bytes Variable Size 910164872 bytes Database Buffers 150994944 bytes Redo Buffers 5517312 bytes ORA-00205: e…

html 自動觸發 事件,js自動觸發事件自定義事件

在有些情況下,我們需要程序邏輯自動觸發元素的事件,例如js提供了click(), form提供了reset(),submit()等方法!在jquery中提供了trigger()方法幫助我們自動觸發事件,原理是什么呢?接下來讓我們一探究竟&…

Storm編程入門API系列之Storm的可靠性的ACK消息確認機制

概念,見博客 Storm概念學習系列之storm的可靠性 什么業務場景需要storm可靠性的ACK確認機制? 答:想要保住數據不丟,或者保住數據總是被處理。即若沒被處理的,得讓我們知道。 public void nextTuple() {num;System.out.…

關于 php mysql pdo cannot find driver 解決方案

1、下載 文件 或者 進入 在PHP源碼包中進入ext/pdo_mysql http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz 2、解壓文件tar zxvf PDO_MYSQL-1.0.2.tgz 3、配置和編譯文件cd PDO_MYSQL-1.0.2/usr/local/php/bin/phpize./configure –with-php-config/usr/local/php/bin/php-config…

iOS網絡編程開發-數據加密

iOS網絡編程開發-數據加密 一、簡單說明 1.說明 在開發應用的時候,數據的安全性至關重要,而僅僅用POST請求提交用戶的隱私數據,還是不能完全解決安全問題。 如:可以利用軟件(比如Charles)設置代理服務器&am…

Codeforces 821C - Okabe and Boxes

821C - Okabe and Boxes 思路&#xff1a;模擬。因為只需要比較棧頂和當前要刪除的值就可以了&#xff0c;所以如果棧頂和當前要刪除的值不同時&#xff0c;棧就可以清空了(因為下一次的棧頂不可能出現在前面那些值中)。 代碼&#xff1a; #include<bits/stdc.h> using n…

Java中forEach, 用來遍歷數組

這里的for是Java中forEach, 用來遍歷數組的。for(int i : d) 就是遍歷int型數組d的 每一次訪問數組d的時候讀取的數據放入int型的i中。和for(int i0;i<d.length();i)是一樣的&#xff0c;但是forEach的可用場合較多。public class e1 {public static void main(String[] …

HDU -2546飯卡(01背包+貪心)

這道題有個小小的坎&#xff0c;就是低于5塊不能選&#xff0c;大于5塊&#xff0c;可以任意選&#xff0c;所以就在初始條件判斷一下剩余錢數&#xff0c;然后如果大于5的話&#xff0c;這時候就要用到貪心的思想&#xff0c;只要大于等于5&#xff0c;先找最大的那個&#xf…

圖片向上滾動字幕代碼html,如何通過制作滾動字幕的軟件實現這種片尾的向上滾動字幕效果...

如何制作滾動字幕 特殊滾動類字幕制作 向上向下向左向右滾動字幕制作效果 含拖動和消失全程 真是酷B了爽呆了&#xff0c;趕快學習吧&#xff01;電影、連續劇等影視作品片尾&#xff0c;都會在播放片尾曲時&#xff0c;出現向上滾動的字幕&#xff0c;顯示演員表、導演、編劇等…

【圖片服務器】搭建Nginx圖片服務器

一、安裝Nginx 二、安裝vsftpd 三、開始搭建Nginx圖片服務器 1、效果 例如&#xff1a;圖片通過ftp服務上傳到/home/ftpuser/www/images目錄下&#xff0c;我想通過訪問Nginx服務器來訪問ftp目錄下的圖片文件&#xff0c;該url為http://192.168.128.128/images/xxx.jpg。即使用…

JavaScript數組去重

1、數組去重&#xff1b; Array類型并沒有提供去重復的方法&#xff0c;如果要把數組的重復元素干掉&#xff0c;那得自己想辦法&#xff1a; 方法一&#xff1a;利用indexOf方法&#xff1b; var aa[1,3,5,4,3,3,1,4] function arr(arr) {var result[]for(var i0; i<arr.le…

html怎么讓方塊自動旋轉,如何使用純CSS實現一個圓環旋轉錯覺的動畫效果(附源碼)...

本篇文章給大家帶來的內容是關于如何使用純CSS實現一個圓環旋轉錯覺的動畫效果&#xff0c;有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對你有所幫助。效果預覽源代碼下載https://github.com/comehope/front-end-daily-challenges代碼解讀定義 dom&…

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

同志亦凡人 第五季 Queer as Folk Season 5 (2005) 本季看點&#xff1a;這是一群生活在匹茲堡男人和男人&#xff0c;女人和女人的故事。在他們的王國里有各色人物。王國的國王Brian&#xff08;葛爾?哈羅德 Gale Harold 飾&#xff09;&#xff0c;只追求性不問愛&#xff1…

2016,請不要在公司混日子!

1、無論為誰打工&#xff0c;要為自己學東西&#xff0c;客觀上為公司創造價值。 我自己當年&#xff0c;無論我在方正給國內企業工作&#xff0c;還是我在雅虎給外國人工作&#xff0c;我都跟別人最大的不一樣&#xff0c;我從來不覺得我在給他們打工&#xff0c;我真的可能是…

數據庫作業[定時執行任務]的創建

--每月執行的作業 exec p_createjob jobnamemm,sqlselect * from syscolumns,freqtypemonth --每周執行的作業 exec p_createjob jobnameww,sqlselect * from syscolumns,freqtypeweek --每日執行的作業 exec p_createjob jobnamea,sqlselect * from syscolumns --每日執行的作…

《算法之道》精華 經典算法部分

《算法之道》精華 經典算法部分 本書作者鄒恒明&#xff0c;作者另有一本書《數據結構之弦》&#xff0c;以及《操作系統之哲學原理》都是非常好的書這本書能夠算得上是深入淺出&#xff0c;文筆非常好。作者加入了非常多自己的思考本文包含經典算法部分第十章 排序與次序 插入…

學生社團網站html,學生社團活動平臺的設計與實現.docx

PAGE 67學生社團活動平臺的設計與實現摘 要本系統立足于實現社團活動申請與審批、資源申請與審批等工作&#xff0c;面向高校中所有的社團&#xff0c;建立一個使用便捷、可靠的社團活動平臺&#xff0c;從而更方便地進行社團活動的申請、社團資源的申請及相應審批&#xff0c;…

tornado 學習筆記17 HTTPServerRequest分析

代表Http請求。 所有的屬性都是字符串型。 17.1 屬性 (1) method:請求方法類型&#xff0c;比如”GET”、”POST” (2) uri: 請求的uri (3) path:請求路徑&#xff0c;作為uri的一部分。 (4) query&#xff1a;查詢字符串&#xff1a;作為uri的一部分。 (5) version&#xff1a…

Android 動畫效果及Interpolator和AnimationListener的使用

轉載http://www.itzhai.com/android-animation-used-to-achieve-control-of-animation-effects-and-use-of-interpolator-and-animationlistener.htmlandroid:interpolator可能有很多人不理解它的用法&#xff0c;文檔里說的也不太清楚&#xff0c;其實很簡單&#xff0c;看下面…