使用Appcan客户端自动更新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版本号的方法,希望对大家有所帮助。

(0)

相关推荐

  • 用php实现像JSP,ASP里Application那样的全局变量

    复制代码 代码如下: <?php /**  * 功能:实现像JSP,ASP里Application那样的全局变量  * author: [url]www.itzg.net[/url]  * version: 1.0  * 版权:如许转载请保留版权声明  */ /*+----------------example---------------------- require_once("Application.php"); $arr = array(0=>"Hi&qu

  • php微信支付之APP支付方法

    本文实例讲述了微信开放平台移动应用集成微信支付功能.分享给大家供大家参考.具体分析如下: WechatAppPay文件代码如下: 复制代码 代码如下: <?php namespace common\services\WechatPay; class WechatAppPay extends WechatPayBase {     //package参数     public $package = [];     //异步通知参数     public $notify = [];     //推送

  • 基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解

    AppServ,XAMPP,WAMP都是集成了apache,mysql,php的套装,使用起来比较方便,就不需要再去一个个的配置php,apache和mysql. 下载相应的安装包进行安装,不过对于php项目来说,WAMP会默认显示NOTICE信息,页面上一大段一大段的,比较难看.怎么去掉这些警告信息呢?先找到php.ini文件. 其路径是:(我的安装路径是D:\wamp)D:\wamp\bin\php\php5.3.10\php.ini ,打开该文件. 在文件中搜索,error_reporti

  • PHP中auto_prepend_file与auto_append_file用法实例分析

    本文实例讲述了PHP中auto_prepend_file与auto_append_file的用法,是PHP程序设计中比较实用的技巧.分享给大家供大家参考.具体方法如下: 如果需要将文件require到所有页面的顶部与底部. 第一种方法:在所有页面的顶部与底部都加入require语句. 例如: require('header.php'); //页面正文内容部分 require('footer.php'); 但这种方法如果需要修改顶部或底部require的文件路径,则需要修改所有页面文件.而且需要每

  • 傻瓜化配置PHP环境——Appserv

    必 看:如果你已经装了IIS服务器,请到:"开始-> 程序 -> 管理工具 -> Internet 信息服务(IIS)管理器 -> 网站"将所有网站停止.否则将导致Apache无法启动.如果你已经配置过PHP环境,为避免重复出错,请先卸载所有相关软件:Apache.PHP.MySQL.phpMyadmin,因为Appserv已经自带了这些东东. 用Appserv配置PHP环境就跟大家平常安装游戏一样简单,所以大家不要太紧张.好了,我们闲话少说,开始用Appser

  • PHP编写简单的App接口

    本篇是笔记尝试写的第一个PHP接口,并在iOS开发中尝试应用测试.今天给大家分享如何自己写接口来测试! 相信很多朋友在开发时遇到过这样的问题:后台什么时候提供接口?怎么才提供一个接口,其他接口什么时候给出来?没有接口我们前端怎么能做得了? 哈哈!大学学完本篇就可以自己搞个接口来返回固定的死数据来测试了! 搭建PHP环境 由于本人使用的电脑是Mac,因此推荐大家使用MAMP PRO这款软件,不过是收费版,相信不想花钱的大家会有办法搞定的! MAMP PRO这款软件是集成环境软件,已经有apache

  • php和asp利用Shell.Application来执行程序的代码

    今天试了一下,用open也可以.php代码如下,我好像还没有在php的webshell中看到相关方法 复制代码 代码如下: <?php $wsh = new COM('Shell.Application') or die("Shell.Application"); $exec = $wsh->open("c:\\windows\\system32\\notepad.exe"); //没有回显,多了个notepad进程,可以写一个批处理来运行dos命令.o

  • 利用PHP如何写APP接口详解

    搭建PHP环境 由于本人使用的电脑是Mac,因此推荐大家使用MAMP PRO这款软件,不过是收费版,相信不想花钱的大家会有办法搞定的! MAMP PRO这款软件是集成环境软件,已经有apache.mysql.php了,具备运行解析PHP的环境了! 如果不想使用集成环境,可以自己搭建.Mac自带了apache和PHP环境的,只需要稍加配置一下就可以使用了,然后再安装一下mysql就可以了! 大家可以看一下简单版本配置:Mac配置PHP环境 这篇文章. 启动服务器 这里是以MAMP PRO软件为例,

  • 浅谈使用 PHP 进行手机 APP 开发(API 接口开发)

    一.先简单回答两个问题: 1.PHP 可以开发客户端? 答:可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:主要用于服务端的开发.但是,PHP可不仅仅只能在互联网站上发展,一个PHP for Android(PFA)站点表示他们将可以发布编程模型.工具盒文档让PHP在Android上实现应用.该项目的主要赞助商是开源公司IronTec,PFA使用Scripting Layer for Android (SL4A),也就是Androd Scripting Envi

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

    在项目开发过程中遇到app端自动更新,查阅了相关资料然后把Appcan客户端自动更新PHP版本号的方法整理出来,具体代码讲解如下. 服务端文件:update.php.version.php.version.xml update.php 内容: PHP <?php define('CIN', true); $oldver = $_REQUEST['ver'];//客户端传过来的版本号 $platform = $_REQUEST['platform'];//客户端的平台 $info = simple

  • 关联的Select,可以支持客户端动态更新

    这是我很久就写好了的一个小程序.关联的Select,前后的select都是关联的,前面的select影响到后面的内容,为了防止服务器的重新读的负担,我加入了客户端自动更新功能,这样每次更新都不必再读取数据库而刷新页面. 虽然是为了我现在正在做的一个系统而设计的(可以运用到数据库里去),但是它的实现理论应该有人会用得到吧. 现在我放出来让大家研究,研究.也欢迎大家指出不足的地方. 点击下载此原代码 演示(演示无法添加数据,请下载原代码) Test var fy=new Array() var fl

  • C# WinForm实现自动更新程序之客户端的示例代码

    目录 前言 开发环境 开发工具 实现代码 实现效果 前言 第二步理论上我们该写客户端了,但是,在此之前,需要先介绍下一些必要的方法以及操作. 写代码还是要尽量的保证通用性,以便以后需要的时候可以拿来稍微改改甚至直接使用.所以在这里我们将自动更新的程序抽象出来,即对于客户端来说,它只包含三个文件(AutoUpdate.dll.AutoUpdate.exe.UpdateList.xml,如果是.NET Framework的话,其实是没有AutoUpdate.dll文件的,就一个exe就足够了.这也是

  • Linux下SVN服务器自动更新文件到Web目录的方法

    说明: 服务器操作系统:CentOS 服务器IP:192.168.21.134 SVN安装路径:/usr/local/svn SVN项目路径:/home/svn SVN登录账号:osyunwei SVN登录密码:123456 Web站点根目录:/home/web 实现目的: 当svn项目中有任何修改更新时,系统会自动实时从svn中检出文件并同步到Web站点根目录 具体操作: 一.使用SVN中post-commit实现自动实时从svn中检出文件并同步到Web站点根目录 cd /home/svn/h

  • Android App实现应用内部自动更新的最基本方法示例

    这只是初步的实现,并没有加入自动编译等功能.需要手动更改更新的xml文件和最新的apk.    共涉及到四个文件! 一.客户端 AndroidUpdateTestActivity:程序首页 main.xml:首页布局 Update:更新类 softupdate_progress:更新等待界面 Updage package majier.test; import java.io.File; import java.io.FileOutputStream; import java.io.IOExce

  • Android如何实现APP自动更新

    先来看看要实现的效果图: 对于安卓用户来说,手机应用市场说满天飞可是一点都不夸张,比如小米,魅族,百度,360,机锋,应用宝等等,当我们想上线一款新版本APP时,先不说渠道打包的麻烦,单纯指上传APP到各大应用市场的工作量就已经很大了,好不容易我们把APP都上传完了,突然发现一个会导致应用闪退的小Bug,这时那个崩溃啊,明明不是很大的改动,难道我们还要再去重新去把各大应用市场的版本再上传更新一次?相信我,运营人员肯定会弄死你的!! 有问题,自然就会有解决问题的方案,因此我们就会想到如果在APP里

  • Android软件自动更新实现代码

    如何实现软件自动更新,下面是具体实例: 效果图: 具体步骤: 1.在服务器上部署更新所用的xml文件:version.xml <update> <version>2</version> <name>baiduxinwen.apk</name> <url>http://gdown.baidu.com/data/wisegame/e5f5c3b8e59401c8/baiduxinwen.apk</url> </updat

  • asp.net自动更新组件分享

    一. 摘要 前两天在博客上发布了一篇英文的自动更新组件文章Release a AutoUpdater tool,那么在这篇文章中,我们也对其功能进行一些简单说明,这个组件非常简单,所以大家可以下载进行一些改进.众所周知,对于一般的软件开发,在开始的时候都会有一个技术选型的阶段,最大的选型就是首先要确定是选择Client/Server模式还是Browser/Server模式.综合而论:两者各有优劣,在很多方面都不能被对方互相取代,如在适用Internet.维护工作量等方面,B/S比C/S要强很多:

  • 采用C#实现软件自动更新的方法

    本文实例分析了采用C#实现软件自动更新的方法,是非常实用的功能,值得学习和借鉴.具体如下: 1.问题概述: 长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序可 维护性差,布置困难,升级不方便,维护成本高就是一个相当重要的因素.有很多企业用户就是因为这个原因而放弃使用C/S.然而当一个应用必须要使用C/S 结构才能很好的实现其功能的时候,我们该如何解决客户端的部署与自动升级问题?部署很简单,只要点击安装程

  • Android7.0自动更新适配 包解析异常

    在Android7.0的手机上,自动更新的时候出现包解析异常,在其他的手机上没有这个问题. 原因: Android7.0引入私有目录被限制访问和StrictMode API .私有目录被限制访问是指在Android7.0中为了提高应用的安全性,在7.0上应用私有目录将被限制访问.StrictMode API是指禁止向你的应用外公开 file:// URI. 如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,则会报出异常. 解决办法: 第一步:在AndroidManif

随机推荐