ionic3-监听版本自动更新

依赖 version、Transfer、file、opener2

version获取本地app相关信息(当前版本号,app名称等等)

$ ionic cordova plugin add cordova-plugin-app-version

$ npm install --save @ionic-native/app-version@4

transfer(上传文件,下载文件)

$ ionic cordova plugin add cordova-plugin-file-transfer

$ npm install --save @ionic-native/file-transfer@4

file(要去的文件的本机目录)

$ ionic cordova plugin add cordova-plugin-file

$ npm install --save @ionic-native/file@4

opener2(打开文件)

$ ionic cordova plugin add cordova-plugin-file-opener2

$ npm install --save @ionic-native/file-opener@4

 import { HttpClient } from '@angular/common/http';
 import { Injectable } from '@angular/core';
 import { AlertController } from 'ionic-angular';
 //以下4个需要在app.module.ts中引入 并在providers中声明
 import { AppVersion } from '@ionic-native/app-version';
 import { FileTransfer, FileTransferObject } from '@ionic-native/file-transfer';
 import { File } from '@ionic-native/file';
 import { FileOpener } from '@ionic-native/file-opener';
 
 
 @Injectable()
 export class UpdateappProvider {
 
   locVersion: any = '';
   // locVersion;
   webVersion: any = '';
   constructor(
     public http: HttpClient,
     private appVersion: AppVersion,
     private transfer: FileTransfer,
     private file: File,
     private fileOpener: FileOpener,
     private alertCtrl: AlertController,
  ) {
  }
     //或取当前版本号
     getLocVersion() {
       console.log('loc');
       return new Promise((resolve, reject) => {
         this.appVersion.getVersionNumber().then((version: any) => {
           resolve(version);
        }).catch(err => {
           console.log('getVersionNumberError' + err);
        });
      })
    }
     //或取服务器上的版本号
     getWebVersion() {
       console.log('web');

       let api = "http://IP地址:端口号/目录名/文件名?time=" + new Date().getTime();
       return new Promise((resolve, reject) => {
         this.http.get(api).subscribe((response: any) => {
           console.log(response);
           resolve(response.version)
        })
      })
    }
     //比较版本号
     async checkVersion() {
       this.locVersion = await this.getLocVersion();
       this.webVersion = await this.getWebVersion();
       let locv = this.strToNumber(this.locVersion);
       let webv = this.strToNumber(this.webVersion);
       console.log("webv===", webv ,"locv===", locv);
       if (webv > locv) {
         console.log('webv大于locv');
         this.alertCtrlMethod();
      }
    }
   
     //将版本号转换为int型
     strToNumber(str: string): number {
       if (str != '' && str != null) {
         let arr = str.split(".");
         let s = "";
         // for(let item in arr) {
         //   s += arr[item];
         // }
         arr.forEach(item => {
           s += item
        });
         return parseInt(s);
      }
    }
 
   //新版本更新提示
   alertCtrlMethod() {
     this.alertCtrl.create({
       title: '升级',
       subTitle: '发现新版本,是否立即升级?',
       buttons: [{ text: '取消' },
      {
         text: '确定',
         handler: () => {
           this.download();
        }
      }
      ]
    }).present();
  }
 
   //下载新版本
   download() {
     if (true) {
       let alert = this.alertCtrl.create({
         title: '下载进度:0%',
         enableBackdropDismiss: false,
         buttons: ['后台下载']
      });
       alert.present();
       const fileTransfer: FileTransferObject = this.transfer.create();
       //url下载的目标地址
         const url = 'http://IP地址:端口号/目录名/目标文件名';
       //this.file.dataDirectory要去的文件的本机目录
       fileTransfer.download(url, this.file.dataDirectory + '目标文件名').then((entry) => {
         //下载完成,打开并安装
         this.fileOpener.open(entry.toURL(), 'application/vnd.android.package-archive');
         console.log('download complete: ' + entry.toURL());
      });
       //下载进度
       fileTransfer.onProgress((event: ProgressEvent) => {
         let num = Math.floor(event.loaded / event.total * 100);
         if (num === 100) {
           alert.dismiss();
           console.log('新程序下载完成');
        } else {
           let title = document.getElementsByClassName('alert-title')[0];
           title && (title.innerHTML = '下载进度:' + num + '%');
        }
      });
    }
  }
 }
posted @ 2021-03-08 10:08  糖块  阅读(354)  评论(0)    收藏  举报