Ionic开发文档

App在线升级

发布时间 2018-7-18 9:31:26   浏览量()   收藏(1)

一、准备工作

1、安装File,用于文件目录读取

ionic cordova plugin add cordova-plugin-file
npm install --save @ionic-native/file

2、安装Version,,用于获取当前app版本

ionic cordova plugin add cordova-plugin-app-version
npm install --save @ionic-native/app-version

3、安装transfer插件,用于下载服务器apk

ionic cordova plugin add cordova-plugin-file-transfer
npm install --save @ionic-native/file-transfer

4、安装opener2,用于打开指定目录的apk进行安装

ionic cordova plugin add cordova-plugin-file-opener2
npm install --save @ionic-native/file-opener

二、代码部分

准备工作就绪后,开始写实现代码如下:

1、在app.module.ts中引入几个插件

//app升级相关插件
import { AppVersion } from '@ionic-native/app-version';
import { FileOpener } from '@ionic-native/file-opener';
import { FileTransfer, FileTransferObject } from '@ionic-native/file-transfer';
import { File } from '@ionic-native/file';
//app升级相关插件

2、创建一个ionic g provider appUpgrade 服务

完整代码如下:

import { PlatformServiceProvider } from './../platform-service/platform-service';
import { Injectable } from '@angular/core';
import {Platform,AlertController  } from 'ionic-angular';
import { Http } from '@angular/http';
import {File} from '@ionic-native/file';
import {FileTransfer,FileTransferObject} from '@ionic-native/file-transfer';
import {FileOpener} from '@ionic-native/file-opener';
import {AppVersion} from '@ionic-native/app-version';
import 'rxjs/add/operator/map';

/*
 app在线升级自动安装
*/
@Injectable()
export class AppUpgradeProvider {

constructor(public http: Http,private platform: Platform,
private alertCtrl: AlertController,
private transfer: FileTransfer,
private appVersion: AppVersion,
private file: File,private fileOpener:FileOpener,
private platformService:PlatformServiceProvider) {
}
/**
   * 检查app是否需要升级
   */
detectionUpgrade(u) {
//这里连接后台获取app最新版本号,然后与当前app版本号(this.getVersionNumber())对比
//版本号不一样就需要申请,不需要升级就return
this.alertCtrl.create({
title: '升级',
subTitle: '发现新版本,是否立即升级?',
buttons: [{text: '取消'},
{
text: '确定',
handler: () => {
this.downloadApp(u);
}
}
]
}).present();
}

/**
   * 下载安装app
   */
downloadApp(u) {
if (this.platformService.isAndroid()) {
let alert = this.alertCtrl.create({
title: '下载进度:0%',
enableBackdropDismiss: false,
buttons: ['后台下载']
});
alert.present();

const fileTransfer: FileTransferObject = this.transfer.create();
const apk = this.file.externalRootDirectory  + 'jmtec/lingguo.apk'; //apk保存的目录externalRootDirectory
// const apk="file:///storage/DownloadZhao/zhaozhao.apk";
// console.log(apk);APK_DOWNLOAD
fileTransfer.download(u, apk).then(() => {
// window['install'].install(apk.replace('file://', ''));
// entry.nativeURL 是上面那个插件文件下载后的保存路径
this.fileOpener.open(apk, 'application/vnd.android.package-archive')
.then(() => {
console.log('打开成功');
})
.catch(() => {
console.log('打开失败');
});
});

fileTransfer.onProgress((event: ProgressEvent) => {
let num = Math.floor(event.loaded / event.total * 100);
if (num === 100) {
alert.dismiss();
} else {
let title = document.getElementsByClassName('alert-title')[0];
title && (title.innerHTML = '下载进度:' + num + '%');
}
});
}
if (this.platformService.isIos()) {
// this.openUrlByBrowser(APP_DOWNLOAD);
}
}

/**
   * 通过浏览器打开url
   */
openUrlByBrowser(url:string):void {
// this.inAppBrowser.create(url, '_system');
}


/**
   * 获得app版本号,如0.01
   * @description  对应/config.xml中version的值
   * @returns {Promise<string>}
   */
getVersionNumber(): Promise<string> {
return new Promise((resolve) => {
this.appVersion.getVersionNumber().then((value: string) => {
resolve(value);
}).catch(err => {
console.log('getVersionNumber:' + err);
});
});
}
}








广告会让浏览体验不好,可这是网站的唯一收入,请点击下面的百度广告,支持老高的开源行动吧!