前言

介绍一下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表示层数,其他的就很好理解了。

ionic 4 app 自动版本更新的更多相关文章

  1. android-关于友盟的自动版本更新(面向小白)

    今天说一下关于友盟的自动版本更新(傻瓜式版本更新) 关于自动更新的话,如果让android程序猿自己写的话还是不是那么简单的(对于我这个菜鸟来说...),又要检查当前版本,又要在服务器存储新的版本,又 ...

  2. H5+app -- 自动更新

    一.最近做了一个app自动更新功能,用的基本都是网上找得到的. 1.h5+ 规范 :  http://www.html5plus.org/doc/zh_cn/maps.html 2.环形进度条插件:h ...

  3. web app升级—带进度条的App自动更新

    带进度条的App自动更新,效果如下图所示:   技术:vue.vant-ui.5+ 封装独立组件AppProgress.vue: <template> <div> <va ...

  4. Android学习系列(3)--App自动更新之自定义进度视图和内部存储

    友好的视觉感知和稳定的不出错表现,来自于我们追求美感和考虑的全面性,博客园从技术的角度,一直我都很欣赏.这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 这 ...

  5. 【Ionic】---Using Local Notifications In Your Ionic Framework App

    Using Local Notifications In Your Ionic Framework App 配置好ng-cordova先 <script src="lib/ngCord ...

  6. app自动测试-微信(iOS)-web-1

    appium 是一个用于app自动测试的工具.目前支持测试iOS, Android, Windows上的app.(github: https://github.com/appium/appium) 其 ...

  7. Web APP自动更新

    我们的手机软件每天都要经营,经常需要更新,比如程序的Bug,好的功能,好的洁面... ... 这就需要我们的用户打开web app时候自动更新客户端程序,而不是再去应用程序商店从新下载.今天的笔记就是 ...

  8. 安卓开发实战之app之版本更新升级(DownloadManager和http下载)完整实现

    转载: https://blog.csdn.net/u013278099/article/details/52692008 前言 本文将讲解app的升级与更新.一般而言用户使用App的时候升级提醒有两 ...

  9. ionic打包app——以安卓版本为例 辛苦之路~~~

    最近同事做了个angular项目,因为要离职,所以项目我就来接手了,用ionic打包app,然后无数配置的坑就等着我了~~~ 环境安装 1.nodejs 因为自己刚接触做angular项目,就更新到了 ...

  10. uniapp 证书 打包上线GooglePlay app自动升级

    uniapp Android证书 打包上线GooglePlay app自动升级 1.Android证书申请 要安装jdk并配置环境变量. keytool -genkey -alias android ...

随机推荐

  1. sentienl

    整合springboot Spring Cloud Alibaba Sentinel 下载 导入依赖 <dependency> <groupId>com.alibaba.clo ...

  2. 将谷歌chrome浏览器主题变黑的方法

    两个步骤: 第一: 桌面找到google chrome图标右键->属性,在后面加上: --force-dark-mode (注意有空格) 第二: 1.浏览器地址输入chrome://flags/ ...

  3. linux-关于conio.h文件的文件缺失问题

    链接: https://pan.baidu.com/s/1Qzo4CkJB1_5E-3rDLtfG4Q 提取码: fh65 编辑以下这个依赖库就可以了 $ cd libconio-1.0.0 $ ./ ...

  4. Git进阶命令-reset

    之前有关Git,写过一片文章: Git五个常见问题及解决方法 一.reset命令使用场景 有时候我们提交了一些错误的或者不完善的代码,需要回退到之前的某个稳定的版本,面对这种情况有两种解决方法: 解决 ...

  5. RTMP、X264与交叉编译

    RTMP.X264与交叉编译 ​ 与HTTP(超文本传输协议)同样是一个基于TCP的Real Time Messaging Protocol(实时消息传输协议).由Adobe Systems公司为Fl ...

  6. 让艺术触手可及!3DCAT实时云渲染赋能真浪数字艺术馆首展

    2023年5月18日,由真浪数字艺术和EZVR联合打造的真浪数字艺术馆首展–「破界·交织」让艺术更自由,正式与大家相见.此次展览分为五个主题展馆,汇聚了来自全球各领域的19位青年数字艺术家一同探讨虚实 ...

  7. python高级技术(死锁、递归锁、信号量、Event事件、进程池、线程池、协程)

    一 死锁和递归锁(了解) 进程也有死锁与递归锁,使用方法类似 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 此时称 ...

  8. 三维模型3DTile格式轻量化压缩在移动智能终端应用方面的重要性分析

    三维模型3DTile格式轻量化压缩在移动智能终端应用方面的重要性分析 随着移动智能终端设备的不断发展和普及,如智能手机.平板电脑等,以及5G网络技术的推广应用,使得在这些设备上频繁使用三维地理空间数据 ...

  9. 如何在uniapp中优雅地使用WebView

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 从webview页面传值到uniapp中 官方文档已经很详细了,这里给大家上我的实战代码,首先在webview页面中引入相关依赖: < ...

  10. 使用自签名证书在Docker中部署Asp.Net Core(Abp)项目

    一 编写Dockerfile文件 FROM mcr.microsoft.com/dotnet/aspnet:6.0 COPY / /app WORKDIR /app EXPOSE 80 ENTRYPO ...