PHP开发APP接口(九)
APP版本升级
版本升级分析以及数据表分析
版本升级接口开发
本节课:
掌握版本升级分析
学会设计版本升级数据表
Web升级:只需要把最新的代码直接放到服务器替换源代码
APP版本升级:
流程===》
开启APP:
请求初始化接口init.php
->
打开app
->
监测是否更新
->
是就更新,更新之后回到首页
->
否直接回到首页
初始化接口参数
app_id 客户端id1、安卓pas。设备号,是何种设备
version_id 版本号
/**
*version_upgrade 版本升级信息表
*/
CREATE TABLE `version_upgrade` (
`id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
`app_id` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '客户端设备id 1安装pad',
`version_id` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '大版本号',
`version_mini` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '大小版本号',
`version_code` varchar(10) DEFAULT NULL COMMENT '版本标识1.2',
`type` tinyint(2) unsigned DEFAULT NULL COMMENT '是否升级:1升级 0不升级 2强制升级',
`apk_url` varchar(255) DEFAULT NULL,
`upgrade_point` varchar(255) DEFAULT NULL COMMENT '升级提示',
`status` tinyint(2) DEFAULT NULL,
`create_time` int(11) DEFAULT NULL,
`update_time` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
)ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
CREATE TABLE `app`(
`id` smallint(4) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(10) DEFAULT NULL COMMENT 'app类型名称 如:安卓手机',
`is_encryption` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否加密 1加密 0不加密',
`key` varchar(20) NOT NULL DEFAULT '0' COMMENT '加密key',
`image_size` text COMMENT '按json_encode存储',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1正常 0删除',
`create_time` int(11) NOT NULL COMMENT '创建时间',
`update_time` int(11) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
)ENGINE = InnoDB AUTO_INCREMENT = 5 DEFAULT CHARSET = utf8;
版本升级接口开发:
掌握封装版本升级方法
首页接口开发(作业)
掌握如何开发版本升级接口
参数:app_id/version_id/did/version_mini/encrypy_did
传递方式$_GET/$_POST/$_SERVER(header头)
$_SERVER是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等信息的数组。
vim init.php
<?php
// var_dump($_SERVER);
require_once('./common.php');
require_once('./reponse.php');
class init extends Common{
public function index(){
//检查连接
$this->check();
//获取版本升级信息
$versionUpgrade = $this->getversionUpgrade($this->app['id']);
if($versionUpgrade){
if($versionUpgrade['type'] && $this->params['version_id'] <$versionUpgrade['type']){
$versionUpgrade['is_upload'] = $versionUpgrade['type']
}else{
$versionUpgrade['is_upload'] = 0;
}
return Response:show(200,'版本升级信息获取成功',$versionUpgrade);
}else{
Response:show(400,'版本升级信息获取失败');
}
}
}
?>
=================================================================
vim common.php
<?php
/**
*处理接口公共业务
*/
require_once('./response.php');
require_once('./ndb.php');
class Common {
public $params;
public $app;
public function check(){
//客户端id
$this->params['app_id']=$appId=isset($_POST['app_id'])?$_POST['app_id']:'';
//版本号
$this->params['version_id']=$versionId=isset($_POST['version_id'])?$_POST['version_id']:'';
//小版本号
$this->params['version_mini']=$versionMini=isset($_POST['version_mini'])?$_POST['version_mini']:'';
//客户端设备号
$this->params['did']=$did=isset($_POST['did'])?$_POST['did']:'';
//加密后的did串
$this->params['encrypt_did']=$encryptDid=isset($_POST['encrypt_did'])?$_POST['encrypt_did']:'';
if(!is_numeric($appId) || !is_numeric($versionId)){
return Response::show(401,'参数不合法');
}
//判定app是否需要加密
$this->app = $this->getApp($appId);
if(!$this->app) {
return Response::show(402,'app_id不存在');
}
if($this->app['is_encryption'] && $encryptDid != md5($did . $this->app['key'])){
return Response::show(403,'没有该权限');
}
}
//获取app信息
public function getApp($id){
$sql = 'select * from app where id = '.$id.'and status = 1 limit';
$connect = Ndb::getInstance()->connect();
$result = mysql_query($sql,$connect);
return mysql_fetch_assoc($result);
}
//获取版本升级信息
public function getversionUpgrade($appId){
$sql = 'select * from version_upgrade where app_id = '.$appId.'and status = 1 limit';
$connect = Ndb::getInstance()->connect();
$result = mysql_query($sql,$connect);
return mysql_fetch_assoc($result);
}
}