美文网首页my ionic4
ionic3 APP版本更新

ionic3 APP版本更新

作者: 繁_e6c7 | 来源:发表于2019-04-01 10:54 被阅读101次
    Ionic 等版本信息

    注意:安装平台android 6.3.0的小伙伴,安装插件时,一定要选择下面的版本安装,否则出错。
    platforms\android\AndroidManifest.xml
    android:targetSdkVersion版本
    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="26" />

    // 1 安装插件
     // 权限 
    $ ionic cordova plugin add cordova-plugin-android-permissions@1.0.0
    $ npm install --save @ionic-native/android-permissions@4.5.0
    // 文件管理 
    $ ionic cordova plugin add cordova-plugin-file@6.0.1
    $ npm install --save @ionic-native/file@4.18.0
    // 文件上传 
    $ ionic cordova plugin add cordova-plugin-file-opener2@2.0.19
    $ npm install --save @ionic-native/file-opener@4.7.0
    
    $ ionic cordova plugin add cordova-plugin-file-transfer@1.7.1
    $ npm install --save @ionic-native/file-transfer@4.7.0
    // 版本检测 
    $ ionic cordova plugin add cordova-plugin-app-version@0.1.9 
    $ npm install --save @ionic-native/app-version@4.7.0 
    // 浏览器 
    $ ionic cordova plugin add cordova-plugin-inappbrowser 
    $ npm install --save @ionic-native/in-app-browser 
    
    
    
    //添加插件 
    //app.module.ts 
    import { AndroidPermissions } from '@ionic-native/android-permissions'; 
    import { File } from "@ionic-native/file"; 
    import { FileOpener } from "@ionic-native/file-opener"; 
    import { FileTransfer,FileTransferObject } from "@ionic-native/file-transfer"; 
    import { AppVersion } from "@ionic-native/app-version"; 
    import { InAppBrowser} from "@ionic-native/in-app-browser"; 
     ... 
    providers: 
    [ StatusBar, SplashScreen, 
    {provide: ErrorHandler, useClass: IonicErrorHandler}, 
    AndroidPermissions, File, AppVersion, FileOpener, FileTransfer, FileTransferObject, NativeService, InAppBrowser
     ] 
    
    // 2 应用
    // 新建  src\providers\public\public.ts
    import { HttpClient,HttpHeaders } from '@angular/common/http';
    import { Injectable } from '@angular/core';
    
    import { ConfigProvider } from '../config/config';
    import { AlertController } from 'ionic-angular/components/alert/alert-controller';
    import { LoadingController } from 'ionic-angular/components/loading/loading-controller';
    import { File } from '@ionic-native/file';
    import { FileTransfer, FileTransferObject } from '@ionic-native/file-transfer';
    import { AppVersion } from '@ionic-native/app-version';
    import { FileOpener } from '@ionic-native/file-opener';
    import { AndroidPermissions } from '@ionic-native/android-permissions';
    import { ToastController } from 'ionic-angular/components/toast/toast-controller';
    import { Platform } from 'ionic-angular/platform/platform';
    
    /*
      Generated class for the PublicProvider provider.
    
      See https://angular.io/guide/dependency-injection for more info on providers
      and Angular DI.
    */
    @Injectable()
    export class PublicProvider {
      /*公共post提交頭*/
      public httpOptions = {
        headers: new HttpHeaders({ 
          "Accept": "application/json",
          "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
          "Authorization":  '' ,
        })
      };
    
      constructor(public http: HttpClient, public config: ConfigProvider
        ,public alertCtrl:AlertController,public loadingCtrl:LoadingController
        ,private transfer: FileTransfer,
        private file: File,private appVersion: AppVersion,private fileOpener:FileOpener
        ,private androidPermissions: AndroidPermissions,public toastCtrl: ToastController,public platform: Platform
      ) {
        // console.log('Hello PublicProvider Provider');
      }
        
      //检查版本更新
      new_version(callback){
        var url = ‘http://www.test.com/test’;
        return this.http.get(url,this.httpOptions).subscribe(function(data){
          callback(data);
        });
      }
    
    
    
      /***** 自动更新APP版本  开始 ******************************/  
      public now_version = '';//当前版本
      public new_app = {//最新版本
        new_version: '',//版本号
        text : '',//更新简介
        url : '',//下载地址
      };
    
      public has_new : boolean = false;
      get_now_version(){
        var _that = this;
        this.appVersion.getVersionNumber().then(data=>{
          _that.now_version = data;
        });
        return _that.now_version
      }
      check_version(){
        var _that = this;
    
        //服务器端获取最新版
        this.new_version(data=>{
          _that.new_app.new_version = data.data.version;
          _that.new_app.text = data.data.text;
          _that.new_app.url =  data.data.file_url;
        });
    
        console.log('_that.new_app');
        console.log(_that.new_app);
    
        this.appVersion.getVersionNumber().then(data=>{
          _that.now_version = data;
        });
    
        console.log('_that.now_version = ' + _that.now_version);
      
        //当前版本
        let nowVersionNum = parseInt(this.now_version.toString().replace(new RegExp(/(\.)/g), '0')); 
        // alert('当前版本:'+nowVersionNum);
        let newVersionNum = parseInt(this.new_app.new_version.toString().replace(new RegExp(/(\.)/g), '0'));
        if(nowVersionNum < newVersionNum){
          this.has_new = true;
        }
    
        console.log('nowVersionNum = ' + nowVersionNum);
        console.log('newVersionNum = ' + newVersionNum);
      }
    
      presentToast(message: string) {
        let toast = this.toastCtrl.create({message: message, duration: 2000});
        toast.present().then(value => {
          return value;
        });
      }
    
      autoUpdateApp(){
        setTimeout(() => {
    
          this.appVersion.getVersionNumber().then(data=>{
            this.now_version = data;
          });
          //服务器端获取最新版
          this.new_version(data=>{
            this.new_app.new_version = data.data.version;
            this.new_app.text = data.data.text;
            this.new_app.url =  data.data.file_url;
            this.updateAPP()
          });
    
        }, 3000);
      }
    
      updateAPP(){
        this.check_version()
        //当前版本
        let nowVersionNum = parseInt(this.now_version.toString().replace(new RegExp(/(\.)/g), '0')); 
        // alert('当前版本:'+nowVersionNum);
        let newVersionNum = parseInt(this.new_app.new_version.toString().replace(new RegExp(/(\.)/g), '0')); 
        // alert('最新版本:'+newVersionNum);
        if(nowVersionNum < newVersionNum){
              
          let confirm = this.alertCtrl.create({
            title: '有新版本发布,是否下载更新?',
            message: this.new_app.text,
            buttons: [
              {
                text: '取消',
                handler: () => {
                  console.log('Disagree clicked');
                  // return false;
                  this.check_version()
                }
              },
              {
                text: '确认',
                handler: () => {
                  this.permissionsFun()
                  //this.download();
                }
              }
            ]
          });
          confirm.present();
        }else{
          this.presentToast('当前已是最新版本');
        }
        
      }
    
      download(){
        if (this.isAndroid()) {
          var _that = this;
          const fileTransfer: FileTransferObject = this.transfer.create();
          
          //目录创建文件夹 new Date().getTime()
          this.file.createDir(this.file.externalRootDirectory, "martiantoken", false)
          let externalRootDirectory = this.file.externalRootDirectory + 'martiantoken/martiantoken.apk';
          console.log('this.new_app.url')
          console.log(this.new_app.url)
    
          console.log('externalRootDirectory')
          console.log(externalRootDirectory)
    
    
          let num :number = 1;
          fileTransfer.onProgress((event: ProgressEvent) => {
            num =Math.floor(event.loaded/event.total * 100);
          });
          
          let loading = _that.loadingCtrl.create({
            content: '下载进度:'+ num + '%'
          });
          loading.present(); 
    
          fileTransfer.download(this.new_app.url, externalRootDirectory).then((entry) => {
              // alert('下载成功: ' + entry.toURL());
              _that.fileOpener.open(entry.toURL(),'application/vnd.android.package-archive');
            }, (error) => { 
              
              let confirm = this.alertCtrl.create({
                title: '请开启存储权限',
                message: '权限被拒绝,请在手机设置里手动开启存储权限',
                buttons: [
                  {
                    text: '取消',
                    handler: () => {
                      console.log('Disagree clicked');
                      // return false;
                      //this.check_version()
                      loading.dismiss();
                    }
                  },
                  {
                    text: '确认',
                    handler: () => {
                      loading.dismiss();
                      this.download();
                    }
                  }
                ]
              });
              confirm.present();
              
              return false;
            }
          );
        
    
          
    
          let timer = setInterval(() => {
              loading.setContent("下载进度:" + num + "%");
              if (num >= 99) {
                  clearInterval(timer);
                  loading.dismiss();
              }
          }, 300);
    
        }
    
    
        // if (this.isIos()) {
        //   this.openUrlByBrowser("这里边填写下载iOS地址");
        // }
    
    
      }
    
    
       //检查权限
       permissionsFun(){
        this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE).then(
          result => {
            if (!result.hasPermission){
              this.androidPermissions.requestPermissions([this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE])
                .then(result => {//弹出弹框是否允许
                  if(result.hasPermission){//点击允许
                    this.download();
                    // alert("允许使用LOCATION权限");
                  }else{//点击拒绝
                    // alert("拒绝使用LOCATION权限");
                    //this.platform.exitApp();//退出APP
                  }
              });
            }else{
              this.download();
              // alert("已允许位置权限" + result.hasPermission);
            }
      
          },
          err => {
            this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.ACCESS_COARSE_LOCATION)
          }
      
        );
      }
    
    
      /**
       * 通过浏览器打开url
       */
      openUrlByBrowser(url: string): void {
        //this.inAppBrowser.create(url, '_system');
      }
    
      /**
       * 是否真机环境
       * @return {boolean}
       */
      isMobile(): boolean {
        return this.platform.is('mobile') && !this.platform.is('mobileweb');
      }
    
      /**
       * 是否android真机环境
       * @return {boolean}
       */
      isAndroid(): boolean {
        return this.isMobile() && this.platform.is('android');
      }
    
      /**
       * 是否ios真机环境
       * @return {boolean}
       */
      isIos(): boolean {
        return this.isMobile() && (this.platform.is('ios') || this.platform.is('ipad') || this.platform.is('iphone'));
      }
    
      /***** 自动更新APP版本  结束 ******************************/  
      
    
    }
    
    
    // app.component.ts
    
    import { Component } from '@angular/core';
    import { Platform, AlertController } from 'ionic-angular';
    import { StatusBar } from '@ionic-native/status-bar';
    import { SplashScreen } from '@ionic-native/splash-screen';
    import { PublicProvider } from '../providers/public/public';
    
    
    @Component({
      templateUrl: 'app.html'
    })
    export class MyApp {
      rootPage:any;
    
      constructor(public platform: Platform, public statusBar: StatusBar, public splashScreen: SplashScreen,public publicPro: PublicProvider
        
        ) {
        console.log('MyApp-----');
        this.platformReady()
        this.publicPro.autoUpdateApp();
      }
    
      platformReady() {
        // Call any initial plugins when ready
        this.platform.ready().then(() => {
          this.statusBar.styleDefault();
          this.splashScreen.hide();
          this.statusBar.overlaysWebView(false);
          this.statusBar.backgroundColorByHexString('#333333');
        });
      }
    
    }
    
    
    
    

    参考网址:https://www.jianshu.com/p/6f88d9c95919

    相关文章

      网友评论

        本文标题:ionic3 APP版本更新

        本文链接:https://www.haomeiwen.com/subject/imvmbqtx.html