App版本升級方案

參考引用:App版本升級方案

方案一:後端處理邏輯 - 通過指定數字版本號判斷 app/ipad升級

入參數:

appid app應用類型:1.A商城android app、2.A商城android ipad、3.A商城 ios app
cur_version 當前app版本數字號,如99,必須

響應json參數:

code
msg
data

data下字段如下:

            1.最新app版本數字號 :new_version,如100,必須
            2.用於展示的app版本號 : app_version,如v1.0.1,必須
            3.apk或app store下載url : down_url,必須
            4.更新文案 : update_desc,必須
            5.是否可更新 : is_update,1需要更新,0無需更新,必須
            6.是否強制更新 : force_update,1強升、0無需強升,必須
            7.apk大小:app_size,單位字節,必須
            8.apk文件md5值:apk_md5,字符串,可選

json示例:

{

    "code": 0,
    "msg": "",
    "data": {
        "new_version": 100,
        "app_version": "v1.0.1",
        "down_url": "http://www.nfangbian.com/app.apk",
        "update_desc": "優化app體驗",
        "is_update": 1,
        "force_update": 0,
        "app_size": "1000000",
        "apk_md5": ""
    }
}
服務端判斷邏輯:
        查詢最新版本信息
                    SQL: select * from t_app_upgrade where appid=1 and is_delete=0 order by new_version desc limit 1;

        1. 默認值is_update = 0, force_update = 0
        2. 如果cur_version < new_version,則is_update = 1
        3. 如果cur_version < min_version,則force_update = 1
        4. 如果cur_version >= min_version,則force_update = 0
        5. 如果cur_version == new_version,則is_update = 0
表結構:
CREATE TABLE `t_app_upgrade` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
    `appid` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT 'app應用類型:1.A商城 android app 、2.A商城 android ipad、3.A商城 ios app',
    `app_name` varchar(20) NOT NULL DEFAULT '' COMMENT 'App名稱,如A商城',
    `update_desc` varchar(155) NOT NULL DEFAULT '' COMMENT '更新文案',
    `app_version` varchar(20) NOT NULL DEFAULT '' COMMENT '當前app版本,用於展示的,如v1.0.1',
    `new_version` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '數字版本號,最新版本按這個倒序排即可,例如100就代表是v1.0.1版本',
    `min_version` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '適合最小版本號,如80',
    `down_url` varchar(255) NOT NULL DEFAULT '' COMMENT 'apk或者app store下載地址',
    `apk_size` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'apk文件大小,單位字節,對ios值爲空',
    `apk_md5` varchar(50) NOT NULL DEFAULT '' COMMENT 'apk文件md5值,對ios值爲空',
    `is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否刪除 0-正常 1-刪除',
    `create_time` int(10) NOT NULL DEFAULT 0 COMMENT '創建時間',
    `update_time` int(10) NOT NULL DEFAULT 0 COMMENT '修改時間',
    `delete_time` int(10) NOT NULL DEFAULT 0 COMMENT '刪除時間',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `appidversionno` (`appid`,`cur_version`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='app升級信息表';

方案二:後端處理邏輯 - 考慮android和ios app/ipad升級,只錄入最新上線版本的前一個版本升級策略

入參數:

appid app應用類型:1.A商城 android app、2.A商城 ios app,3.A商城 android ipad、4.A商城 ios ipad, 必須
app_version 當前app版本號(非數字版本),如v1.0.0 或者 1.0.0,爲了兼容,服務端接收到v開頭的版本,自動去掉大小寫的v字母,必須

響應json參數:

code
msg
data

data字段不爲空情況下:

1. 原樣返回的app版本號 : app_version,如v1.0.1,必須
2. app下載url : down_url,必須
3. 更新文案 : update_desc,必須
4. 更新方式: update_type,0可選更新,1強制更新,必須
5. apk大小:app_size,單位字節,對andorid必須,對ios值爲空
6. apk文件md5值:apk_md5,字符串,可選
情況1-data爲空則客戶端無需升級:
{
    "code": 0,
    "msg": "",
    "data": {}
}
情況2-有對應版本的升級策略:
{
"code": 0,
"msg": "",
"data": {
    "app_version": "1.0.0",
    "down_url": "http://www.nfangbian.com/app.apk",
    "update_desc": "優化app體驗",
    "update_type": 0,
    "app_size": "1000000",
    "apk_md5": ""
  }
}
服務端判斷邏輯:
1. 查詢指定版本的信息SQL: select * from t_app_upgrade02 where appid=1 and app_version='1.0.1' and is_delete=0 limit 1;
2. 如果沒有查詢到記錄則不做更新,返回data爲空對象
3. 如果查詢到記錄,則再查詢 select * from t_app_upgrade02_lastinfo where appid=1 and is_lastversion=1 and is_delete=0 limit 1;同時拼接1和3返回的記錄放入data對象中
表結構:
CREATE TABLE `t_app_upgrade02` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
    `appid` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT 'app應用類型:1.A商城 android app、2.A商城 ios app、3.A商城 ios ipad、4.A商城 android ipad',
    `app_version` varchar(20) NOT NULL DEFAULT '' COMMENT '指定的app版本號,1.0.1',
    `update_type` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '更新方式,0可選更新,1強制更新',
    `is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否刪除 0-正常 1-刪除',
    `create_time` int(10) NOT NULL DEFAULT 0 COMMENT '創建時間',
    `update_time` int(10) NOT NULL DEFAULT 0 COMMENT '修改時間',
    `delete_time` int(10) NOT NULL DEFAULT 0 COMMENT '刪除時間',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `appidversion` (`appid`,`app_version`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='android和ios app升級表';

CREATE TABLE `t_app_upgrade02_lastinfo` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
    `appid` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT 'app應用類型:1.A商城 android app、2.A商城 ios app、3.A商城 ios ipad、4.A商城 android ipad',
    `last_version` varchar(20) NOT NULL DEFAULT '' COMMENT '最新app版本號,1.0.1',
    `is_lastversion` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT '是否最新版本記錄,0歷史版本記錄,1最新版本記錄,對於同一個appid和last_version的is_lastversion值爲1的只有一條',
    `app_name` varchar(20) NOT NULL DEFAULT '' COMMENT 'App名稱,如商城A',
    `update_desc` varchar(155) NOT NULL DEFAULT '' COMMENT '最新版本的更新文案',
    `down_url` varchar(255) NOT NULL DEFAULT '' COMMENT '如果應用類型是android則爲apk下載地址,如果應用是ios則爲app store下載地址',
    `apk_size` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'apk文件大小,單位字節,僅對android有效',
    `apk_md5` varchar(50) NOT NULL DEFAULT '' COMMENT 'apk文件md5值,僅對android有效',
    `is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否刪除 0-正常 1-刪除',
    `create_time` int(10) NOT NULL DEFAULT 0 COMMENT '創建時間',
    `update_time` int(10) NOT NULL DEFAULT 0 COMMENT '修改時間',
    `delete_time` int(10) NOT NULL DEFAULT 0 COMMENT '刪除時間',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `appidversion` (`appid`,`last_version`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='android和ios app版本信息表';

方案三-下發最新版本的信息,由客戶端判斷是否升級及強升邏輯

入參數:

appid app應用類型:1.A商城、2.B商城,必須
app_type 終端類型,1.android app,2.andorid ipad,3.ios app ,必須

響應json參數:

code
msg
data
情況1-data爲空則客戶端無需升級:{ "code": 0, "msg": "", "data": { } }
情況2-有最新版本信息:
{
"code": 0,
"msg": "",
"data": {
    "last_version": "1.0.0",
    "min_version": "",
    "down_url": "http://www.nfangbian.com/app.apk",
    "update_desc": "升級文案",
    "update_type": 0,
    "app_size": "1000000",
    "apk_md5": ""
  }
}
查詢記錄
sql: select * from t_app_upgrade03_lastinfo where appid=1 and app_type=1 and is_lastversion=1 and is_delete=0 limit 1;
客戶端判斷邏輯:

update_type表升級方式,0不升級,1可選升級,2強制升級

  1. 默認值update_type = 0
  2. 如果cur_version < last_version,則update_type = 1
  3. 如果cur_version < min_version,則update_type = 2
表結構
CREATE TABLE `t_app_upgrade03_lastinfo` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
    `appid` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT 'app應用類型:1.A商城、2.B商城、3.C商城',
    `app_type` tinyint(4) unsigned DEFAULT 0 COMMENT '終端類型,1.app,2.ipad',
    `last_version` varchar(20) NOT NULL DEFAULT '' COMMENT '最新app版本號,1.0.1',
    `is_lastversion` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT '是否最新版本記錄,0歷史版本記錄,1最新版本記錄,對於同一個appid和last_version的is_lastversion值爲1的只有一條',
    `min_version` varchar(20) NOT NULL DEFAULT '' COMMENT 'App客戶端版本小於這個版本則強升',
    `app_name` varchar(20) NOT NULL DEFAULT '' COMMENT 'App名稱,如A商城',
    `update_desc` varchar(155) NOT NULL DEFAULT '' COMMENT '最新版本的更新文案',
    `down_url` varchar(255) NOT NULL DEFAULT '' COMMENT '如果應用類型是android則爲apk下載地址,如果應用是ios則爲app store下載地址',
    `apk_size` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'apk文件大小,單位字節,僅對android有效',
    `apk_md5` varchar(50) NOT NULL DEFAULT '' COMMENT 'apk文件md5值,僅對android有效',
    `is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否刪除 0-正常 1-刪除',
    `create_time` int(10) NOT NULL DEFAULT 0 COMMENT '創建時間',
    `update_time` int(10) NOT NULL DEFAULT 0 COMMENT '修改時間',
    `delete_time` int(10) NOT NULL DEFAULT 0 COMMENT '刪除時間',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `appidversion` (`appid`,`last_version`,`app_type`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='android和ios app最新版本信息表';

方案四: 服務器端判斷

入參數:

appid app應用類型:1.A商城、2.B商城,必須
app_type 終端類型,1.android app,2.andorid ipad,3.ios app ,4.ios ipad,必須
cur_version 客戶端當前app版本,如1.0.1,v1.0.1,必須

響應json參數:

code
msg
data
data字段不爲空情況下:
1. 升級方式: update_type,0無需更新,1可選更新,2強制更新,必須
2. 最新app版本號 : app_version,如1.0.1,必須
3. app下載url : down_url,android是apk地址,ios是appstore地址,必須
4. 更新文案 : update_desc,必須
5. apk大小:app_size,單位字節,對andorid必須,對ios值爲空
6. apk文件md5值:apk_md5,字符串,可選
 情況1-客戶端兼容一下,如果data爲空則客戶端無需升級:{ "code": 0, "msg": "","data": { } }
響應示例2:
{
    "code": 0,
    "msg": "",
    "data": {
        "update_type": 0,
        "app_version": "1.0.0",
        "down_url": "http://www.nfangbian.com/app.apk",
        "update_desc": "優化app體驗",
        "app_size": "1000000",
        "apk_md5": ""
    }
}
服務端判斷邏輯:
1. 把接收的app版本換算成權重,$cur_version = '1.0.1';
        $last_versionno=versionToWeight($cur_version);//100000001
        //只支持三段式、四段式的,每段最多4位
        function versionToWeight($version) {
            $tmp = explode(".", $version);
            switch(count($tmp)) {
            case 1:
                $number = $tmp[0];
            break;
            case 2:
                $number = $tmp[0]*10000+$tmp[1];
            break;
            case 3:
                $number = $tmp[0]*100000000+$tmp[1]*10000+$tmp[2];
            break;
            case 4:
                $number = $tmp[0]*1000000000000 + $tmp[1]*100000000+$tmp[2]*10000+$tmp[3];; //不支持
            break;
            default:
                $number = 0; //不支持
            break;
                }
            return $number;
        }
2. 查詢最新版本記錄: select * from t_app_upgrade04 where appid=1 and app_type=1 and is_delete=0 order by last_versionno desc limit 1;
3. update_type表升級方式,0不升級,1可選升級,2強制升級
        默認值update_type = 0
        如果cur_version版本在強升白名單內(在php中配置),則update_type = 2
        如果cur_version < last_version,則update_type = 1
        如果cur_version < min_version,則update_type = 2
表結構
CREATE TABLE `t_app_upgrade04` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
    `appid` tinyint(4) unsigned NOT NULL DEFAULT 0 COMMENT 'app應用類型:1.A商城、2.B商城、3.C商城',
    `app_type` tinyint(4) unsigned DEFAULT 0 COMMENT '終端類型,1.android app,2.andorid ipad,3.ios app ',
    `last_version` varchar(20) NOT NULL DEFAULT '' COMMENT '最新app版本號,1.0.1',
    `last_versionno` bigint(20) NOT NULL DEFAULT 0 COMMENT '最新app版本號,1.0.1對應的權重值,值越大的爲最新版本',
    `min_version` varchar(20) NOT NULL DEFAULT '' COMMENT 'App客戶端版本小於這個版本則強升',
    `app_name` varchar(20) NOT NULL DEFAULT '' COMMENT 'App名稱,如A商城',
    `update_desc` varchar(155) NOT NULL DEFAULT '' COMMENT '最新版本的更新文案',
    `down_url` varchar(255) NOT NULL DEFAULT '' COMMENT '如果應用類型是android則爲apk下載地址,如果應用是ios則爲app store下載地址',
    `apk_size` int(10) unsigned NOT NULL DEFAULT 0 COMMENT 'apk文件大小,單位字節,僅對android有效',
    `apk_md5` varchar(50) NOT NULL DEFAULT '' COMMENT 'apk文件md5值,僅對android有效',
    `is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否刪除 0-正常 1-刪除',
    `create_time` int(10) NOT NULL DEFAULT 0 COMMENT '創建時間',
    `update_time` int(10) NOT NULL DEFAULT 0 COMMENT '修改時間',
    `delete_time` int(10) NOT NULL DEFAULT 0 COMMENT '刪除時間',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `appidversion` (`appid`,`app_type`,`last_version`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='app版本升級信息表';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章