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

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM