实现 App 自动检测更新(Vue3 + Ionic + Cordova + Capacitor)

目录

一. 实现 App 自动检测更新的原理

1. 效果

2. 原理

二. 实现 App 自动检测更新的实践

1. 需要安装的插件

1.1 capacitor

1.2 cordova

2. 封装 app-update-main.ts(应用检查更新 - 入口)

2.1 定义应用信息的全局变量

2.2 获取服务器上最新的应用信息

2.3 获取当前设备信息

2.4 获取当前应用信息

2.5 处理版本号

2.6 根据全局信息、当前平台,判断是否更新及所需方法

2.7 添加 询问用户是否更新 的提示框

3. 封装 app-update-auxiliary.ts(应用检查更新 - 辅助)

3.1 根据文件名,判断文件媒体类型

3.2 获取 存放下载文件 的基本路径

3.3 添加下载 安装包(.apk) 的方法

3.4 计算文件下载进度

3.5 添加下载进度提示框

3.6 添加文件是否打开的提示框

3.7 添加打开 安装包(.apk)的方法

4. App 自动检查更新 方法执行的位置


一. 实现 App 自动检测更新的原理

1. 效果

自动检测更新的场景:

  • App 打开时,自动检测更新
  • 在设置中,点击版本号时,自动检测更新

2. 原理

  • 检查当前应用信息(获取当前版本号、设备平台信息等等)
  • 获取服务器应用信息(获取服务器最新版本号、下载地址等)
  • 判断是否更新及如何更新(判断用户是否更新、判断需要下载的包、是否立即安装等)

接口返回服务器上存储的应用信息示例(此处用 Rap2 模拟接口):

{
  "data": {
    // Android 最新应用下载地址
    "androidUrl": "https://www.xxx.com.cn/Android/others/tongfu/tongfu-prod.apk",
    // Android 包名
    "apkName": "baoan.apk",
    // ios 最新应用下载地址
    "iosUrl": "itms-services://?action=download-manifest&url=https://www.xxx.com.cn/iOS/others/tongfu/tongfu-prod.plist",
    // Android 最新应用版本号
    "verAndroid": "1.0.6",
    // ios 最新应用版本号
    "verIos": "1.0.6"
  }
}

二. 实现 App 自动检测更新的实践

1. 需要安装的插件

1.1 capacitor

// @capacitor/app
npm install @capacitor/app
npx cap sync

// @capacitor/device
npm install @capacitor/device
npx cap sync

1.2 cordova

// File
npm install cordova-plugin-file
npm install @ionic-native/file
ionic cap sync

// File Transfer
npm install cordova-plugin-file-transfer
npm install @ionic-native/file-transfer
ionic cap sync

// File Opener
npm install cordova-plugin-file-opener2
npm install @ionic-native/file-opener
ionic cap sync

2. 封装 app-update-main.ts(应用检查更新 - 入口)

此文件包含了 获取服务器 apk信息、获取当前 apk信息、判断是否执行 apk更新的相关方法

2.1 定义应用信息的全局变量

const 定义 全局变量,否则 ts 会报错(比如使用 let)

// 全局变量 - 应用信息(默认)- 需要使用 const定义,否则会报错
const appInfomation = {
  currentPlatform: '', // 当前平台
  currentVersion: '', // 当前app版本
  serverAndroidVersion: '', // 服务器最新app版本 - Android
  serverAndroidAppUpdateUrl: '', // 服务器最新app下载地址 - Android
  serverIosVersion: '', // 服务器最新app版本 - IOS
  serverIosAppUpdateUrl: '', // 服务器最新app下载地址 - IOS
  apkName: '', // 服务器android安装包的名字
};

2.2 获取服务器上最新的应用信息

此处省略了 获取服务器信息的 接口调用 过程,仅展示获取接口数据后,应该将 2.1 中的变量填充上什么信息

  // 获取服务器上的应用信息
  const serverAppInfo = await getServerAppInfo();
  console.log("获取服务器上的应用信息", serverAppInfo);

  // 服务器上的安卓应用版本
  appInfomation.serverAndroidVersion = serverAppInfo.data.verAndroid; 
  // 服务器上的安卓应用下载地址
  appInfomation.serverAndroidAppUpdateUrl = serverAppInfo.data.androidUrl; 
  // 服务器上的苹果应用版本
  appInfomation.serverIosVersion = serverAppInfo.data.verIos; 
  // 服务器上的苹果应用下载地址
  appInfomation.serverIosAppUpdateUrl = serverAppInfo.data.iosUrl; 
  // 服务器上的应用下载名
  appInfomation.apkName = serverAppInfo.data.apkName; 

2.3 获取当前设备信息

需要获取设备信息的原因:

  • Android / Ios 的下载路径、安装过程等,都不太相同,需要根据设备平台进行定制

此处采用 capacitor 中的 Device插件,它可以返回当前设备平台是 android 还是 ios

import { Device } from '@capacitor/device';

/**
 * 获取当前的设备所属平台
 */
const getDeviceInfo = async (): Promise<string> => {
  const info = await Device.getInfo();
  return info.platform;
};

  // 填充全局变量 - 应用信息
  appInfomation.currentPlatform = nowPlatform; // 当前设备平台

2.4 获取当前应用信息

需要获取当前应用信息的原因:

  • 是为了获取版本号,与服务器上最新的版本号进行对比,看看是否需要更新

此处使用 capacitor 中的 App插件,它可以返回当前应用的版本号

/**
 * 获取用户当前正在使用的app版本
 */
async function getCurrentAppInfo(): 
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyrelion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值