DCloud_UNI_CHB
DCloud_UNI_CHB
  • 发布:2017-11-14 01:02
  • 更新:2019-04-18 14:40
  • 阅读:15418

升级检测 - 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, ["立即更新", "取  消"]);  
            }              
        });  
    }  
    /************升级检测代码结束********** */  
}  

服务端实现

开发者可以根据根据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));  
4 关注 分享
lhyh yaho Trust 952695055@qq.com

要回复文章请先登录注册

2958814@qq.com

2958814@qq.com

回复 Winson1138:
同问。这个plus.runtime.version只是“plus”的版本号,不是apk的版本号
2019-04-18 14:40
441079891@qq.com

441079891@qq.com

需要用到,收藏一下
2019-02-12 23:33
Winson1138

Winson1138

获取版本这个参数是有误的,请问是通过什么参数获取?"version": plus.runtime.version
2019-01-01 02:50
kivenwu

kivenwu

我是技术小白,不懂代码 ,直接通过wap2app打包的,现在APP升级这块需要有偿帮助,谢谢!qq379463829
2018-09-18 12:00
952695055@qq.com

952695055@qq.com

打包几十次了弄不来,.com/jiance.php?version=0.1.2&appid......可以正确返回,app就是不检测还是客户端没弄对! 有人100元直接教会,自动安装更新,场外交易也行,总觉的一对一有点不科学,在官方交易或者官方直接做个定价几十块钱的下载区,教程、源码压缩底价批发多好
2018-05-02 07:34
542485081@qq.com

542485081@qq.com

有没有java实例代码呀
2018-03-29 13:44
DCloud_UNI_CHB

DCloud_UNI_CHB (作者)

回复 542485081@qq.com:
服务端根据ua判断一下客户端系统,然后返回不同的升级地址即可
2018-03-27 19:57
542485081@qq.com

542485081@qq.com

手机有android和ios两种系统,上面例子的更新地址只针对android系统,如何同时实现两种系统的更新?
2018-03-27 19:48
457355172@qq.com

457355172@qq.com

回复 878121197@qq.com:
解决了
2018-03-15 23:01
DCloud_UNI_CHB

DCloud_UNI_CHB (作者)

回复 kibb:
是有问题,iOS工程师会尽快修复
2018-03-13 18:41
kibb

kibb

回复 DCloud_UNI_CHB:
iOS 11 真机调试:alert(ua.indexOf('StreamApp'));
输出:139,是否正常?
客户端代码全部复制上面的 未修改,只在ua 后面加了alert
2018-03-13 15:53
DCloud_UNI_CHB

DCloud_UNI_CHB (作者)

回复 kibb:
打包成独立App时,不会包含StreamApp字样,因此应该是-1;只有在流应用环境下,才会包含StreamApp字符串。
2018-03-13 12:35
kibb

kibb

iOS 加上 && ua.indexOf('StreamApp')==-1 参数后,不出现提示了。
StreamApp 不等于 -1
2018-03-13 12:10
DCloud_UNI_CHB

DCloud_UNI_CHB (作者)

回复 付憷:
可以把会提示升级、但安装失败的安装包,私信发给我一个,我们验证一下
2018-03-11 20:59
付憷

付憷

下载下来了,安装的时候提示安装失败
2018-03-09 20:45
878121197@qq.com

878121197@qq.com

回复 457355172@qq.com:
你的升级解决了没?
2018-03-09 18:00
878121197@qq.com

878121197@qq.com

同问 设置为1也没反应
2018-03-09 17:59
457355172@qq.com

457355172@qq.com

为什么我一点反应也没有
2018-01-25 16:20
邢天城

邢天城

回复 mengxin:
我把原生弹窗换成html弹窗后可以直接下载但是又有一个问题貌似下载完后不会自动提示安装,建议官方能有一个更新的组件,可以看到下载新的安装包的进度,并且下载完后能够自动打开安装包给个安装的提示。
2018-01-25 15:39
mengxin

mengxin

回复 邢天城:
老哥,有解决方案么?
2018-01-15 14:51
mengxin

mengxin

同一楼
2018-01-15 14:51
付憷

付憷

同楼上
2017-12-25 09:55
邢天城

邢天城

点击下载后系统会提示选择外部的浏览器或应用打开下载链接,怎么才能实现直接在应用内下载呢
2017-12-23 09:14