> 使用 uni-app 開發,可將代碼編譯到iOS、Android、微信小程序等多個平臺,升級時也需考慮多平臺同步升級。
> * uni-app發布為小程序的升級模式較簡單,只需將開發完的代碼提交小程序后臺,待審核通過后用戶將自動升級
> * iOS/Android App 的升級需開發者自己處理,本文主要簡介 App 的整包升級模式。
> App熱更新(升級包方式)另見文檔:http://ask.dcloud.net.cn/article/35667
[TOC]
## 實現流程
> 請求地址:https://www.example.com/update
> 請求數據:
~~~json
{
"appid": plus.runtime.appid,
"version": plus.runtime.version
}
~~~
> 響應數據:
~~~json
{
"status":1,//升級標識,0:無需升級;1:建議更新;2:強制更新
"note": "修復bug1;\n修復bug2;",//release notes
"url": "http://www.example.com/uniapp.apk" //更新包下載地址
}
~~~
## 客戶端實現
> App啟動時,向服務端上報當前版本號,服務端判斷是否提示升級。
> 在App.vue的onLaunch中,發起升級檢測請求
### 建議更新
~~~javascript
onLaunch: function () {
//#ifdef APP-PLUS
var server = "https://www.example.com/update"; //檢查更新地址
var req = { //升級檢測數據
"appid": plus.runtime.appid,
"version": plus.runtime.version
};
uni.request({
url: server,
data: req,
success: (res) => {
if (res.data.status === 1) {
uni.showModal({ //提醒用戶更新
title: "更新提示",
content: res.data.note,
success: (res) => {
if (res.confirm) {
plus.runtime.openURL(res.data.url);
}
}
})
}
}
})
//#endif
}
~~~
> **注意:** App的升級檢測代碼必須使用條件編譯,否則在非App環境由于不存在plus相關API,將會報錯。
### 強制更新
> 參考上面的方法,把showModel換成自己寫的一個彈窗,只有升級按鈕,無關閉按鈕。這樣就強制更新了。
> 注意uniapp的app.vue不能引入任一組件,不然打包就會報錯。
> 市場里也有很多插件,也可以直接使用,如:https://ext.dcloud.net.cn/plugin?id=543 (可分安裝包,升級包。安卓是在應用內下載,不跳轉web)
## 服務端實現
> 根據客戶端上報的版本號,比對服務端最新版本號,決定是否需要升級,若需升級則返回升級信息(rease notes、更新包地址等)
~~~
header("Content-type:text/json");
$appid = $_GET["appid"];
$version = $_GET["version"]; //客戶端版本號
$rsp = array("status" => 0); //默認返回值,不需要升級
if (isset($appid) && isset($version)) {
if ($appid === "__UNI__123456") { //校驗appid
if ($version !== "1.0.1") { //這里是示例代碼,真實業務上,最新版本號及relase notes可以存儲在數據庫或文件中
$rsp["status"] = 1;
$rsp["note"] = "修復bug1;\n修復bug2;"; //release notes
$rsp["url"] = "http://www.example.com/uniapp.apk"; //應用升級包下載地址
}
}
}
echo json_encode($rsp);
exit;
~~~
## 常見問題
版本檢測需要打包app,真機運行基座無法測試。因為真機運行的plus.runtime.version是固定值。
> 參考文檔:
> https://www.jianshu.com/p/219fd6b914d3
> https://ask.dcloud.net.cn/article/34972
> https://ask.dcloud.net.cn/article/35667)
- 基礎知識
- UNI核心介紹
- flex布局
- 生命周期
- 全局方法
- 組件定義
- 自定義組件
- 全局組件
- 組件之間的數據傳輸
- 條件編譯
- 自定義頭部
- 節點信息 (SelectorQuery)
- vuejs基礎語法
- 頁面跳轉以及參數傳遞
- 事件的監聽注冊以及觸發
- css3動畫
- block的妙用
- mixin (混入)
- uniapp快捷鍵
- vuex狀態管理
- 實用功能
- 獲取服務提供商
- 啟動頁 / 啟動界面
- 引導頁
- tabbar配置
- 頭部導航欄基礎設置
- 上拉下拉(刷新/加載)
- 第三方登錄
- 第三方分享
- 推送通知 之 unipush
- scroll-view雙聯動
- 配置iOS通用鏈接(Universal Links)
- 本地緩存操作
- 升級/更新方案
- 熱更新
- 圖片上傳
- 搜索頁實現
- canvas繪圖助手
- 地圖定位
- 第三方支付————todo
- 分類輪播
- 清除應用緩存
- uniapp與webview的實時通訊
- 視頻-----todo
- 聊天----todo
- 長列表swiper左右切換
- 第三方插件
- uview
- mescroll
- uCharts (圖表)
- 無名 (更新插件)
- 第三方模版
- 自定義基座
- 打包發行
- 要封裝的方法
- 緩存 cache.js
- 請求接口 request.js
- 工具類 util.js
- 小程序登錄 xcxLogin.js
- 版本更新 update.js
- 優質插件
- 更新插件----todo
- 語音
- 語音識別 (含上傳)
- 百度語音合成播報接口
- 官方常用組建
- input 輸入框
- image 圖片
- audio 音頻
- picker 選擇器
- video 視頻
- scroll-view 滾動視圖