加载中...
  • uni-app 整包升级/更新方案

    注意:plus.runtime.appid,plus.runtime.version, plus.runtime.openURL() 在真机环境下才有效

    使用 uni-app 开发,可将代码编译到iOS、Android、微信小程序等多个平台,升级时也需考虑多平台同步升级。

    • uni-app发布为小程序的升级模式较简单,只需将开发完的代码提交小程序后台,待审核通过后用户将自动升级
    • iOS/Android App 的升级需开发者自己处理,本文主要简介 App 的整包升级模式。
    • App 的资源热更新另见文档:http://ask.dcloud.net.cn/article/35667
      接口约定
      如下数据接口约定仅为示例,开发者可以自定义接口参数。

    请求地址:https://www.example.com/update

    请求方法:GET

    请求数据:

    1
    2
    3
    4
    {  
    "appid": plus.runtime.appid,
    "version": plus.runtime.version
    }

    响应数据:

    1
    2
    3
    4
    5
    {  
    "status":1,//升级标志,1:需要升级;0:无需升级
    "note": "修复bug1;\n修复bug2;",//release notes
    "url": "http://www.example.com/uniapp.apk" //更新包下载地址
    }

    客户端实现
    App启动时,向服务端上报当前版本号,服务端判断是否提示升级。

    在App.vue的onLaunch中,发起升级检测请求,如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    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.statusCode == 200 && res.data.status === 1) {
    uni.showModal({ //提醒用户更新
    title: "更新提示",
    content: res.data.note,
    success: (res) => {
    if (res.confirm) {
    plus.runtime.openURL(res.data.url);
    }
    }
    })
    }
    }
    })
    //#endif
    }

    注意:App的升级检测代码必须使用条件编译,否则在微信环境由于不存在plus相关API,将会报错。
    ##服务端实现
    根据客户端上报的版本号,比对服务端最新版本号,决定是否需要升级,若需升级则返回升级信息(rease notes、更新包地址等)

    开发者可以根据服务端开发语言,自己实现升级检测逻辑,如下是一个php示例代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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://ask.dcloud.net.cn/article/34972

    上一篇:
    styled-components的配置和使用
    下一篇:
    DOM级别
    本文目录
    本文目录