zoukankan      html  css  js  c++  java
  • ionic 4 app 自动版本更新

    前言

    介绍一下ionic4 app的自动更新。ionic 不多介绍了,后面一个后系列,背负着骂名的ionic其实还是可以的,如果刚入门ionic可能觉得很坑,但是呢,往后你就发现另外一件事,那就是其他的混合app的坑不比它少。

    为什么这么说呢? 主要就是兼容,你做不同的应用,就需要某一方面做优化,那么ionic 自然不能满足你,你需要的就是填坑,那么来介绍一下ionic 如何自动版本更新。

    正文

    有3个插件你需要看的:

    https://ionicframework.com/docs/native/file
    https://ionicframework.com/docs/native/file-opener
    https://ionicframework.com/docs/native/file-transfer

    如果你阅读完了这些,那么你可以往下了,如果没有,那么最好阅读一下。

    file-transfer 用来下载你的app,存放位置需要用到file,file-opener 用来打开app。

     this.fileOpener.open(apk, 'application/vnd.android.package-archive')
            .then((e) => {
              console.log('File is opened', e);
            })
            .catch(e => {
              console.log('Error openening file', e);
            });
    

    apk 为你下载的地址。

    这个file 用来干什么的呢?这个file 用来查看该app 的私有目录的地址。具体看文档。 好了,那么现在就知道如何去写这个下载了。

    其实就这么一个流程,就是下载好你的app,然后按照某种格式打开即可。

    那么有一个问题,就是如何让app 知道啥时候更新,啥时候不更新呢?当然是调用api呢。

    那么问题来了,是进入app就开始调用吗? 当然不是,要在用户登录后时候开始调用,这样避免服务器频繁的调用,只对用户保持更新通知。

    那么app 版本的数据库控制的数据库该如何设计呢?

    我们可以看到一般app 都有新版本号,旧版本号,包的大小,包下载的地址,更新内容,是否强制更新,创建时间,更新时间,状态。

    我们一般传入版本号给后台,后台通过和就版本的匹配,通知app更新的版本。

    那么有一个问题,就是我们在传入后台的版本号的时候,后台应该做通配符处理。

    比如说,数据库里面旧版本是1..2 表的是中间 版本无论是任何数字都应该更新到对应数据库的那一条的新版本上。

    再比如说1.2,3.2 更新,那么更新的是1.2.2 或者1.3.2更新。

    比如说1.11-15.2,那么匹配更新的为1.11.1 到1.15.2都应该进行更新,那么通配符代码如何写呢?当时我参考了php,后面是用c#写的,这里我贴一下php代码。

    class Version
    {
    
        /**
         * 检测版本是否的版本要求的数据中
         *
         * @param string $version
         * @param array  $data 数据库里面有多少旧版本需要更新,统一匹配一下
         * @return bool
         */
        public static function check($version, $data = [])
        {
            //版本号以.分隔
            $data = is_array($data) ? $data : [$data];
            if ($data) {
                if (in_array("*", $data) || in_array($version, $data)) {
                    return true;
                }
                $ver = explode('.', $version);
                if ($ver) {
                    $versize = count($ver);
                    //验证允许的版本
                    foreach ($data as $m) {
                        $c = explode('.', $m);
                        if (!$c || $versize != count($c)) {
                            continue;
                        }
                        $i = 0;
                        foreach ($c as $a => $k) {
                            if (!self::compare($ver[$a], $k)) {
                                continue 2;
                            } else {
                                $i++;
                            }
                        }
                        if ($i == $versize) {
                            return true;
                        }
                    }
                }
            }
            return false;
        }
    
        /**
         * 比较两个版本号
         *
         * @param string $v1
         * @param string $v2
         * @return boolean
         */
        public static function compare($v1, $v2)
        {
            if ($v2 == "*" || $v1 == $v2) {
                return true;
            } else {
                $values = [];
                $k = explode(',', $v2);
                foreach ($k as $v) {
                    if (strpos($v, '-') !== false) {
                        list($start, $stop) = explode('-', $v);
                        for ($i = $start; $i <= $stop; $i++) {
                            $values[] = $i;
                        }
                    } else {
                        $values[] = $v;
                    }
                }
                return in_array($v1, $values) ? true : false;
            }
        }
    }
    

    如果不知道php的人,在这里介绍一下continue 2,是什么意思。

    拿下面这一段来说:

    foreach ($data as $m) {
    	$c = explode('.', $m);
    	if (!$c || $versize != count($c)) {
    		continue;
    	}
    	$i = 0;
    	foreach ($c as $a => $k) {
    		if (!self::compare($ver[$a], $k)) {
    			continue 2;
    		} else {
    			$i++;
    		}
    	}
    	if ($i == $versize) {
    		return true;
    	}
    }
    

    continue 2的意思是跳出两层循环。就是里面的foreach 不执行了,然后外面的foreach 跳过本次循环,也就是:

    if ($i == $versize) {
         return true;
    }
    

    也不执行了。具体来说,就是最外层的foreach 丢弃本次循环。2表示层数,其他的就很好理解了。

  • 相关阅读:
    bug、兼容性、适配问题
    关于daterangepicker取消默认值的设置
    重构-改善既有代码设计
    iphoneX 适配
    汇编语言(2)程序表示
    汇编语言(1)基础理论
    css 边框颜色渐变的半圆
    横向时间轴(进度条)
    pdf中内嵌字体问题
    jabRef里引用的相邻同名作者变横线
  • 原文地址:https://www.cnblogs.com/aoximin/p/14265071.html
Copyright © 2011-2022 走看看