uni-app熱更新與整包更新

整包更新:應(yīng)用在大版本更新叮阅,內(nèi)容更新較多時使用
熱更新:應(yīng)用在小版本更新,內(nèi)容更新較少時

整體流程:

注: 1. plus.runtime 文檔見 https://www.html5plus.org/doc/zh_cn/runtime.html

  1. 對于不同設(shè)備類型身腻,可通過 plus.os.name.toLocaleLowerCase()獲取诗越。
  2. 我們apk存放在oss上,有一個增量更新的文件夾嘲恍,一個安卓apk的文件夾足画,蘋果版本在商店上架

一. 蘋果應(yīng)用更新

  1. 使用plus.runtime.getProperty方法獲取指定APPID對應(yīng)的應(yīng)用信息,主要獲取當(dāng)前app應(yīng)用版本號佃牛。
  2. 通過訪問https://itunes.apple.com/cn/lookup?id=${appId},獲取蘋果商店中應(yīng)用的版本號锌云。
  3. 對比版本號,蘋果商店版本 > 當(dāng)前pad版本時吁脱,有大版本更新(整包更新)桑涎,直接從蘋果商店下載新版本彬向。
  4. 對比版本號,蘋果商店版本 < 當(dāng)前pad版本時攻冷,沒有大版本更新(整包更新)娃胆,此時去訪問后端接口,查看是否有增量更新的版本等曼,如果有里烦,通過plus.runtime.install下載。

二. 安卓應(yīng)用更新

  1. 使用plus.runtime.getProperty方法獲取指定APPID對應(yīng)的應(yīng)用信息禁谦,主要獲取當(dāng)前app應(yīng)用版本號胁黑。
  2. 訪問后端接口查看(接口傳入上面的版本號),此時查詢的是大版本(整包)文件夾下的版本州泊,是否有最新版本丧蘸。
  3. 有大版本版本更新時,通過后端接口遥皂,拿到鏈接力喷,plus.runtime.openFile下載。
  4. 沒有大版本版本更新時演训,訪問后端接口查增量更新文件夾下弟孟,有沒有最新版本,如果有样悟,通過plus.runtime.install下載拂募。

代碼:
在項(xiàng)目主頁,每次進(jìn)來先檢查更新

// 更新檢測
checkUpdate () {
    plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
        const platform = plus.os.name.toLocaleLowerCase()
        if (platform === 'ios') {
            uni.request({
                url: `https://itunes.apple.com/cn/lookup?id=${appId}`,
                success: (res) => {
                    const info = res.data.results[0]    // 蘋果返回的產(chǎn)品詳情
                    let currentVersion = currentVer.replace(/\./g,'');
                    let newVersion = newVer.replace(/\./g,'');
                    // 蘋果商店最新版本 > 當(dāng)前pad版本 時窟她,有大新版本
                    if (newVersion > currentVersion) {
                        // 獲取更新內(nèi)容
                        this.getProductInfo();
                    } else {
                        // 如果沒有大版本更新没讲,去增量更新文件查找有沒有需要增量更新是文件
                        this.getIncremental();
                    }
                }
            })
        } else {
            this.server.checkVersion().then(async res => {
                if (res.code == 200) {
                    // 有大版本更新,獲取更新內(nèi)容礁苗,打開彈窗
                    if (res.data) {
                        // 獲取更新內(nèi)容
                        this.getProductInfo();
                    } else {
                        // 如果沒有大版本更新爬凑,去增量更新文件查找有沒有需要增量更新是文件
                        this.getIncremental();
                    }
                }
            })
        }
    })
},
// 點(diǎn)擊彈窗確認(rèn),點(diǎn)擊下載
confirm () {
    this.$refs.version.close();
    this.updateOfApk()
},
// 下載apk包
updateOfApk () {
    const platform = plus.os.name.toLocaleLowerCase()
    if (platform === 'ios') {
        // ios從蘋果商店下載
        plus.runtime.launchApplication({
            action: `itms-apps://itunes.apple.com/cn/app/id${appId}?mt=8`
        }, function (e) {
            console.log('Open system default browser failed: ' + e.message);
        })
    } else {
        // 安卓下載從后端獲取的oss上下載
        this.getUrlToOss()
    }
},

// 獲取當(dāng)前版本更新內(nèi)容
getProductInfo () {
    this.server.getProductDescription().then(res => {
        if (res.code === 200) {
            // 打開彈窗试伙,顯示更新內(nèi)容
            this.$refs.version.open()
        }
    })
},

// 增量更新
async getIncremental (currentVersion) {
    try {
        // 檢查小版本更新
        let res = await this.server.checkVersion()
        // res.data為false時嘁信,沒有有新版本
        if (!res.data) return
        // 有小版本更新,獲取下載地址疏叨,進(jìn)行增量更新
        let urlData = await this.server.downloadURL()
        // 接口報錯截止
        if (urlData.code !== 200) return
        // uni下載文件
        let downUrl = await this.uniDownLoadFile()
        // 接口報錯截止
        if (downUrl.statusCode !== 200) return
          // 下載文件
        plus.runtime.install(downUrl.tempFilePath, {
            force: false
        }, () => {
            plus.runtime.restart(); // 重啟項(xiàng)目
        }, (e) => {
            // 調(diào)用一個接口潘靖,將e返回咯
            console.log(e)
        });
    } catch (e) {
        console.log(e)
    }
},

// 安卓下載地址
async getUrlToOss () {
    try {
        let res = await this.server.downloadURL()
        if (res.code !== 200) return
        // uni下載文件
        let downUrl = await this.uniDownLoadFile(res.data)
        // 接口報錯截止
        if (downUrl.statusCode !== 200) {
            uni.showToast({
                title: this.$t('error.下載失敗'),
                duration: 2000,
                icon: 'none'
            });
            return
        }
        // 下載文件
        plus.runtime.openFile(downUrl.tempFilePath);
    } catch (e) {
        console.log(e, 'e')
    }
},

// uni的下載文件
uniDownLoadFile (data) {
    return new Promise((resolve, reject) => {
        uni.downloadFile({
            url: data,
            success: (res) => {
                resolve(res)
            },
            fail: (err) => {
                reject(err)
            }
        });
    })
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蚤蔓,隨后出現(xiàn)的幾起案子卦溢,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件单寂,死亡現(xiàn)場離奇詭異贬芥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)宣决,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門蘸劈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尊沸,你說我怎么就攤上這事威沫。” “怎么了洼专?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵棒掠,是天一觀的道長。 經(jīng)常有香客問我屁商,道長烟很,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任棒假,我火速辦了婚禮,結(jié)果婚禮上精盅,老公的妹妹穿的比我還像新娘帽哑。我一直安慰自己,他們只是感情好叹俏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布妻枕。 她就那樣靜靜地躺著,像睡著了一般粘驰。 火紅的嫁衣襯著肌膚如雪屡谐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天蝌数,我揣著相機(jī)與錄音愕掏,去河邊找鬼。 笑死顶伞,一個胖子當(dāng)著我的面吹牛饵撑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唆貌,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼滑潘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锨咙?” 一聲冷哼從身側(cè)響起语卤,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粹舵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钮孵,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年齐婴,在試婚紗的時候發(fā)現(xiàn)自己被綠了油猫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡柠偶,死狀恐怖情妖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诱担,我是刑警寧澤毡证,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站蔫仙,受9級特大地震影響料睛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜摇邦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一恤煞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧施籍,春花似錦居扒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至竿裂,卻和暖如春玉吁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腻异。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工进副, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悔常。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓敢会,卻偏偏與公主長得像,于是被迫代替她去往敵國和親这嚣。 傳聞我的和親對象是個殘疾皇子鸥昏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容