1、概述
APP升级分为两种类型
- 强制升级。
- APP不升级,将无法使用。
- 非强制升级。
- 提示用户升级,用户可以选择不升级。
1.1 设计实现
- 版本控制
- APP:当前安装的版本号。
- 数据库:记录所有的版本号。
- 升级检测
- 启动APP:用户在启动APP时,首先检测当前APP是不是最新版本。
- 定时任务:定时检测当前APP是不是最新版本。
- 升级通知
- 推送通知:通知中可以包含新版本的信息(如版本号、下载链接等)。
- 安装
- 应用市场:将最新APP推送到应用市场。
- 本地安装:主要针对的Android手机。安装包在服务器上,可以下载安装。如果用户量大,可以通过cdn加速。
- 新手引导
- 引导用户使用新版本的功能。
1.2 流程图
2、表设计
2.1 表结构
CREATE TABLE `t_app_version` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`os` tinyint(1) NOT NULL DEFAULT '0' COMMENT '系统 0:Android;1:IOS;',
`version` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '版本号',
`version_seq` int NOT NULL DEFAULT '1' COMMENT '版本顺序号',
`version_desc` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '版本描述',
`download_url` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '版本下载地址,只有Android需要',
`online_time` datetime NOT NULL COMMENT '上线时间',
`forced_update` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否强制更新 0:询问更新; 1:强制更新。',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '更新时间',
`is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除 0:未删除;1:删除;',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_os_version_seq` (`os`,`version_seq`),
KEY `idx_online_time` (`online_time`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='APP版本信息';
- version_seq:版本顺序号。数字类型,用来判断版本高低的。
- version_desc:版本描述。上线了哪些功能。
- download_url:版本下载地址,只有Android需要。因为IOS只能在APP store安装。
- online_time:上线时间。这个版本的上线时间。
2.2 示例数据
INSERT INTO `t_app_version` (`id`, `os`, `version`, `version_seq`, `version_desc`, `download_url`, `online_time`, `forced_update`, `create_time`, `update_time`, `is_delete`) VALUES (1, 0, 'v1.0', 10, '第一版', 'https://image.cws930.xyz/CellPhonesAccessories', '2021-11-29 06:23:55', 1, '2002-09-22 03:30:16', '2012-02-19 23:01:12', 0);
INSERT INTO `t_app_version` (`id`, `os`, `version`, `version_seq`, `version_desc`, `download_url`, `online_time`, `forced_update`, `create_time`, `update_time`, `is_delete`) VALUES (2, 1, 'v1.0', 10, '第一版', NULL, '2021-11-29 06:23:55', 1, '2000-02-10 11:00:00', '2005-04-10 07:17:10', 0);
INSERT INTO `t_app_version` (`id`, `os`, `version`, `version_seq`, `version_desc`, `download_url`, `online_time`, `forced_update`, `create_time`, `update_time`, `is_delete`) VALUES (3, 0, 'v1.1', 11, '修复bug', 'http://www.nakayamayu.org/BaggageTravelEquipment', '2021-12-01 06:23:55', 0, '2014-01-31 21:57:05', '2019-02-04 11:31:43', 0);
INSERT INTO `t_app_version` (`id`, `os`, `version`, `version_seq`, `version_desc`, `download_url`, `online_time`, `forced_update`, `create_time`, `update_time`, `is_delete`) VALUES (4, 1, 'v1.1', 11, '修复bug', NULL, '2021-12-01 06:23:55', 0, '2001-09-04 05:11:07', '2008-03-24 22:14:32', 0);
INSERT INTO `t_app_version` (`id`, `os`, `version`, `version_seq`, `version_desc`, `download_url`, `online_time`, `forced_update`, `create_time`, `update_time`, `is_delete`) VALUES (5, 0, 'v2.0', 20, '新增功能', 'http://video.hiutunglai.co.jp/Appliances', '2022-01-01 06:23:55', 0, '2017-05-16 09:08:48', '2015-03-04 20:08:40', 0);
INSERT INTO `t_app_version` (`id`, `os`, `version`, `version_seq`, `version_desc`, `download_url`, `online_time`, `forced_update`, `create_time`, `update_time`, `is_delete`) VALUES (6, 1, 'v2.0', 20, '新增功能', NULL, '2022-01-01 06:23:55', 0, '2017-05-16 09:08:48', '2015-03-04 20:08:40', 0);
2.3 升级查询sql
SELECT
*
FROM
t_app_version
WHERE
is_delete = 0
AND online_time > now()
AND version_seq > $ { version_seq };
- $ { version_seq }为用户的安装版本,有APP前端提供。
- APP升级的逻辑
- 没记录,用户不需要升级。
- 有需要强更的记录,用户必须升级到最新版本。
- 没有强更记录,提示用户升级。
3、安装包
- 下载安装包:没有版本号。用户下载时,永远是最新版。
- 备份安装包:有版本号。如果失败,可以回滚到历史版本。