アンドロイドアプリのアップグレードプロセスの実行
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 +' % ' ; } }); } }
効果: