DCloud_UNI_CHB
DCloud_UNI_CHB
  • 发布:2017-11-14 01:02
  • 更新:2023-10-09 13:51
  • 阅读:32404

升级检测 - wap2app教程

分类:wap2app

wap2app项目的发行方式及对应的升级模式:

  • 发行成原生安装包,类似5+ App安装包,需开发者自己处理升级更新;
  • 发行到流应用平台,,流应用有内置的升级逻辑,开发者只需要将最新版本提交到流应用平台即可,无需单独开发.

本文主要讲解发行成原生安装包的升级检测实现,给出一种实现示例(仅供参考,开发者可以自定义逻辑实现),主要分为两个部分:

  • 客户端:App启动时,向服务器上报当前版本号,根据服务器响应结果决定是否提醒用户升级
  • 服务端:保存App最新版本号,根据客户端上报的版本号,比对后决定是否需要升级,若需升级则返回升级信息(rease notes、更新包地址等);

接口约定

如下数据接口约定仅为示例,开发者可以自定义接口参数。

请求地址:http://www.example.com/check/update

请求方法:GET

请求数据:

{  
    "appid": plus.runtime.appid,  
    "version": plus.runtime.version  
}

响应数据:

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

Tips:若应用已经是最新版本,无需升级,则服务端仅需返回status字段(并将值设为0),其它字段无需返回;

客户端实现

在app.js的onLaunch事件中,发起升级检测请求,如下:

/**  
* 当wap2app初始化完成时,会触发 onLaunch(全局只触发一次)  
* @param {Object} options  
*/  
onLaunch: function(options) {  
    //TODO wap2app其它初始化代码  

    /************升级检测代码开始********** */  
    var ua = navigator.userAgent;  
    //Html5Plus环境,但不是流应用环境  
    if(ua.indexOf('Html5Plus')>-1 && ua.indexOf('StreamApp')==-1){  
        var url = "http://www.example.com/check/update";//检查更新地址  
        var req = {//升级检测数据  
            "appid": plus.runtime.appid,  
            "version": plus.runtime.version  
        };  

        wap2app.ajax.get(url, req, function(rsp) {  
            if(rsp && rsp.status){  
                //需要更新,提示用户  
                plus.nativeUI.confirm(rsp.note, function(event) {  
                    if(0 == event.index) {//用户点击了“立即更新”按钮  
                        plus.runtime.openURL(rsp.url);  
                    }  
                }, rsp.title, ["立即更新", "取  消"]);  
            }              
        });  
    }  
    /************升级检测代码结束********** */  
}

服务端实现

推荐使用通过uniCloud的云函数模板,快速实现升级检查逻辑,详情参考:https://ext.dcloud.net.cn/plugin?id=2226

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

$appid = $_GET['appid'];  
$version = $_GET['version'];//客户端版本号  
$rsp = array('status' => 0);//默认返回值,不需要升级  
if (isset($appid) && isset($version)) {  
    if($appid=="__W2A__m.example.com"){//校验appid  
        //这里是示例代码,真实业务上,最新版本号及relase notes可以存储在数据库或文件中  
        if($version !== "1.0.1"){  
            $rsp['status'] = 1;  
            $rsp['title'] = "应用更新";  
            $rsp['note'] = "修复bug1;\n修复bug2;";//release notes,支持换行  
            $rsp['url'] = "http://www.example.com/wap2app.apk";//应用升级包下载地址  
        }  
    }  
}   
exit(json_encode($rsp));
6 关注 分享
lhyh yaho Trust [已删除] a***@qq.com 峰哥很帅

要回复文章请先登录注册

h***@163.com

h***@163.com

ios热更怎么解决?
2023-10-09 13:51
b***@qq.com

b***@qq.com

下载文件会变成.txt,且大小变成几k,提示下载失败,复制链接到浏览器是可以下载安装的
2023-02-15 12:42
灰太狼的诱惑

灰太狼的诱惑

回复 DCloud_UNI_CHB :
plus.nativeUI.confirm 现在不支持\n换行了?
2022-03-02 21:21
门外汉爱好者

门外汉爱好者

回复 门外汉爱好者 :
把上面客户端实现的代码加到 app.js的onLaunch里面
我是创建的PHP文件,把下面代码放到php里面 注:php路径跟app.js里面路径一致

<?php

$appid = $_GET['appid'];
$version = $_GET['version'];//客户端版本号
$rsp = array('status' => 0);//默认返回值,不需要升级
if (isset($appid) && isset($version)) {
if($appid=="wap2app的ID"){//校验appid
//这里是示例代码,真实业务上,最新版本号及relase notes可以存储在数据库或文件中
if($version < "1.0.1"){//每次新版本升级修改版本号及下面apk下载地址就可
$rsp['status'] = 1; //升级标志,1:需要升级;0:无需升级
$rsp['title'] = "升级";
$rsp['note'] = "升级原因";//release notes,支持换行
$rsp['url'] = "https://baidu.com/s.apk";//这个是最新的应用升级包下载地址
}
}
}
exit(json_encode($rsp));
2021-12-03 13:17
门外汉爱好者

门外汉爱好者

确实讲解的不是很清楚 纯小白不太好入手
2021-12-03 13:11
灰太狼的诱惑

灰太狼的诱惑

搞了半天没有用啊
2021-06-07 17:53
萧

plus.nativeUI.confirm 现在不支持\n换行了
2020-10-28 10:37
2***@qq.com

2***@qq.com

这个问题我解决了,我是用post解决的他这个不行。
2020-05-20 10:15
3***@qq.com

3***@qq.com

没有解决升级检测问题可以看下,算是实战演示,实现过程相当简单。http://www.360wifi.cc/1394.html
2020-05-04 16:15
3***@qq.com

3***@qq.com

这个问题我已经弄好了,不会的加我微信吧 17306370021
2020-04-07 12:00