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

相关文章

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

MySQL 升级到8.4版本的完整流程及操作方法

《MySQL升级到8.4版本的完整流程及操作方法》本文详细说明了MySQL升级至8.4的完整流程,涵盖升级前准备(备份、兼容性检查)、支持路径(原地、逻辑导出、复制)、关键变更(空间索引、保留关键字... 目录一、升级前准备 (3.1 Before You Begin)二、升级路径 (3.2 Upgrade

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java