方案一:后端处理逻辑 - 通过指定数字版本号判断 app/ipad升级
入参数:
appid app应用类型:1.A商城android app、2.A商城android ipad、3.A商城 ios app
cur_version 当前app版本数字号,如99,必须
响应json参数:
code
msg
data
data下字段如下:
1.最新app版本数字号 :new_version,如100,必须
2.用于展示的app版本号 : app_version,如v1.0.1,必须
3.apk或app store下载url : down_url,必须
4.更新文案 : update_desc,必须
5.是否可更新 : is_update,1需要更新,0无需更新,必须
6.是否强制更新 : force_update,1强升、0无需强升,必须
7.apk大小:app_size,单位字节,必须
8.apk文件md5值:apk_md5,字符串,可选
json示例:
{
"code": 0,
"msg": "",
"data": {
"new_version": 100,
"app_version": "v1.0.1",
"down_url": "http://www.nfangbian.com/app.apk",
"update_desc": "优化app体验",
"is_update": 1,
"force_update": 0,
"app_size": "1000000",
"apk_md5": ""
}
}
服务端判断逻辑:
查询最新版本信息
SQL: select * from t_app_upgrade where appid=1 and is_delete=0 order by new_version desc limit 1;
1. 默认值is_update = 0, force_update = 0
2. 如果cur_version < new_version,则is_update = 1
3. 如果cur_version < min_version,则force_update = 1
4. 如果cur_version >= min_version,则force_update = 0
5. 如果cur_version == new_version,则is_update = 0
表结构:
CREATE TABLE `t_app_upgrade` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`appid` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT 'app应用类型:1.A商城 android app 、2.A商城 android ipad、3.A商城 ios app',
`app_name` varchar(20) NOT NULL DEFAULT '' COMMENT 'App名称,如A商城',
`update_desc` varchar(155) NOT NULL DEFAULT '' COMMENT '更新文案',
`app_version` varchar(20) NOT NULL DEFAULT '' COMMENT '当前app版本,用于展示的,如v1.0.1',
`new_version` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '数字版本号,最新版本按这个倒序排即可,例如100就代表是v1.0.1版本',
`min_version` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '适合最小版本号,如80',
`down_url` varchar(255) NOT NULL DEFAULT '' COMMENT 'apk或者app store下载地址',
`apk_size` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'apk文件大小,单位字节,对ios值为空',
`apk_md5` varchar(50) NOT NULL DEFAULT '' COMMENT 'apk文件md5值,对ios值为空',
`is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除 0-正常 1-删除',
`create_time` int(10) NOT NULL DEFAULT 0 COMMENT '创建时间',
`update_time` int(10) NOT NULL DEFAULT 0 COMMENT '修改时间',
`delete_time` int(10) NOT NULL DEFAULT 0 COMMENT '删除时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `appidversionno` (`appid`,`cur_version`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='app升级信息表';
方案二:后端处理逻辑 - 考虑android和ios app/ipad升级,只录入最新上线版本的前一个版本升级策略
入参数:
appid app应用类型:1.A商城 android app、2.A商城 ios app,3.A商城 android ipad、4.A商城 ios ipad, 必须
app_version 当前app版本号(非数字版本),如v1.0.0 或者 1.0.0,为了兼容,服务端接收到v开头的版本,自动去掉大小写的v字母,必须
响应json参数:
code
msg
data
data字段不为空情况下:
1. 原样返回的app版本号 : app_version,如v1.0.1,必须
2. app下载url : down_url,必须
3. 更新文案 : update_desc,必须
4. 更新方式: update_type,0可选更新,1强制更新,必须
5. apk大小:app_size,单位字节,对andorid必须,对ios值为空
6. apk文件md5值:apk_md5,字符串,可选
情况1-data为空则客户端无需升级:
{
"code": 0,
"msg": "",
"data": {}
}
情况2-有对应版本的升级策略:
{
"code": 0,
"msg": "",
"data": {
"app_version": "1.0.0",
"down_url": "http://www.nfangbian.com/app.apk",
"update_desc": "优化app体验",
"update_type": 0,
"app_size": "1000000",
"apk_md5": ""
}
}
服务端判断逻辑:
1. 查询指定版本的信息SQL: select * from t_app_upgrade02 where appid=1 and app_version='1.0.1' and is_delete=0 limit 1;
2. 如果没有查询到记录则不做更新,返回data为空对象
3. 如果查询到记录,则再查询 select * from t_app_upgrade02_lastinfo where appid=1 and is_lastversion=1 and is_delete=0 limit 1;同时拼接1和3返回的记录放入data对象中
表结构:
CREATE TABLE `t_app_upgrade02` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`appid` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT 'app应用类型:1.A商城 android app、2.A商城 ios app、3.A商城 ios ipad、4.A商城 android ipad',
`app_version` varchar(20) NOT NULL DEFAULT '' COMMENT '指定的app版本号,1.0.1',
`update_type` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '更新方式,0可选更新,1强制更新',
`is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除 0-正常 1-删除',
`create_time` int(10) NOT NULL DEFAULT 0 COMMENT '创建时间',
`update_time` int(10) NOT NULL DEFAULT 0 COMMENT '修改时间',
`delete_time` int(10) NOT NULL DEFAULT 0 COMMENT '删除时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `appidversion` (`appid`,`app_version`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='android和ios app升级表';
CREATE TABLE `t_app_upgrade02_lastinfo` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`appid` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT 'app应用类型:1.A商城 android app、2.A商城 ios app、3.A商城 ios ipad、4.A商城 android ipad',
`last_version` varchar(20) NOT NULL DEFAULT '' COMMENT '最新app版本号,1.0.1',
`is_lastversion` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT '是否最新版本记录,0历史版本记录,1最新版本记录,对于同一个appid和last_version的is_lastversion值为1的只有一条',
`app_name` varchar(20) NOT NULL DEFAULT '' COMMENT 'App名称,如商城A',
`update_desc` varchar(155) NOT NULL DEFAULT '' COMMENT '最新版本的更新文案',
`down_url` varchar(255) NOT NULL DEFAULT '' COMMENT '如果应用类型是android则为apk下载地址,如果应用是ios则为app store下载地址',
`apk_size` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'apk文件大小,单位字节,仅对android有效',
`apk_md5` varchar(50) NOT NULL DEFAULT '' COMMENT 'apk文件md5值,仅对android有效',
`is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除 0-正常 1-删除',
`create_time` int(10) NOT NULL DEFAULT 0 COMMENT '创建时间',
`update_time` int(10) NOT NULL DEFAULT 0 COMMENT '修改时间',
`delete_time` int(10) NOT NULL DEFAULT 0 COMMENT '删除时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `appidversion` (`appid`,`last_version`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='android和ios app版本信息表';
方案三-下发最新版本的信息,由客户端判断是否升级及强升逻辑
入参数:
appid app应用类型:1.A商城、2.B商城,必须
app_type 终端类型,1.android app,2.andorid ipad,3.ios app ,必须
响应json参数:
code
msg
data
情况1-data为空则客户端无需升级:{ "code": 0, "msg": "", "data": { } }
情况2-有最新版本信息:
{
"code": 0,
"msg": "",
"data": {
"last_version": "1.0.0",
"min_version": "",
"down_url": "http://www.nfangbian.com/app.apk",
"update_desc": "升级文案",
"update_type": 0,
"app_size": "1000000",
"apk_md5": ""
}
}
查询记录
sql: select * from t_app_upgrade03_lastinfo where appid=1 and app_type=1 and is_lastversion=1 and is_delete=0 limit 1;
客户端判断逻辑:
update_type表升级方式,0不升级,1可选升级,2强制升级
默认值update_type = 0
如果cur_version < last_version,则update_type = 1
如果cur_version < min_version,则update_type = 2
表结构
CREATE TABLE `t_app_upgrade03_lastinfo` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`appid` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT 'app应用类型:1.A商城、2.B商城、3.C商城',
`app_type` tinyint(4) unsigned DEFAULT 0 COMMENT '终端类型,1.app,2.ipad',
`last_version` varchar(20) NOT NULL DEFAULT '' COMMENT '最新app版本号,1.0.1',
`is_lastversion` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT '是否最新版本记录,0历史版本记录,1最新版本记录,对于同一个appid和last_version的is_lastversion值为1的只有一条',
`min_version` varchar(20) NOT NULL DEFAULT '' COMMENT 'App客户端版本小于这个版本则强升',
`app_name` varchar(20) NOT NULL DEFAULT '' COMMENT 'App名称,如A商城',
`update_desc` varchar(155) NOT NULL DEFAULT '' COMMENT '最新版本的更新文案',
`down_url` varchar(255) NOT NULL DEFAULT '' COMMENT '如果应用类型是android则为apk下载地址,如果应用是ios则为app store下载地址',
`apk_size` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'apk文件大小,单位字节,仅对android有效',
`apk_md5` varchar(50) NOT NULL DEFAULT '' COMMENT 'apk文件md5值,仅对android有效',
`is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除 0-正常 1-删除',
`create_time` int(10) NOT NULL DEFAULT 0 COMMENT '创建时间',
`update_time` int(10) NOT NULL DEFAULT 0 COMMENT '修改时间',
`delete_time` int(10) NOT NULL DEFAULT 0 COMMENT '删除时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `appidversion` (`appid`,`last_version`,`app_type`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='android和ios app最新版本信息表';
方案四: 服务器端判断
入参数:
appid app应用类型:1.A商城、2.B商城,必须
app_type 终端类型,1.android app,2.andorid ipad,3.ios app ,4.ios ipad,必须
cur_version 客户端当前app版本,如1.0.1,v1.0.1,必须
响应json参数:
code
msg
data
data字段不为空情况下:
1. 升级方式: update_type,0无需更新,1可选更新,2强制更新,必须
2. 最新app版本号 : app_version,如1.0.1,必须
3. app下载url : down_url,android是apk地址,ios是appstore地址,必须
4. 更新文案 : update_desc,必须
5. apk大小:app_size,单位字节,对andorid必须,对ios值为空
6. apk文件md5值:apk_md5,字符串,可选
情况1-客户端兼容一下,如果data为空则客户端无需升级:{ "code": 0, "msg": "","data": { } }
响应示例2:
{
"code": 0,
"msg": "",
"data": {
"update_type": 0,
"app_version": "1.0.0",
"down_url": "http://www.nfangbian.com/app.apk",
"update_desc": "优化app体验",
"app_size": "1000000",
"apk_md5": ""
}
}
服务端判断逻辑:
1. 把接收的app版本换算成权重,$cur_version = '1.0.1';
$last_versionno=versionToWeight($cur_version);//100000001
//只支持三段式、四段式的,每段最多4位
function versionToWeight($version) {
$tmp = explode(".", $version);
switch(count($tmp)) {
case 1:
$number = $tmp[0];
break;
case 2:
$number = $tmp[0]*10000+$tmp[1];
break;
case 3:
$number = $tmp[0]*100000000+$tmp[1]*10000+$tmp[2];
break;
case 4:
$number = $tmp[0]*1000000000000 + $tmp[1]*100000000+$tmp[2]*10000+$tmp[3];; //不支持
break;
default:
$number = 0; //不支持
break;
}
return $number;
}
2. 查询最新版本记录: select * from t_app_upgrade04 where appid=1 and app_type=1 and is_delete=0 order by last_versionno desc limit 1;
3. update_type表升级方式,0不升级,1可选升级,2强制升级
默认值update_type = 0
如果cur_version版本在强升白名单内(在php中配置),则update_type = 2
如果cur_version < last_version,则update_type = 1
如果cur_version < min_version,则update_type = 2
表结构
CREATE TABLE `t_app_upgrade04` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`appid` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT 'app应用类型:1.A商城、2.B商城、3.C商城',
`app_type` tinyint(4) unsigned DEFAULT 0 COMMENT '终端类型,1.android app,2.andorid ipad,3.ios app ',
`last_version` varchar(20) NOT NULL DEFAULT '' COMMENT '最新app版本号,1.0.1',
`last_versionno` bigint(20) NOT NULL DEFAULT 0 COMMENT '最新app版本号,1.0.1对应的权重值,值越大的为最新版本',
`min_version` varchar(20) NOT NULL DEFAULT '' COMMENT 'App客户端版本小于这个版本则强升',
`app_name` varchar(20) NOT NULL DEFAULT '' COMMENT 'App名称,如A商城',
`update_desc` varchar(155) NOT NULL DEFAULT '' COMMENT '最新版本的更新文案',
`down_url` varchar(255) NOT NULL DEFAULT '' COMMENT '如果应用类型是android则为apk下载地址,如果应用是ios则为app store下载地址',
`apk_size` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'apk文件大小,单位字节,仅对android有效',
`apk_md5` varchar(50) NOT NULL DEFAULT '' COMMENT 'apk文件md5值,仅对android有效',
`is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除 0-正常 1-删除',
`create_time` int(10) NOT NULL DEFAULT 0 COMMENT '创建时间',
`update_time` int(10) NOT NULL DEFAULT 0 COMMENT '修改时间',
`delete_time` int(10) NOT NULL DEFAULT 0 COMMENT '删除时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `appidversion` (`appid`,`app_type`,`last_version`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='app版本升级信息表';