今天的笔记主要来记录最后的一个知识要点,APP客户端版本升级的接口开发。
APP的开发主要由伟大而神圣的用户来更新,更新的流程应该是这样的:
开启APP——请求初始化接口init.php——检测是否需要更新---否——首页
---是——更新
在初始化接口的时候,需要客户端发送几个数据:
app_id 客户端id,比如: 1,安卓手机 2,iphone手机
version_id 大版本号id
version_mini 小版本号id
did 用户客户端信息(客户端工程师会获取这个数据)
encrypt_did did加密后的字符串(did 加上 APP设备数据表中的key,然后md5)
<!doctype html> <html> <head> <title> 模拟手机APP提交的POST数据,用户请求初始化接口init.php </title> </head> <body> <form action="./init.php" method="post"> app_id <input type="text" name=‘app_id‘ ><br/> version_id <input type="text" name="version_id"><br/> <!--did客户端的开发工程师会获取到--> did <input type="text" name="did" value="123"><br/> version_mini <input type="text" name="version_mini"><br/> encrypt_did <input type="text" name="encrypt_did" value="e10adc3949ba59abbe56e057f20f883e"><br/> <input type="submit" /> </form> </body> </html>
忘了说还需要数据库表了,这里需要两张表。一张是记录升级版本信息的表,记录着设备的id,版本号信息,下载地址等。另外一张表是记录的设备的信息,比如安卓手机的信息,安卓pad的信息等等,版本信息表中有一个外键app_id,关联的就是设备信息表的主键。
<?php /* 设备信息表,记录了各种客户端的信息 CREATE TABLE IF NOT EXISTS `app_table` ( `app_id` smallint(6) NOT NULL AUTO_INCREMENT COMMENT ‘主键‘, `name` varchar(10) NOT NULL COMMENT ‘设备名称‘, `is_encryption` tinyint(1) NOT NULL COMMENT ‘是否加密‘, `key` varchar(10) NOT NULL COMMENT ‘加密key‘, `image_size` text NOT NULL COMMENT ‘按照json来存储‘, `create_time` int(11) NOT NULL COMMENT ‘添加时间‘, `update_time` int(11) NOT NULL COMMENT ‘修改时间‘, `status` tinyint(1) NOT NULL COMMENT ‘状态 1正常0删除‘, PRIMARY KEY (`app_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=‘app设备表‘ AUTO_INCREMENT=2 ; 版本升级信息表,存放了各种版本的信息 CREATE TABLE IF NOT EXISTS `version_upgrade` ( `id` smallint(4) NOT NULL AUTO_INCREMENT COMMENT ‘主键‘, `app_id` smallint(4) NOT NULL COMMENT ‘客户端设备id‘, `version_id` smallint(4) NOT NULL COMMENT ‘大版本号id‘, `version_mini` mediumint(8) NOT NULL COMMENT ‘小版本号‘, `version_code` varchar(10) NOT NULL COMMENT ‘版本标识1.2‘, `type` tinyint(4) NOT NULL COMMENT ‘是否升级1是0否‘, `apk_url` varchar(255) NOT NULL COMMENT ‘下载链接地址‘, `upgrade_point` varchar(255) NOT NULL COMMENT ‘升级提示‘, `status` tinyint(4) NOT NULL, `create_time` int(11) NOT NULL COMMENT ‘添加时间‘, `update_time` int(11) NOT NULL COMMENT ‘修改时间‘, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=‘软件升级信息表‘ AUTO_INCREMENT=2 ; */ ?>
为处理请求的init.php创建一个基础类,在基础类的方法check()中,进行各种判断,比如:该客户端设备是否存在,是否需要加密处理,是否有权限更新等等。
<?php
/***********************************
*
* 版本升级接口开发的基础类
* 学php的小蚂蚁
* 博客 http://my.oschina.net/woshixiaomayi/blog
*
************************************/
//载入之前写好的接口响应类
//代码内容请参考 http://my.oschina.net/woshixiaomayi/blog/517384
require_once(‘./response.php‘);
//载入之前写好的db类
//代码内容请参考 http://my.oschina.net/woshixiaomayi/blog/518295
require_once(‘./db.php‘);
class common{
//post提交过来的数据
public $param;
//该客户端设备的信息详情
public $app;
//确认设备的版本信息,权限等
public function check(){
//post提交过来的数据整合,一行太长了,分开来写\(^o^)/~
$app_id = isset($_POST[‘app_id‘])?$_POST[‘app_id‘]:‘‘;
$this -> param[‘app_id‘] = $app_id;
$version_id = isset($_POST[‘version_id‘])?$_POST[‘version_id‘]:‘‘;
$this -> param[‘version_id‘] = $version_id;
$did = isset($_POST[‘did‘])?$_POST[‘did‘]:‘‘;
$this -> param[‘did‘] = $did;
$version_mini = isset($_POST[‘version_mini‘])?$_POST[‘version_mini‘]:‘‘;
$this -> param[‘version_mini‘] = $version_mini;
$encrypt_did = isset($_POST[‘encrypt_did‘])?$_POST[‘encrypt_did‘]:‘‘;
$this -> param[‘encrypt_did‘] = $encrypt_did;
//判断app_id和version_id数据类型是否正确
if(!is_numeric($app_id) or !is_numeric($version_id)){
return Response::show(400,‘数据不合法‘);
}
//判断是否需要加密处理
$this->app=$this->getApp();
if(!$this->app){
return Response::show(400,‘该app不存在‘);
}
/*
判断是否有权限,判断权限的方式,1,是否需要加密处理
2,发送过来的encrypt_did是否和服务端生成的值一致
*/
if($this->app[‘is_encryption‘] && $this->param[‘encrypt_did‘] != md5($did . $this->app[‘key‘])){
return Response::show(405,‘你没有权限‘);
}
}
//获取该设备信息
public function getApp(){
//这几天这一段都写烂了,就不写注释了
try{
$connect = Db::getInstance()->connect();
}catch(Exception $e){
//返回给APP的错误提示
return Response::show(400,‘mysql not connect‘);
}
$sql="select * from app_table where app_id=".$this->param[‘app_id‘];
$result=mysql_query($sql,$connect);
return mysql_fetch_assoc($result);
}
}
?>创建init.php,将数据发送到这个脚本做处理即可。
<?php
/********************************
*
* 单例模式开发db库
* 学php的小蚂蚁
* 博客 http://my.oschina.net/woshixiaomayi/blog
*
***************************/
//载入基础类,进行版本判断
require_once(‘./common.php‘);
class Init extends Common{
public function index(){
//本方法在基类中
$this->check();
}
}
$obj = new Init();
$obj -> index();
?>处理客户端发来的请求数据,基本上就完成了,明天再把整个版本升级的功能做完,估计APP接口开发的内容就结束了。学习这个也花费了不少时间 (~ ̄▽ ̄)~
小蚂蚁学习APP接口开发(9)—— APP版本升级的接口方法——处理客户端发来的请求数据
原文:http://my.oschina.net/woshixiaomayi/blog/519783