Ionic4.x、コルドバのAndroidバージョン番号検出アプリケーション、サーバ、ダウンロードファイル、およびアプリケーションの自動アップグレードを実現し、設置

アンドロイドアプリのアップグレードプロセスの実行

 

1 、ローカルバージョン取得
2を要求元サーバのバージョン番号は、サーバを得ます

3 、ローカルとサーバのバージョンは、ユーザーがポップアップを更新するように指示されているかどうか、アップグレードするために一貫性のないメッセージが表示され

4 、ユーザーがファイル転送方式のダウンロードを呼び出し、アップグレードを決定するのapk ファイルを

5 、ダウンロードの進行状況を監視
6を、ダウンロードが完了開いているのAPK インストール

注意:私のではOSのバージョンは、一貫性のないジャンプに直接であれば、ダウンロードして直接インストールすることはできませんイオス市場でのアプリケーションに対応するアプリケーション。

 


 

自動アップグレードAPPのプラグインが必要

 

プラグインの名前

 

プラグ住所

アプリのバージョン

コルドバ・プラグインアプリ版

https://ionicframework.com/docs/native/app-version/

ファイルオープナー

コルドバ・プラグイン・ファイルopener2

https://ionicframework.com/docs/native/file-opener/

ファイル転送

コルドバ・プラグイン・ファイル転送

https://ionicframework.com/docs/native/file-transfer/

ファイル

コルドバ - プラグインファイル

https://ionicframework.com/docs/native/file/

 

app.module.ts 注入の導入

 

インポート{FileOpener} から イオンネイティブ/ファイルオープナー/ NGX @ 
インポート{変数をFileTransfer} から イオンネイティブ/ファイル転送/ NGX @ 
インポート{}のappversion から ' イオンネイティブ/ APP-バージョン/ NGX @ ' 
インポート{ファイル} から イオンネイティブ/ファイル/ NGX @  ;

 

プロバイダ:[ 
    FileOpener、
    変数をFileTransfer、
    のappversion、
    ファイル、
    ... 
{提供する:RouteReuseStrategy、useClass:IonicRouteStrategy}]

導入されたアップデートのダウンロードページを監視する必要があり、注入

インポート {FileOpener}「イオンネイティブ/ファイルオープナー/ NGX @」からインポート「@イオンネイティブ/ファイル転送/ NGX」から{変数をFileTransfer、FileTransferObject} インポートからのappversion {} '@イオンネイティブ/ APP-バージョン/ NGX' インポート {ファイル}「イオン-ネイティブ/ファイル/ NGX @」からインポート {AlertController}「イオン/角度@」から。
コンストラクタ(プライベートファイル:ファイル、プライベート転送:変数をFileTransfer、民間のappversion:のappversion、プライベート fileOpener:FileOpener、公共alertController:AlertController){ 
}

4 、バージョン番号を取得します

この。.appVersion.getVersionNumber()を((値:任意)=> {にconsole.log(値)
})。キャッチ(ERR => {にconsole.log( 'getVersionNumber:' + ERR); 
});

5 、現在取得するAPKのインストールディレクトリを

 

この .file.dataDirectory

 

CONSTのTargetURL = 'http://127.0.0.1:8080/test.apk' ;
CONSTファイル転送:FileTransferObject = この .transfer.create()。fileTransfer.download(のTargetURL、この .file.dataDirectory + 'test.apk')次に、((エントリ)=> { 
}、(エラー) => {アラート(JSON.stringify(エラー)); 
});

6 、、ファイルをダウンロードし、ダウンロードの進行状況を監視

ファイル転送onst:FileTransferObject = この.transfer.create()。
fileTransfer.download(URL、この .file.dataDirectory + test.apk ')。次いで、((エントリ)=> { 
アラート( '完全ダウンロード' + entry.toURL());}、(エラー)=> { 
アラート(JSON.stringify(エラー));});

進捗状況:

VAR oProgressNum =のdocument.getElementById( 'NUM'); fileTransfer.onProgress((イベント:によってProgressEvent)=> { 
NUMせ = Math.ceil(event.loaded / event.total * 100); 場合(NUMの=== 100 ){ 
oProgressNum.innerHTML = '下载完成';} そう{ 
oProgressNum.innerHTML = '下载进度:' + NUM + '%' ;} 
})。

7 、インストールファイルを開きます

 

 この .fileOpener.open(entry.toURL()、 'アプリケーション/ vnd.android.package-アーカイブ' 
      .then(() => { 
にconsole.log( 'ファイルを開きます' 
}) キャッチ(E => { 
にconsole.log( 'エラーopeneningファイル'、E)})。

 

デモ:

インポート {コンポーネント}角度/コア@ 'から

インポート {FileOpener}「イオンネイティブ/ファイルオープナー/ NGX @」からインポート「@イオンネイティブ/ファイル転送/ NGX」から{変数をFileTransfer、FileTransferObject} インポートからのappversion {} '@イオンネイティブ/ APP-バージョン/ NGX' インポート {ファイル}「イオン-ネイティブ/ファイル/ NGX @」からインポート {AlertController}「イオン/角度@」から



@Component({ 
  セレクタ: 'APP-TAB1' 
  templateUrl: 'tab1.page.html' 
  styleUrls:[ 'tab1.page.scss'クラスTab1Page { 


  コンストラクタ(プライベートファイル:ファイル、プライベート転送:変数をFileTransfer、プライベートのappversion:のappversion、プライベート fileOpener:FileOpener、公共alertController:AlertController){ 
  } 

  // デバイスは、ハードウェアの呼び出しを再度読み込ま

  :)(ngAfterContentInitを無効{
     // 呼び出されます。ngOnInit後コンポーネントコンテンツAPOSのAPOSディレクティブまたは初期化された
     // 追加「用具をAfterContentInit」クラスに。
    この.isUpdate(); 
  } 

  {isUpdate()
    // 1は、アプリケーションの現在のバージョンを取得

    これを。.appVersion.getVersionNumber()を((値:任意)=> { 
      にconsole.log(値)

      // 2は、サーバは、バージョン番号を取得するためにサーバインターフェイスを要求する

      この.showAlertを(); 

    })。キャッチ(ERR => { 
      console.log( 'getVersionNumber:' + ERR); 
    ;})

  } 

  非同期showAlertは(){ 

    // ユーザーがポップ3.更新するように要求された場合に     
    CONSTアラート=待つこの.alertController.create({ 
      :ヘッダを '!アップグレード' 
      メッセージ:「?今すぐアップグレードするかどうか、新しいバージョンを発見する」
      ボタン:[ 
        { 
          テキスト:「キャンセル」
          役割:'キャンセル' 
          のCssClassを: '二次' 
          ハンドラ:(何とか) => { 
          } 
        }、{ 
          テキスト: '确认' 
          ハンドラ:() => {
             // 4下载のAPK 
            この.downloadApp()。
          } 
        } 
      ] 
    })。
    )(alert.presentを待ちます。

  } 

  downloadApp(){ 
    // 4下载APKの
    CONSTのTargetURL = 'http://127.0.0.1:8080/test.apk' constのファイル転送:FileTransferObject = この.transfer.create(); 

    はconsole.log(この .file.dataDirectoryは);    // 一致するように、現在のアプリケーションのインストール(ホーム)ディレクトリ1、2アプリケーションパッケージ名を取得し、アップグレードパッケージのバージョン番号は、アプリケーションの現在のバージョンよりも大きく、図3に示すように、署名が一致すること。4、SDKインストールする

    (のTargetURLに、fileTransfer.download この .file.dataDirectory + 'aaa.apk')。次に、((エントリ)=> {
       // アプリケーションを開き、図6は、ダウンロードが完了したコール

       この.fileOpener .Open(entry.toURL()
         'ファイルアプリケーション/ vnd.android.package-アーカイブ' 
        .then(() => { 
          にconsole.log( 'オープンファイルである' 
        }) キャッチ(E => { 
          コンソール。 (ログイン'エラーopeneningファイル' 、E)
        }); 


    }、(エラー) => { 
      アラート(JSON.stringify(エラー)); 
    }); 


    // 。5、ダウンロードの進行状況取得     
    VARをoProgressNum =のdocument.getElementById( 'progressnum' ; 
    fileTransfer.onProgress((イベント) => { 
      NUMせ = Math.ceil(event.loaded / event.total * 100);   //は1-100進行に変換
      IF(NUMの=== 100 ){ 
        oProgressNum.innerHTML = '"完了ダウンロード; 
      } そうでなければ{ 
        oProgressNum.innerHTML ='ダウンロードの進行状況: '+ NUM +' % ' ;
 
      }
    }); 

  } 
}

 

効果:

 

 

おすすめ

転載: www.cnblogs.com/loaderman/p/11333193.html
おすすめ