app接口教程php百度云,小蚂蚁学习APP接口开发(9)—— APP版本升级的接口实例...

今天的笔记主要来记录最后两个知识要点之一,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)

使用一个html表单来模拟一下APP客户端post发送过来的请求数据:

html>

模拟手机APP提交的POST数据,用户请求初始化接口init.php

app_id

version_id

did        

version_mini    

encrypt_did

忘了说还需要数据库表了,这里需要两张表。一张是记录升级版本信息的表,记录着设备的id,版本号信息,下载地址等。另外一张表是记录的设备的信息,比如安卓手机的信息,安卓pad的信息等等,版本信息表中有一个外键app_id,关联的就是设备信息表的主键。

设备信息表,记录了各种客户端的信息

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的小蚂蚁

*博客 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 $connect;

//确认设备的版本信息,权限等

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{

$this->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,$this->connect);

return mysql_fetch_assoc($result);

}

//获取新版本信息

public function getVersionUpgrade($app_id){

$sql="select * from version_upgrade where app_id=".$app_id." order by create_time desc limit 1";

$result=mysql_query($sql,$this->connect);

$result=mysql_fetch_assoc($result);

return $result;

}

}

?>

创建init.php,将数据发送到这个脚本做处理即可,最后返回的数据可以确定,该客户端是否需要/能够升级版本。

/********************************

*

*   版本升级接口逻辑

*   学php的小蚂蚁

*   博客 http://my.oschina.net/woshixiaomayi/blog

*

***************************/

//载入基础类,进行版本判断

require_once('./common.php');

class Init extends Common{

public function index(){

//本方法在基类中,确实数据的正确性

$this->check();

/*

获取新版本信息,和APP发送过来的版本信息进行对比

如果是最新版本,不升级

如果是老版本,升级

*/

$version_grade=$this->getVersionUpgrade($this->param['app_id']);

//检测是否拿到版本信息

if($version_grade){

/*

判断type类型看能否升级,并且判断客户端是不是最新版本

如果可以更新,添加键值is_upload = 1

不能更新,is_upload= 0

APP工程师根据返回的is_upload的值进行相应的操作

*/

if ($version_grade['type'] && $this->param['version_id'] 

$version_grade['is_upload']=$version_grade['type'];

}else{

$version_grade['is_upload']=0;

}

return Response::show(200,'获取版本成功',$version_grade);

}else{

return Response::show(400,'获取新版本失败');

}

}

}

$obj=new Init();

$obj->index();

?>

APP客户端版本升级的接口,基本上就完成了,明天再把APP客户端错误日志接口的笔记写一下,APP接口开发的内容就结束了。学习这个也花费了不少时间   (~ ̄▽ ̄)~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值