小程序強制自動更新

(3)強制更新官方版

背景

此前有開發者反饋小程序發布新版本后,新版本覆蓋率比較慢,因為小程序的更新機制是異步的,部分用戶不會馬上應用上新版本。

小程序啟動會有兩種情況,一種是「冷啟動」,一種是「熱啟動」。 假如用戶已經打開過某小程序,然后在一定時間內再次打開該小程序,此時無需重新啟動,只需將后臺態的小程序切換到前臺,這個過程就是熱啟動;冷啟動指的是用戶首次打開或小程序被微信主動銷毀后再次打開的情況,此時小程序需要重新加載啟動。

小程序的異步更新發生在冷啟動過程,當發現新版本后,會異步下載新版本的代碼包,但不會馬上應用上最新版本,需要等小程序下一次冷啟動,才會應用上新版本。

解決思路

為了解決這個問題,我們內部也經歷了數個方案的討論,這里簡單介紹下:

1. 同步檢查更新(放棄):可能是最直接的解決思路,但主要問題是會影響小程序的啟動速度,當下小程序的更新迭代是非常頻繁的,部分用戶可能每次啟動都命中更新,如果需要同步檢查更新+同步下載新的版本,那將會影響這部分用戶的啟動體驗。

2. 模塊熱替換(放棄):從技術上來說,這是最好的方案,小程序運行起來后,在打開新頁面時,馬上應用新版本里的頁面,但這就會存在新舊邏輯、頁面共存問題,對于開發者來說,反而更不好處理,特別是涉及到全局變量時,情況會更復雜,對于我們已有的框架來說,也是一個大挑戰,不過這個也是我們之后努力的方向。

3. 定時 check 新版本(目前方案):6.6.3 及以上版本的客戶端,會定時 check 最近使用過的小程序是否有發布新版本;如果有,下次打開的時候會同步更新新版本再打開。這可以保證在新版本發布 24 小時后,所有小程序都能使用最新版本。(這部分是微信客戶端自身優化,開發者無需關心)

4. 異步更新 + 強制更新(目前方案):同步檢查更新與模塊熱替換兩者之間的折衷方案,即還是維持異步更新機制,在異步下載完小程序代碼包后,提供重啟小程序的能力,這樣在遇到緊急問題時可以馬上解決。

異步更新 + 強制更新方案介紹

從基礎庫 1.9.90 開始,我們提供了?wx.getUpdateManager?接口,使用該接口,可以獲知是否有新版本小程序、新版本是否下載好以及應用新版本的能力。

當小程序冷啟動時,會自動向微信后臺請求新版本信息,如果有新版本,會馬上觸發新版本的下載。開發者可以通過 wx.getUpdateManager,獲知當前更新的狀態。

wx.getUpdateManager 接口會返回一個 UpdateManager 實例,UpdateManager 包含了三個回調:

1. onCheckForUpdate:當小程序向后臺請求完新版本信息,會通知這個版本告知檢查結果
2. onUpdateReady:當新版本下載完成,會回調這個事件
3. onUpdateFailed: 當新版本下載失敗,會回調這個事件

還有重啟應用新版本的接口:

1. applyUpdate:當新版本下載完成(onUpdateReady),調用該方法會強制當前小程序應用上新版本并重啟

具體示例:

// wx.getUpdateManager 在 1.9.90 才可用,請注意兼容
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function?(res) {
?// 請求完新版本信息的回調
?console.log(res.hasUpdate)
})
updateManager.onUpdateReady(function?() {
?wx.showModal({
? ?title:?'更新提示',
? ?content:?'新版本已經準備好,是否馬上重啟小程序?',
? ?success:?function?(res) {
? ? ?if?(res.confirm) {
? ? ? ?// 新的版本已經下載好,調用 applyUpdate 應用新版本并重啟
? ? ? ?updateManager.applyUpdate()
? ? ?}
? ?}
?})
})
updateManager.onUpdateFailed(function?() {
?// 新的版本下載失敗
})

更詳細信息可以參考?UpdateManager 的詳細文檔

最佳實踐

從用戶體驗上來說,我們還是建議只在非常必要時才強制用戶重啟更新,例如出現線上緊急 BUG。通常情況下,可以選通過?wx.showModal?彈出選擇框讓用戶選擇是否重啟更新(實現請參考示例代碼)。

如何調試

最新版本的微信開發者工具提供了強制更新的調試能力,通過編譯模式 - 編輯編譯模式 - 勾上「下次編譯時模擬更新」即可在開發者工具上調試強制更新功能。

?

鏈接:https://developers.weixin.qq.com/community/develop/doc/000c2430d30b70251e86f0a0256c09

轉載于:https://www.cnblogs.com/zhoudawei/p/10494108.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394864.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394864.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394864.shtml

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

相關文章

聯想m7400pro更換墨粉盒怎么清零_佳能打印機怎么換墨水 佳能打印機換墨水注意事項【詳解】...

佳能打印機是我們辦公室用品中比較常見的一個品牌,作為國際知名品牌,其質量也是非常有保障的。在使用的時候打印機沒有墨是經常會遇見的。這時候我們就需要更換墨水盒了。但很多不知道具體步驟,或者沒有注意相關細節,導致換墨水盒…

oracle數據庫連接數超了,oracle數據庫當前和最大連接數

1、查詢oracle的連接數select count(*) from v$session;2、查詢oracle的并發連接數select count(*) from v$session where statusACTIVE;3、查看不同用戶的連接數select username,count(username) from v$session where username is not null group by username;4、查看所有用戶…

MySQL Workbench導出數據庫

步驟: 1. 打開mysql workbench,進入需要導出的數據庫,點擊左側欄的【Management】tab鍵。 2. 點選要輸出的數據庫 點擊【Data Export】選在要輸出的數據庫選擇是否輸出存儲過程和函數,事件,觸發器 點擊Start Export3. …

django 傳遞中文_如何在Django中建立消息傳遞狀態

django 傳遞中文by Ogundipe Samuel由Ogundipe Samuel 如何在Django中建立消息傳遞狀態 (How to Build a Message Delivery Status in Django) Today, we will make a real-time message delivery status framework with Django and Pusher.今天,我們將使用Django和…

軟鏈接與硬鏈接

文件引用模型 在linux中,一切皆文件,而文件包含元數據(metedata)和用戶數據(user data)。元數據中的inode號是系統標識和獲取用戶數據的唯一憑證,而文件名僅是為了方便用戶記憶和使用。為了管理…

c++ 數組的輸入遇到特定字符停止輸入_C語言 第4章-字符串和格式化輸入/輸出

#include 用數組name儲存字符串,name數組有40個字節,每個字節儲存一個字符值。在scanf()函數中,輸入字符串name沒有&前綴。C預處理器把字符常量DENSITY定義為62.4。strlen()獲取字符串長度。1. 字符串1.1. char類型數組雙引號標記字符串&…

vue3+typescript引入外部文件

vue3typescript中引入外部文件有幾種方法 &#xff08;eg:引入echarts&#xff09; 第一種方法&#xff1a; 1 indext.html中用script引入 <div id"app"></div><script src"https://cdn.bootcss.com/echarts/4.2.1-rc1/echarts-en.common.min.js…

在哪能找到陌生人聊騷_如何說服陌生人幫助您找到工作

在哪能找到陌生人聊騷by Alex Lacey通過亞歷克斯萊西 找工作嗎&#xff1f; 這是說服陌生人幫助您找到一個人的方法 (Looking for a job? Here’s how to convince strangers to help you find one) 我過去獲得40個推薦的7個步驟 (The 7-step process that I used to get 40 …

Python基礎 day2

Python基礎 一、Python的數據類型 1、int(整型) 在32位機器上&#xff0c;整數的位數為32位&#xff0c;取值范圍為-2**31&#xff5e;2**31-1&#xff0c;即-2147483648&#xff5e;2147483647&#xff0c;而.在64位系統上&#xff0c;整數的位數為64位&#xff0c;取值范圍為…

matlab 文件指針回到開頭,[c/c++] 文件指針位置回到文件開頭(rewind)及行開頭(ftell+fseek)...

待讀入文件1.greenteemo2.csdn3.blog代碼&#xff0c;詳細說明見注釋#include #define LENGTH_OF_LINE 1024int main(){FILE *fp fopen("file.txt", "r"); // 打開文件char line[LENGTH_OF_LINE];while( fgets(line, LENGTH_OF_LINE, fp) ){printf("…

python全棧開發優勢_Python全棧開發多少錢?學Python價格貴嗎?

Python全棧開發培訓多少錢?學習Python是大家進入編程世界的理想之選&#xff0c;而且Python也是一門非常受歡迎的編程&#xff0c;可以從事的領域有很多。 從目前市場上的行情來說&#xff0c;一般情況下Python培訓的費用在一萬五到兩萬元之間的&#xff0c;以后可能會更高&am…

gym101808 E

提問&#xff1a;我是什么品種的傻逼&#xff1f; 哇看到積水興高采烈啊。然后就走上了一條不歸路。 為什么不歸呢&#xff0c;因為我這個法子就是不對的&#xff0c;我總是在想很多很多點圍成的一塊區域&#xff0c;然后求這一塊區域的面積。 然后嘗試了各種掃描方法&#xff…

WordPress中纏結的自定義數據世界

by Kamil Grzegorczyk通過卡米爾(Kamil Grzegorczyk) WordPress中纏結的自定義數據世界 (The Tangled World of Custom Data in WordPress) 降低風險并管理您的自定義字段 (Reducing Risk and Managing Your Custom Fields) Have you ever wondered how to properly name keys…

【站點部署】解析二級域名并部署站點

開設原因 : 近期在學健身, 上一份工作辭掉后, 在北京找了家私人教練培訓學校, 進行為期四個月的健身培訓, 這個比在健身房找私教專業多了, 被健身房私人教練坑慘了, 說多了都是淚, 已經培訓了將近一個半月, 學習了基礎私教, 普拉提, 這在學習康復課程, 之后還有功能性 和 綜合格…

pip如何安裝到Linux服務器,linux中pip安裝步驟與使用詳解

1、pip下載安裝1.1 pip下載代碼如下# wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5834b2904f92d46aaa333267fb1c922bb" --no-check-certificate1.2 pip安裝代碼如下# tar -xzvf pip-1.5.4.tar.gz# cd pip-1.5.4# python setup.py inst…

python中列表實現去重使用_Python實現嵌套列表去重方法示例

發現問題 python嵌套列表大家應該都不陌生&#xff0c;但最近遇到了一個問題&#xff0c;這是工作中遇到的一個坑&#xff0c;首先看一下問題 raw_list [["百度", "CPY"], ["京東", "CPY"], ["黃軒", "PN"], [&q…

Android 開發 存儲目錄的詳解

Android 開發 存儲目錄的詳解 簡介   Android設備,有3個地方的文件存儲位置,他們分別是:  內部存儲空間(用戶無法瀏覽到此目錄)  外部存儲空間(就是手機自身的文件管理目錄,用戶可以瀏覽)  SD卡的存儲空間(需要插入T卡)  SharedPreferences目錄  存儲數據庫DB目錄內…

大數據項目交付國標_在緊迫的期限內交付大型項目

大數據項目交付國標by Paul McGillivray保羅麥吉里夫瑞(Paul McGillivray) 在緊迫的期限內交付大型Web項目 (Delivering a big web project for a tight deadline) This week we launched the first phase of a large website for a fast-growing business, ‘Jump In’. The …

CentOS 安裝MySQL(rpm)提示錯誤Header V3 DSA/SHA1 Signature

提示錯誤&#xff1a;Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY error: Failed dependencies 錯誤原因&#xff1a;這是由于yum安裝了舊版本的GPG keys造成的 解決辦法&#xff1a;后面加上--force --nodeps 原文&#xff1a; 摘要&#xff1a; CentOS安裝rpm安裝…

linux系統文件的復制,linux操作系統文件復制操作

《linux操作系統文件復制操作》由會員分享&#xff0c;可在線閱讀&#xff0c;更多相關《linux操作系統文件復制操作(5頁珍藏版)》請在人人文庫網上搜索。1、網絡操作系統”課程實驗報告名:號:業:計算機科學與技術間:2012年5月 日師:北京聯合大學-信息學院編制Linux-文件的系統…