赞
踩
//在开发中,经常会遇到有些需求需要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,需要强更
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。