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秒左右,如下图所示~ 显然这种结果很糟 ...
随机推荐
- 活锁(livelock) 专题
活锁(livelock) 活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败. 活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于 ...
- windows界面程序设计,设置一个窗口始终在屏幕最前,SetWindowPos函数
有时这种需求还是很必须的,比如现在做的一个登录验证系统,如果在windows登录界面点击到窗口外面,那窗口就会永远隐藏掉没法再启用了.这种情况必须设置该窗口一直在最前. 使用函数SetWindowPo ...
- ManualResetEvent 让你的代码等你几分钟
using System;using System.Collections.Generic;using System.Linq;using System.Threading; namespace Co ...
- Devart Blog
How to combine data from several sources using SQL and VirtualQueryhttp://blog.devart.com/how-to-com ...
- 基于CKEditor 你能做很多App。CKEditor 4.5 and CKFinder 3 beta 发布
直击现场 CKEditor 4.5 and CKFinder 3 beta 发布 oschina 发布于: 2015年04月10日 (0评) 分享到: 收藏 +5 4月18日 武汉 源创会开始报 ...
- linux+php+swoole解决方案
服务器接收巨量的并发我使用linux+php+swoole解决方案.简单快速高效 并发量大 稳定 http://www.swoole.com/
- Homebrew 1.0.0 发布,MacOS 上的包管理器,比如安装qt5keychain
神器,没有它不知道怎么用macos https://www.oschina.net/news/77367/homebrew-1-0-0 Mac OS X用户,qt5keychain可以使用homebr ...
- Hadoop集群(第6期)JDK和SSH无密码配置
1.Linux配置java环境变量 1.1 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录,执行命令 ./jdk-6u14-linux-i586.bi ...
- Android-小小设置永久解决程序因为未捕获异常而异常终止的问题
(一) 前言各位亲爱的午饭童鞋,是不是经常因为自己的程序中出现未层捕获的异常导致程序异常终止而痛苦不已?嗯,是的.. 但是,大家不要怕,今天给大家分享一个东东可以解决大家这种困扰,吼吼! (二) Un ...
- windows环境利用hexo+github搭建个人博客
一.下载安装Git 下载地址:https://gitforwindows.org/ 二.下载安装node.js 下载地址:https://nodejs.org/en/ 三.安装hexo 利用 npm ...