使用Appcan客户端自动更新PHP版本号(全)

5年以前  |  阅读数:292 次  |  编程语言:PHP 

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

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

update.php 内容:

PHP


    <?php
    define('CIN', true);
    $oldver = $_REQUEST['ver'];//客户端传过来的版本号
    $platform = $_REQUEST['platform'];//客户端的平台
    $info = simplexml_load_file('version.xml');
    $iphone_filename=$info->news['iphone_filename']; //iphone下载文件
    $android_filename=$info->news['android_filename']; //androiad下载文件
    $version=$info->news['version']; //版本号
    if ($version>$oldver)
    {
      switch ($platform)
      {
        case "0"://iphone
          echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
          echo "<results>";
          echo "<updateFileName>i2ty</updateFileName>";//客户端名字
          echo "<updateFileUrl>itunesURL</updateFileUrl>";//返回给客户端的下载地址
          echo "<fileSize>0</fileSize>";//文件大小
          echo "<version>".$version."</version>";//版本信息
          echo "</results>";
          break;
        case "1"://android
          echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
          echo "<results>";
          echo "<updateFileName>i2ty</updateFileName>";//客户端名字
          echo "<updateFileUrl>http://i2ty.com/app/".$android_filename."</updateFileUrl>";//返回给客户端的下载地址
          echo "<fileSize>0</fileSize>";//文件大小
          echo "<version>".$version."</version>";//版本信息
          echo "</results>";
          break;
      }
    }
    ?>

version.php 内容:

PHP


    <?php
    define('CIN', true);
    $result['vtitle']="更新";
    $result['vcontent']="新版本有更新喔!~新增功能修复各种错误";
    print_r(json_encode($result));
    ?>
    version.xml 内容:
    PHP
    <?xml version="1.0" encoding="utf-8" ?>
    <root desc="Login">
     <news version="00.00.0001" iphone_filename="i2ty.ipa"  android_filename="i2ty.apk" />
    </root>
    index.html 客户端:
    PHP
    window.uexOnload = function(type){   
        if (!type) {
          update();
        }
    var flag_sdcard = 1;
    var updateurl = '';//下载新apk文件地址
    var filepath2 = "/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(filepath2+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, filepath2+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 + "<br>文件名:" + obj.name + "<br>文件大小:" +
                // obj.size + "<br>版本号:" + 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 + "<br>文件名:" + obj.name + "<br>文件大小:" +
                //obj.size + "<br>版本号:" + 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端更新提示:

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

以上内容就是本文讲解使用Appcan客户端自动更新PHP版本号的方法,希望对大家有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
将二进制数据转为16进制以便显示
获取IMSI
获取IMEI
Java生成UUID
PHP自定义函数获取搜索引擎来源关键字的方法
让你成为最历害的git提交人
在Zeus Web Server中安装PHP语言支持
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Yii2汉字转拼音类的实例代码
Python 2与Python 3版本和编码的对比
php+ajax+json 详解及实例代码
php封装的page分页类完整实例
php数组合并array_merge()函数使用注意事项
PHP设计模式之工厂模式与单例模式
PHP实现简单爬虫的方法
php实现数组中索引关联数据转换成json对象的方法
wget使用技巧