使用Appcan客戶端自動(dòng)更新PHP版本號(hào)(全)
在項(xiàng)目開發(fā)過程中遇到app端自動(dòng)更新,查閱了相關(guān)資料然后把Appcan客戶端自動(dòng)更新PHP版本號(hào)的方法整理出來,具體代碼講解如下。
服務(wù)端文件:update.php、version.php、version.xml
update.php 內(nèi)容:
PHP
<?php
define('CIN', true);
$oldver = $_REQUEST['ver'];//客戶端傳過來的版本號(hào)
$platform = $_REQUEST['platform'];//客戶端的平臺(tái)
$info = simplexml_load_file('version.xml');
$iphone_filename=$info->news['iphone_filename']; //iphone下載文件
$android_filename=$info->news['android_filename']; //androiad下載文件
$version=$info->news['version']; //版本號(hào)
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 內(nèi)容:
PHP
<?php
define('CIN', true);
$result['vtitle']="更新";
$result['vcontent']="新版本有更新喔!~新增功能修復(fù)各種錯(cuò)誤";
print_r(json_encode($result));
?>
version.xml 內(nèi)容:
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 = '';//平臺(tái)版本
function update()
{
//安卓版 ,顯示下載進(jìn)度 (step:7)
uexDownloaderMgr.onStatus = function(opId, fileSize, percent, status) {
if (status == 0) {
// 下載中...
Log('download percent ' + percent + '%');
uexWindow.toast('1', '5', '正在下載'+localStorage.app_title+'新版,請(qǐng)稍后。進(jìn)度:' + percent + '%', '');
} else if (status == 1) {// 下載完成.
uexWindow.closeToast();
uexDownloaderMgr.closeDownloader('14');//關(guān)閉下載對(duì)象
uexWidget.installApp(filepath2+fileName);// 安裝下載apk文件
} else {
uexWindow.toast('1', '5', '下載出錯(cuò),請(qǐng)關(guān)閉'+localStorage.app_title+'再次運(yùn)行.', '');
}
};
//安卓版 ,創(chuàng)建下載對(duì)象回調(diào)函數(shù)(step:6)
uexDownloaderMgr.cbCreateDownloader = function(opId, dataType, data) {
Log('uexDownloaderMgr.cbCreateDownloader data='+data);
if (data == 0) {
//updateurl是通過調(diào)用cbCheckUpdate回調(diào)后,放入全局變量的
uexDownloaderMgr.download('14', updateurl, filepath2+fileName, '0');//開始下載apk文件
} else if (data == 1) {
;
} else {
;
}
};
//提示更新模態(tài)框按鈕事件回調(diào)函數(shù),判斷用戶選擇更新還是取消 (step:5)
uexWindow.cbConfirm = function(opId, dataType, data) {
Log('uexWindow.cbConfirm ');
//調(diào)用對(duì)話框提示函數(shù)
if (data == 0) {
//用戶點(diǎn)擊稍后按鈕,不進(jìn)行更新
} else {
//用戶點(diǎn)擊確定按鈕,進(jìn)行更新
if (platform == 0) {
//蘋果版更新,通過瀏覽器加載appstore路徑
uexWidget.loadApp(updateurl,'','');
//uexWidget.loadApp("", "", updateurl);//舊方法 已經(jīng)不可以使用了。
} else if (platform == 1) {
//安卓版更新,通過創(chuàng)建下載對(duì)象進(jìn)行下載
uexDownloaderMgr.createDownloader("14");
} else {
;
}
}
};
//調(diào)用檢查更新回調(diào)函數(shù),請(qǐng)求成功后,彈出模態(tài)框讓用戶選擇是否現(xiàn)在更新(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>版本號(hào):" + obj.version;
updateurl = obj.url;
fileName = obj.name+".apk";
getVersionContent();
// var value = "稍后;更新";
// var mycars = value.split(";");
// uexWindow.confirm('', '當(dāng)前有新版本,是否更新?', mycars);//彈出提示框,是否確定更新
} else if (obj.result == 1) {
//蘋果
//alert("更新地址是:" + obj.url + "<br>文件名:" + obj.name + "<br>文件大?。? +
//obj.size + "<br>版本號(hào):" + obj.version)
;// tips = "當(dāng)前版本是最新的";alert(tips);
} else if (obj.result == 2) {
;// tips = "未知錯(cuò)誤";alert(tips);
} else if (obj.result == 3) {
;// tips = "參數(shù)錯(cuò)誤";alert(tips);
}
};
//檢查是否已經(jīng)存在sd卡的回調(diào)函數(shù)(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不存在,根據(jù)具體情況處理');
} else {
//執(zhí)行檢查更新
uexWidget.checkUpdate();//根據(jù)config.xml里面配置的檢查更新地址發(fā)起http請(qǐng)求
}
flag_sdcard = 1;
}
};
//獲取平臺(tái)版本回調(diào)函數(shù),確定是客戶端是那個(gè)平臺(tái)的客戶端 (step:2)
uexWidgetOne.cbGetPlatform = function(opId, dataType, data) {
Log('uexWidgetOne.cbGetPlatform ');
//獲取系統(tǒng)版本信息回調(diào)函數(shù)
platform = data;
Log('platform= '+platform);
if (data == 0) {
// 是iphone
uexWidget.checkUpdate();// 直接調(diào)用檢查更新,檢查更新地址在config.xml里面有配置
} else if (data == 1) {
// 是android
flag_sdcard = 0;
uexFileMgr.isFileExistByPath('/sdcard/');//先判斷是否存在sd卡,再調(diào)用checkUpdate來進(jìn)行更新
} else {
// 是平臺(tái)
}
};
uexWidgetOne.getPlatform();//獲取平臺(tái)版本 (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","連接不上網(wǎng)絡(luò)^_^哦","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端更新提示:

彈窗內(nèi)容根據(jù) version.php 文件內(nèi)容可以自定義。
以上內(nèi)容就是本文講解使用Appcan客戶端自動(dòng)更新PHP版本號(hào)的方法,希望對(duì)大家有所幫助。
- 利用PHP如何寫APP接口詳解
- 淺談使用 PHP 進(jìn)行手機(jī) APP 開發(fā)(API 接口開發(fā))
- 傻瓜化配置PHP環(huán)境——Appserv
- php微信支付之APP支付方法
- 基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法詳解
- 用php實(shí)現(xiàn)像JSP,ASP里Application那樣的全局變量
- PHP中auto_prepend_file與auto_append_file用法實(shí)例分析
- php和asp利用Shell.Application來執(zhí)行程序的代碼
- PHP編寫簡(jiǎn)單的App接口
相關(guān)文章
php執(zhí)行多個(gè)存儲(chǔ)過程的方法【基于thinkPHP】
這篇文章主要介紹了php執(zhí)行多個(gè)存儲(chǔ)過程的方法,結(jié)合實(shí)例形式分析了基于thinkPHP框架調(diào)用多個(gè)存儲(chǔ)過程的相關(guān)操作技巧,需要的朋友可以參考下2016-11-11
Joomla框架實(shí)現(xiàn)字符串截取的方法示例
這篇文章主要介紹了Joomla框架實(shí)現(xiàn)字符串截取的方法,涉及php字符串及正則操作相關(guān)技巧,需要的朋友可以參考下2017-07-07
ThinkPHP里用U方法調(diào)用js文件實(shí)例
這篇文章主要介紹了ThinkPHP里用U方法調(diào)用js文件的方法,實(shí)例分析了ThinkPHP中U方法的使用技巧,需要的朋友可以參考下2015-06-06
基于php(Thinkphp)+jquery 實(shí)現(xiàn)ajax多選反選不選刪除數(shù)據(jù)功能
這篇文章主要介紹了基于php(Thinkphp)+jquery 實(shí)現(xiàn)ajax多選反選不選刪除數(shù)據(jù)功能的相關(guān)資料,需要的朋友可以參考下2017-02-02
CodeIgniter常用知識(shí)點(diǎn)小結(jié)
這篇文章主要介紹了CodeIgniter常用知識(shí)點(diǎn),包括跳轉(zhuǎn)、常量定義、語言設(shè)置及支持get方法傳參等技巧,需要的朋友可以參考下2016-05-05

