> 熱更新方式是使用生成wgt升級包方式,無需用戶手動點擊升級,即可靜默方式將應用升級到最新版
[TOC]
## 修改版本號
> 在manifest.json -> 基本配置 -> 將“應用版本名稱”、“應用版本號”進行修改

## 生成wgt升級包
> 菜單 -> 發行 -> 原生App-制作移動App資源升級包

## 服務端版本更新檢測接口
> 只是一個例子,具體邏輯自己實現
> 接口地址:http://www.example.com/update.php
~~~
<?php
$version = $_GET['version'];
if ($version == '1.0.0') {
echo json_encode([
'update' => 1,
'wgtUrl'=> 'http://www.example.com/1.0.2.wgt'
], true);
}else{
echo json_encode([
'update' => 0,
'wgtUrl'=> ''
], true);
}
~~~
## 客戶端檢測升級
> 在 App.vue 的 onLaunch 中檢測升級,代碼如下:
~~~
<script>
export default {
onLaunch: function() {
console.log('App Launch')
// #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) {
uni.request({
url: 'http://www.example.com/update.php',
data: {
version: widgetInfo.version,
name: widgetInfo.name
},
success: (result) => {
let data = result.data;
if (data.update && data.wgtUrl) {
uni.downloadFile({
url: data.wgtUrl,
success: (downloadResult) => {
console.log(downloadResult.statusCode)
if (downloadResult.statusCode === 200) {
console.log('您的版本過老('+widgetInfo.version+'),執行更新版本流程')
plus.runtime.install(downloadResult.tempFilePath, {
force: false
}, function() {
console.log('install success...');
plus.runtime.restart();
}, function(e) {
console.error('install fail...');
});
}
},
fail:(res) => {
console.log(res)
}
});
}
}
});
});
// #endif
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
}
}
</script>
~~~
## 不支持的情況
> * SDK 部分有調整,比如新增了 Maps 模塊等,不可通過此方式升級,必須通過整包的方式升級。
> * 原生插件的增改,同樣不能使用此方式。
> 對于老的非自定義組件編譯模式,這種模式已經被淘汰下線。但以防萬一也需要說明下,老的非自定義組件編譯模式,如果之前工程沒有 nvue 文件,但更新中新增了 nvue 文件,不能使用此方式。因為非自定義組件編譯模式如果沒有nvue文件是不會打包weex引擎進去的,原生引擎無法動態添加。自定義組件模式默認就含著weex引擎,不管工程下有沒有nvue文件。
## 關于熱更新是否影響應用上架
> Apple曾經禁止過jspatch,但沒有打擊其他的熱更新方案,包括cordovar、react native、DCloud。封殺jspatch其實是因為jspatch有嚴重安全漏洞,可以被黑客利用,造成三方黑客可篡改其他App的數據。
## 熱更新注意事項
> * 上架審核期間不要彈出熱更新提示
> * 熱更新內容使用https下載,避免被三方網絡劫持
> * 不要更新違法內容、不要通過熱更新破壞應用市場的利益,比如iOS的虛擬支付要老老實實給Apple分錢
> * 如果你的應用沒有犯這些錯誤,應用市場是不會管的。
> 參考資料:
> https://ask.dcloud.net.cn/article/35667
> https://ask.dcloud.net.cn/article/182
> https://www.jianshu.com/p/648dcd946aa4
- 基礎知識
- 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 滾動視圖