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秒左右,如下图所示~ 显然这种结果很糟 ...
随机推荐
- C# string.Format()格式
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
- 解决C++项目使用sqlite中文乱码问题
我参考的是这篇文章:https://www.2cto.com/database/201411/354891.html 理论是:sqlite使用的是UTF-8,C++中用的字符串是ascii或unico ...
- Android零基础入门第78节:四大组件的纽带——Intent
前面学习Activity时己经多次使用了 Intent,当一个Activity需要启动另一个Activity时, 程序并没有直接告诉系统要启动哪个Activity,而是通过Intent来表达自己的意图 ...
- ASP.NET Core Linux 发布
这篇博客参考了以下文章: 1.http://www.cnblogs.com/ants/p/5732337.html 2.http://www.linuxidc.com/Linux/2016-11/13 ...
- VS2008下QT整合OGRE
环境配置如下:VS2008 QT版本:4.8.1 OGRE版本: 1.7.4 请先配置好QT for vs2008 : 下载QT VS2008的包,然后下个QT VS的插件 版本必须是VS2008 ...
- 使用PNG实现半透明的窗体(使用GDI+)
Delphi中标准控件是不支持png图片的,据说从Window2000后增加gdiplus.dll库处理更多的gdi图像,其中包括png. 关键的几个api GdipCreateBitma ...
- Java 函数传入参数后,究竟发生了什么?java函数传参数原理解析
JAVA函数在传入参数A时,会在函数作用周期内生成一个与参数相同类型的局部变量B. B与A指向同一块内存区域,并且具有相同的名字如param. 在函数内所有对param的操作都是对B的操作.对B进行赋 ...
- Java基础(三) String深度解析
String可以说是Java中使用最多最频繁.最特殊的类,因为同时也是字面常量,而字面常量包括基本类型.String类型.空类型. 一. String的使用 1. String的不可变性 /** * ...
- Laravel:php artisan key:generate三种报错解决方案,修改默认PHP版本(宝塔面板)
为了兼容N多个网站,服务器上有3个PHP版本5.3/5.6/7.2.宝塔默认为5.3,但是laravel5.7并不支持,所以在创建线上 .env 环境配置文件,初始化应用配置时候报错了. cp .en ...
- 玩转java多线程(wait和notifyAll的正确使用姿势)
转载请标明博客的地址 本人博客和github账号,如果对你有帮助请在本人github项目AioSocket上点个star,激励作者对社区贡献 个人博客:https://www.cnblogs.com/ ...