小螞蟻學習APP接口開發(9)—— APP版本升級的接口實例

    今天的筆記主要來記錄最後兩個知識要點之一,APP客戶端版本升級的接口開發。
php

    APP的開發主要由偉大而神聖的用戶來更新,更新的流程應該是這樣的:
html

開啓APP——請求初始化接口init.php——檢測是否須要更新---否——首頁mysql

                                                                                       ---是——更新sql

在初始化接口的時候,須要客戶端發送幾個數據:數據庫

    app_id            客戶端id,好比: 1,安卓手機 2,iphone手機
json

    version_id        大版本號id
app

    version_mini     小版本號id
iphone

    did                    用戶客戶端信息(客戶端工程師會獲取這個數據)
post

    encrypt_did       did加密後的字符串(did 加上 APP設備數據表中的key,而後md5)學習

使用一個html表單來模擬一下APP客戶端post發送過來的請求數據:

<!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,關聯的就是設備信息表的主鍵。

    設備信息表,記錄了各類客戶端的信息
    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 $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 

/********************************
*
*   版本升級接口邏輯
*   學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['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接口開發的內容就結束了。學習這個也花費了很多時間   (~ ̄▽ ̄)~

相關文章
相關標籤/搜索