dcloud --app版本更新

2024-05-26 17:58
文章标签 app 更新 版本 dcloud

本文主要是介绍dcloud --app版本更新,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

dcloud --app版本更新

1.app开发,最主要的一个功能就是版本更新,其实原理很简单,下载最新版本,然后自动打开app,重新安装!

2.提供的实例代码中,存在 update.js这个文件,也许它可以做到更新,不过,本人没用她提供的,自己写了一套,后台代码就不上了,这个其实就是文件下载的功能,意义不大,以下是部分代码
 OutputStream os = null;
        BufferedOutputStream bos = null;
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        try {
            String fileName = String.format("%s%s%s", apkInfo.getTitle(), ".", apkInfo.getExt());
            response.setHeader("conent-type", "application/vnd.android.package-archive");
            response.setContentType("application/vnd.android.package-archive");
            response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1"));


            File apkFile = new File(apkInfo.getFileUrl());
            if (!apkFile.exists()) {
                return;
            }
            long fileLength = apkFile.length();
            response.setHeader("Content-Length", String.valueOf(fileLength));


            os = response.getOutputStream();
            bos = new BufferedOutputStream(os);
            fis = new FileInputStream(apkFile);
            bis = new BufferedInputStream(fis);


            byte[] buffer = new byte[1 * 1024 * 10];
            int len = 0;
            while ((len = bis.read(buffer)) != -1) {
                bos.write(buffer, 0, len); // 写入
                bos.flush();
            }
            if (os != null) {
                os.close();
            }
            if (bos != null) {
                bos.close();
            }
            if (fis != null) {
                fis.close();
            }
            if (bis != null) {
                bis.close();
            }
,关键是前台怎么操作。

首先,我们需要校验一下版本,是否是最新版本,代码如下:
var wgtVer=null;
function plusReady(){
// 获取本地应用资源版本号
    plus.runtime.getProperty(plus.runtime.appid,function(inf){
        wgtVer=inf.version;
        //赋值
document.getElementById("nversion").innerHTML="V"+wgtVer;
    });
//得到系统内最新版本信息
var verserver=$app_api_url.findVersion();  //后台代码地址(校验版本号的)
mui.getJSON(verserver, {
"appid": plus.runtime.appid     //这个自己去看 mainfest.json
}, function(data) {
if (data.succeed) {
if(wgtVer!=data.data){
var inwebview = plus.webview.getWebviewById('index');
inwebview.evalJS("showredpoint(true)");
document.getElementById("nversion").innerHTML="V"+wgtVer+"<sup>●</sup>"; 
}
}else{

}
});
}
<sup>●</sup>,这个,我觉得会html的人,应该都要知道,不做解释,inwebview.evalJS,这个其实就是js方法,我这里实现的是,有新版的时候,打一个红色的标记,
//坐标显示红点
function showredpoint(ob){
if(ob==true){
document.getElementById('point').classList.remove("mui-hidden");
}else{
document.getElementById('point').classList.add("mui-hidden");
}
}

以下代码是下载更新的代码
var server = $app_api_url.apkCheck(); //获取升级描述文件服务器地址
var dserver=$app_api_url.apkDownload();//apk 下载


function update() {
mui.getJSON(server, {
"appid": plus.runtime.appid,
"version": wgtVer,
"imei": plus.device.imei
}, function(data) {
if (data.succeed) {
if(data.data==false){
plus.nativeUI.confirm("消息", function(event) {
if (0 == event.index) {
downWgt(plus.runtime.appid);
}
}, data.title, ["立即更新", "取  消"]);
}else{
plus.nativeUI.alert("最新版本");
}
}else{
plus.nativeUI.alert("版本校验失败");
}
});
}

function downWgt(ob){
var wgtUrl=dserver+"?appid="+ob;
    plus.nativeUI.showWaiting("下载更新包...");
    plus.downloader.createDownload( wgtUrl, {method: "GET",filename:"_doc/update/",retry: 0}, function(d,status){
        if ( status == 200 ) { 
            console.log("下载wgt成功:"+d.filename);
            plus.runtime.openFile(d.filename);//打开安装包
        } else {
            console.log("下载wgt失败!");
            plus.nativeUI.alert("下载wgt失败!");
        }
        plus.nativeUI.closeWaiting();
    }).start();
}

plus.downloader.createDownload( ),这个函数,大家自己搜索一下,我只简单的解释一下,wgtUrl,下载的路径,get方式访问,filename 表示文件下载到本手机的路径,plus.runtime.openFile(),该方法表示下载完成后自动打开app,实现安装。

如果大家感兴趣,或者想一起探讨学习的,请加一下这个QQ群, 488505459,谢谢!

这篇关于dcloud --app版本更新的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005180

相关文章

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p

Redis指南及6.2.x版本安装过程

《Redis指南及6.2.x版本安装过程》Redis是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSIC语言编写、支持网络、... 目录概述Redis特点Redis应用场景缓存缓存分布式会话分布式锁社交网络最新列表Redis各版本介绍旧

IIS 7.0 及更高版本中的 FTP 状态代码

《IIS7.0及更高版本中的FTP状态代码》本文介绍IIS7.0中的FTP状态代码,方便大家在使用iis中发现ftp的问题... 简介尝试使用 FTP 访问运行 Internet Information Services (IIS) 7.0 或更高版本的服务器上的内容时,IIS 将返回指示响应状态的数字代

Oracle 通过 ROWID 批量更新表的方法

《Oracle通过ROWID批量更新表的方法》在Oracle数据库中,使用ROWID进行批量更新是一种高效的更新方法,因为它直接定位到物理行位置,避免了通过索引查找的开销,下面给大家介绍Orac... 目录oracle 通过 ROWID 批量更新表ROWID 基本概念性能优化建议性能UoTrFPH优化建议注

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

查看MySQL数据库版本的四种方法

《查看MySQL数据库版本的四种方法》查看MySQL数据库的版本信息可以通过多种方法实现,包括使用命令行工具、SQL查询语句和图形化管理工具等,以下是详细的步骤和示例代码,需要的朋友可以参考下... 目录方法一:使用命令行工具1. 使用 mysql 命令示例:方法二:使用 mysqladmin 命令示例:方

Java版本不兼容问题详细解决方案步骤

《Java版本不兼容问题详细解决方案步骤》:本文主要介绍Java版本不兼容问题解决的相关资料,详细分析了问题原因,并提供了解决方案,包括统一JDK版本、修改项目配置和清理旧版本残留等步骤,需要的朋... 目录错误原因分析解决方案步骤第一步:统一 JDK 版本第二步:修改项目配置第三步:清理旧版本残留兼容性对

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境