App强更逻辑实现以及版本号如何判断大小
//在开发中,经常会遇到有些需求需要app强更,思路大概:所有请求都要带上版本号和渠道(android或ios),然后网关对这些版本号判断,如果发现这些版本号是很旧的,就返回错误码或者标志符告诉app,app做对应的逻辑,如提示用户点击更新之类的
首先在application.yml里配置是否需要强制更新以及当前系统的最新版本:

之后根据请求参数带过来的版本号进行判断,具体逻辑如下:
//读取配置文件
@Configuration
public class AppConfig {
@Value("${android_last_version}")
private String androidLastVersion;
@Value("${android_force_update}")
private String androidForceUpdate;
@Value("${ios_last_version}")
private String iosLastVersion;
@Value("${ios_force_update}")
private String iosForceUpdate; public String getAndroidLastVersion() {
return androidLastVersion;
} public void setAndroidLastVersion(String androidLastVersion) {
this.androidLastVersion = androidLastVersion;
} public String getAndroidForceUpdate() {
return androidForceUpdate;
} public void setAndroidForceUpdate(String androidForceUpdate) {
this.androidForceUpdate = androidForceUpdate;
} public String getIosLastVersion() {
return iosLastVersion;
} public void setIosLastVersion(String iosLastVersion) {
this.iosLastVersion = iosLastVersion;
} public String getIosForceUpdate() {
return iosForceUpdate;
} public void setIosForceUpdate(String iosForceUpdate) {
this.iosForceUpdate = iosForceUpdate;
}
}
校验逻辑:
package com.example.demo.config; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@Service
public class CheckVersionService {
@Autowired
private AppConfig app; /**
*
* @param version 版本号,如2.1.0
* @param chanel 渠道: android 或者ios
* @return true代表需要强更,在网关对所有请求拦截,发现需要强更时,返回true给app,然后app开发者对结果进行处理,如用户
* 登录app,就弹窗"由于您当前的版本过低,需要更新才能使用",该弹框没法关闭,用户只能更新app
*/
public boolean checkVersion(String version,String chanel){
//判断android是否需要强更
if("android".equals(chanel)&& "y".equals(app.getAndroidForceUpdate())){
if(compareVersion(app.getAndroidLastVersion(),version)>0){
return true;//需要强更
} }
//判断ios是否需要强更
if("ios".equals(chanel)&& "y".equals(app.getIosForceUpdate())){
if(this.compareVersion(app.getIosLastVersion(),version)>0){
return true;//需要强更
} } return false;
} /**
* 比较2个版本号的大小,按位比较,先比较第一位,第一位相等再比较第二位
* @param v1 如 2.1.0
* @param v2 如 3.1.1
* @return
*/
public int compareVersion(String v1,String v2){
if(StringUtils.isEmpty(v1) && StringUtils.isEmpty(v2)){
return 0;
}
if(StringUtils.isEmpty(v1)){
return -1;
}
if(StringUtils.isEmpty(v2)){
return 1;
}
String[] arrV1 = v1.split("\\.");
String[] arrV2 = v2.split("\\.");
int min = Math.min(arrV1.length, arrV2.length); for (int i = 0; i < min; i++) {
return Integer.valueOf(arrV1[i])>Integer.valueOf(arrV2[i])?1:-1; }
if(arrV1.length==arrV2.length){
return 0;
} if(arrV1.length>arrV2.length){
return -1;
}
return 1; }
}
测试:
@Test
public void checkversion() throws IOException {
//配置里最新安卓的版本是2.1.0
System.out.println(checkVersionService.checkVersion("2.1.2", "android"));//false,不需要强更
//配置里最新ios的版本是2.1.0
System.out.println(checkVersionService.checkVersion("1.1.2", "ios"));//true,需要强更 }
App强更逻辑实现以及版本号如何判断大小的更多相关文章
- web网站 Vs 移动App 谁更能打动你?之 产品经理篇
从web1.0到web2.0,由单调变为丰富——无论是内容,呈现,还是用户交互,当我们(接触互联网只有五六年的人)可能还沉浸在这绚丽多彩,啧啧称奇web交互体验之中,移动App不知道在什么时候已经悄然 ...
- 中兴应用之星携手天翼开放平台:让APP开发更简单
日前,业内率先的APP开发平台运营商中兴应用之星与中国电信天翼开放平台达成战略合作.即广大用户通过天翼开放平台,可直接享受到应用之星提供的"APP开发服务". 应用之星.中兴通 ...
- 2条最佳实践App疯狂增长逻辑
2条最佳实践App疯狂增长逻辑 1.不断打造和强化产品的不可或缺属性 产品的核心价值是什么?对你的客户来言,为什么是你? 2.等待“阿哈时刻” 进入快速推广 用户使用产品眼前一亮的时刻,是用户真正发现 ...
- 李洪强漫谈iOS开发[C语言-043]-判断较早日期
李洪强漫谈iOS开发[C语言-043]-判断较早日期
- 云如何让App开发更简单?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 互联网"下半场",移动App开发对于质量.速度的要求更加苛刻.4月初,腾讯云正式上线移动开发平台MobileLine,借 ...
- 让你的app体验更丝滑的11种方法!冲击手机应用榜单Top3指日可待
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由WeTest质量开放平台团队发表于云+社区专栏 一款app除了要有令人惊叹的功能和令人发指交互之外,在性能上也应该追求丝滑的要求,这样 ...
- 融云红包全新升级,让App用户更便捷地用“钱”交流感情!
随着移动互联网的飞速发展,如何增强社交关系.留住用户的心已成为移动社交化时代各类App持续探索的问题,除了接入即时通讯的能力,众多社交平台开始通过趣味性十足的红包功能为App中的社交场景赋能.当即时通 ...
- 如何使用沉浸式状态栏,让你的app风格更好看
大家都知道,传统的手机状态栏非黑即白,经常让整个app显得不是那么的好看,如何让状态栏的颜色跟你整个界面的颜色能够融为一体,这是我们一直想要的,现在给大家展示一下: 由图可见,第一张是没有使用沉浸式状 ...
- 让Android App启动更协调
不知道大伙有没有发现,应用第一次启动的时候一般比较慢(低配置手机尤其如此),黑屏好一段时间,下面是我在模拟器中启动QQ的截图,黑屏差不多有5秒左右,如下图所示~ 显然这种结果很糟 ...
随机推荐
- 数据在数组中存储的顺序:小端 OR 大端模式 详解
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放: 小端模式,是指数据的高 ...
- PHPEXCEL 不能输出中文内容,只显示空白
以他带的示例文件为例 01simple-download-xls.php // Add some data $objPHPExcel->setActiveSheetIndex(0) ...
- .Net 通过Cmd执行Adb命令 /c参数
通过cmd.exe来执行adb命令,可以进行一些命令组合,直接用adb.exe的话只能执行单个adb命令 这里要注意cmd 中的/c参数,指明此参数时,他将执行整个字符串中包含的命令并退出当前cmd运 ...
- 对c&c++源文件和头文件分开的好处的一点认识
对c&c++程序来说,基本上来说都是要把源文件和头文件分别编写.一般都是代表一个基本功能的源文件引用相应的头文件. 一个 相关功能的模块可能有若干对源文件和头文件组成.这是基于组件编程的核心. ...
- 为什么360、百度、腾讯出的Mac端云盘客户端都只有同步盘?(用户量小,同步盘开发成本低,Linux下都没有客户端)
如题,顾名思义,同步盘是用来同步的,不具备增量的功能,像这三家在Windows端出的客户端都是即有同步也有增量的. 陆续出来的,可能大家更多的是跟随策略,不得不提dropbox是这样的形式.mac电脑 ...
- 使用MSYS2环境中编译Qt5.5.0的补丁
Qt的configure脚本对MinGW静态编译支持不太完善,总有这样那样的问题.如果你不嫌麻烦,而且可以接受高版本的Qt的话,可以考虑使用我做的补丁在MSYS2环境中编译.Qt5.4.2的补丁 Qt ...
- 微信公众号开发系列-13、基于RDIFramework.NET框架整合微信开发应用效果展示
1.前言 通过前面一系列文章的学习,我们对微信公众号开发已经有了一个比较深入和全面的了解. 微信公众号开发为企业解决那些问题呢? 我们经常看到微信公众号定制开发.微信公众平台定制开发,都不知道这些能给 ...
- 快速开发平台 WebBuilder 8 发布
快速开发平台 WebBuilder 8 发布 了解:http://www.putdb.com,官网:http://www.geejing.com 什么是WebBuilder? WebBuilder是 ...
- 地球坐标-火星坐标-百度坐标及之间的转换算法 C#
美国GPS使用的是WGS84的坐标系统,以经纬度的形式来表示地球平面上的某一个位置.但在我国,出于国家安全考虑,国内所有导航电子地图必须使 用国家测绘局制定的加密坐标系统,即将一个真实的经纬度坐标加密 ...
- Kafka笔记3
向Kafka写入消息从创建一个ProducerRecord对象开始,ProducerRecord需要包含目标主题和要发送的内容,我们还可以指定键或分区,在发送ProducerRecord对象时,生产者 ...