android app升级方案,App版本升级方案
方案一:后端处理逻辑 - 通过指定数字版本号判断 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版本升级信息表';
android app升级方案,App版本升级方案相关推荐
- 无懈可击 Android 内部升级
code小生,一个专注 Android 领域的技术平台 公众号回复 Android 加入我的安卓技术群 作者:码农一颗颗 链接:https://www.jianshu.com/p/ebc5b4a3d2 ...
- 平板升级android版本号,App版本升级方案
App版本升级方案小结 方案一:后端处理逻辑 - 通过指定数字版本号判断 app/ipad升级 入参数: appid app应用类型:1.A商城android app.2.A商城android ipa ...
- Android 系统级APP 升级方案 按键恢复出厂设置
先敲黑板:(更多内容请关注专栏,支持原创) 概要:本文介绍内容有UBOOT BCB 系统级APP固化到固件 通过UBOOT完成按键触发恢复出厂设置,即恢复系统APP的方案 高质量文章导航 一.坐稳发车 ...
- flutter跨平台开发之App升级方案
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 精通点的可以查看这里 精述 Flutter 从入门实践到开发一个APP之UI基础篇 视频 Flutter 从 ...
- 成品app直播源码中Android酷炫礼物动画实现方案(上篇)
成品app直播源码中Android酷炫礼物动画实现方案(上篇) +在当下移动直播火爆的年代,如果你曾经使用过移动端直播应用,相信会被里面那令人惊叹的礼物动画效果迷住,比如像下面这样的效果. 从开发人员 ...
- Android APP全局黑白化实现方案
作者:小帅 链接:https://zhuanlan.zhihu.com/p/587516253 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在清明节时各大APP都 ...
- Android外部调起App方案
背景 日常使用场景中经常需要从app外部唤起app,比如短信链接,浏览器页面点击按钮等.传统的方式都可以使用android系统自带的拦截url ,也就是schema方式,但这种方式在拦截生效时会弹出所 ...
- React Native App版本升级方案解析
欢迎大家关注[跨平台开发那些事]公众号,定期推送跨平台开发技术实践. 源码已开源到Github,地址请点击:react-native-upgrade 欢迎大家star,fork..... App版本 ...
- 产品策划四:App升级系统策划方案
没有哪一个app一个版本就可以将功能开发完全,满足用户所有的需求.而且在竞争激烈的互联网行业,和对手拼的是时间速度,用户也不会有耐心等待你长时间打磨一个产品.小步快跑,快速迭代也是移动app最流行的开 ...
最新文章
- 自定义checkbox,redio等
- OpenStack基金会的白金和黄金成员公司
- Zabbix的故障与恢复邮件设置
- Asp.Net MVC CodeFirst模式数据库迁移步骤
- 深入解析Windows系统两大进程
- Photoshop图像修饰工具
- 大地震!某大厂“硬核”抢人,放话:只要AI人才,高中毕业都行!
- 你的下一代iPhone何必是iPhone,苹果或将于2022年推出AR设备取代手机
- iphone11边框喇手问题_iPhone12手感如何 直角边框真的会割手吗?
- 计算机专业指南考试题6,计算机专业指南考试题.doc
- html获取视频时长,js获取本地视频时间长度
- 结构建模设计——Solidworks 2021SP5稳定版软件安装详细教程(安装踩坑记录全流程总结)
- c语言数据类型转换规律,c语言,数据类型转换
- Detected applied migration not resolved locally:
- UVC 摄像头驱动(二)描述符分析
- 腾讯信鸽集成华为厂商通道
- 深信服2008校园招聘笔试题
- 20个vue开源项目免费模板源码
- 加速度计和陀螺仪解析
- 访问修饰符有哪些?及作用范围
热门文章
- 【C#+Socker+SQL Server】实现可多人联机和对话的五子棋游戏 五:五子棋大厅窗体设计(附源码和资源)
- python apply函数的用法
- 多标签、多窗口文件管理工具 —— 百页窗
- IT项目管理之第4章 项目范围管理习题
- 手机安装python3.5_zzw_非root用户安装python3.5
- rust大量科技零件_并完美解决了业务瓶颈,Rust不是垃圾收集的语言
- 计算机存储标密文件,机关单位计算机保读密管理.doc
- DataGrip连接hive报错:[ 08S01] Could not open client transport with JDBC Uri: jdbc:hive2://hadoop102:1000
- 数据库:mysql基本增删查改
- Linux系统设置WiFi热点