如何使用Appcan客户端自动更新PHP版本号
创始人
2024-12-11 13:01:58
0次

在项目开发过程中遇到app端自动更新,查阅了相关资料然后把Appcan客户端自动更新PHP版本号的方法整理出来,具体代码讲解如下。

服务端文件:update.php、version.php、version.xml

update.php 内容:

PHP

news['iphone_filename']; //iphone下载文件
$android_filename=$info->news['android_filename']; //androiad下载文件
$version=$info->news['version']; //版本号
if ($version>$oldver)
{
  switch ($platform)
  {
    case "0"://iphone
      echo "";
      echo "";
      echo "i2ty";//客户端名字
      echo "itunesURL";//返回给客户端的下载地址
      echo "0";//文件大小
      echo "".$version."";//版本信息
      echo "";
      break;
    case "1"://android
      echo "";
      echo "";
      echo "i2ty";//客户端名字
      echo "http://i2ty.com/app/".$android_filename."";//返回给客户端的下载地址
      echo "0";//文件大小
      echo "".$version."";//版本信息
      echo "";
      break;
  }
}
?>

version.php 内容:

PHP


version.xml 内容:
PHP


 

index.html 客户端:
PHP
window.uexOnload = function(type){   
    if (!type) {
      update();
    }
var flag_sdcard = 1;
var updateurl = '';//下载新apk文件地址
var filepath3 = "/sdcard/";//保存到sd卡
var fileName = '';//新版本文件名
var platform = '';//平台版本
function update()
{  
    //安卓版 ,显示下载进度 (step:7)
    uexDownloaderMgr.onStatus = function(opId, fileSize, percent, status) {
        if (status == 0) {
            // 下载中...
            Log('download percent ' + percent + '%');
            uexWindow.toast('1', '5', '正在下载'+localStorage.app_title+'新版,请稍后。进度:' + percent + '%', '');
        } else if (status == 1) {// 下载完成.
            uexWindow.closeToast();
            uexDownloaderMgr.closeDownloader('14');//关闭下载对象
            uexWidget.installApp(filepath3+fileName);// 安装下载apk文件
        } else {
            uexWindow.toast('1', '5', '下载出错,请关闭'+localStorage.app_title+'再次运行.', '');
        }
    };
    //安卓版 ,创建下载对象回调函数(step:6)
    uexDownloaderMgr.cbCreateDownloader = function(opId, dataType, data) {
        Log('uexDownloaderMgr.cbCreateDownloader data='+data);
        if (data == 0) {
            //updateurl是通过调用cbCheckUpdate回调后,放入全局变量的
            uexDownloaderMgr.download('14', updateurl, filepath3+fileName, '0');//开始下载apk文件
        } else if (data == 1) { 
            ;
        } else {
            ;
        }
    };
    //提示更新模态框按钮事件回调函数,判断用户选择更新还是取消 (step:5)
    uexWindow.cbConfirm = function(opId, dataType, data) {
        Log('uexWindow.cbConfirm ');
        //调用对话框提示函数
        if (data == 0) {
            //用户点击稍后按钮,不进行更新
        } else {
            //用户点击确定按钮,进行更新
            if (platform == 0) {
                //苹果版更新,通过浏览器加载appstore路径
                uexWidget.loadApp(updateurl,'','');
                //uexWidget.loadApp("", "", updateurl);//旧方法 已经不可以使用了。
            } else if (platform == 1) {
                //安卓版更新,通过创建下载对象进行下载                
                uexDownloaderMgr.createDownloader("14");
            } else {
                ;
            }
        }
    };
    //调用检查更新回调函数,请求成功后,弹出模态框让用户选择是否现在更新(step:4)
    uexWidget.cbCheckUpdate = function(opCode, dataType, jsonData) {        
        Log('jsonData='+jsonData);
        var obj = eval('(' + jsonData + ')');
        if (obj.result == 0) {
            // tips = "更新地址是:" + obj.url + "
文件名:" + obj.name + "
文件大小:" +             // obj.size + "
版本号:" + obj.version;             updateurl = obj.url;             fileName = obj.name+".apk";             getVersionContent();             // var value = "稍后;更新";             // var mycars = value.split(";");             // uexWindow.confirm('', '当前有新版本,是否更新?', mycars);//弹出提示框,是否确定更新         } else if (obj.result == 1) {             //苹果             //alert("更新地址是:" + obj.url + "
文件名:" + obj.name + "
文件大小:" +             //obj.size + "
版本号:" + obj.version)             ;// tips = "当前版本是最新的";alert(tips);         } else if (obj.result == 2) {                         ;// tips = "未知错误";alert(tips);         } else if (obj.result == 3) {                         ;// tips = "参数错误";alert(tips);         }     };     //检查是否已经存在sd卡的回调函数(step:3)     uexFileMgr.cbIsFileExistByPath = function(opCode, dataType, data) {         Log('uexFileMgr.cbIsFileExistByPath flag_sdcard='+flag_sdcard+' , data='+data);         if (flag_sdcard == 0) {             if (data == 0) {                 Log('sdcard不存在,根据具体情况处理');             } else {                 //执行检查更新                 uexWidget.checkUpdate();//根据config.xml里面配置的检查更新地址发起http请求             }             flag_sdcard = 1;         }      };     //获取平台版本回调函数,确定是客户端是那个平台的客户端 (step:2)     uexWidgetOne.cbGetPlatform = function(opId, dataType, data) {         Log('uexWidgetOne.cbGetPlatform ');         //获取系统版本信息回调函数         platform = data;         Log('platform= '+platform);         if (data == 0) {             // 是iphone             uexWidget.checkUpdate();// 直接调用检查更新,检查更新地址在config.xml里面有配置         } else if (data == 1) {             // 是android             flag_sdcard = 0;             uexFileMgr.isFileExistByPath('/sdcard/');//先判断是否存在sd卡,再调用checkUpdate来进行更新         } else {             // 是平台         }     };     uexWidgetOne.getPlatform();//获取平台版本 (step:1) } function Log(s) {     uexLog.sendLog(s); } function getVersionContent(){     var url = web_url+"version.php";     uexXmlHttpMgr.onData = getvSuccess;     uexXmlHttpMgr.open(777, "get", url,"");     uexXmlHttpMgr.send(777);  } function getvSuccess(opid,status,result){     if (status == -1) {       uexWindow.toast("0","5","连接不上网络^_^哦","3000");     }     if(status==1){     uexXmlHttpMgr.close(777);     uexWindow.closeToast();     if(result=="[]"){uexWindow.toast("0","5","无","2000");}     else{       var con=eval('(' + result + ')')       var value = "稍后;更新";       var mycars = value.split(";");       uexWindow.confirm(con.vtitle, con.vcontent, mycars);//弹出提示框,是否确定更新       }     } }

最后app 的 config.xml 文件配置更新地址填写为:

http://www.i2ty.com/update.php

APP端更新提示:

如何使用Appcan客户端自动更新PHP版本号

弹窗内容根据 version.php 文件内容可以自定义。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...