比较版本号大小c语言,App强更逻辑实现以及版本号如何判断大小

//在开发中,经常会遇到有些需求需要app强更,思路大概:所有请求都要带上版本号和渠道(android或ios),然后网关对这些版本号判断,如果发现这些版本号是很旧的,就返回错误码或者标志符告诉app,app做对应的逻辑,如提示用户点击更新之类的

首先在application.yml里配置是否需要强制更新以及当前系统的最新版本:

d73962e0649a9a4e16000953297cc13c.png

之后根据请求参数带过来的版本号进行判断,具体逻辑如下:

//读取配置文件

@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,需要强更

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值