前言
APP應用內升級功能指在APP打開的情況下可以自己對自己進行升級操作,不需要用戶再通過應用商店進行升級。如果讓用戶通過應用商店升級的話首先新版本APP上線到應用商店需要一定的審核周期,第二好多用戶也沒有頻繁打開應用商店更新APP的習慣。如果開啟了應用內升級的功能就可以以最快的速度毫無中間商的將APP最新版本推送到用戶手上。
需要注意的是,APP應用內升級主要是針對Android版來說的,iOS版不涉及,因為蘋果爸爸規定所有iOS的應用升級必須走APP Store,如果發現有內部升級功能,則不予上架。
設計思路
本功能整體實現思路如下:
1、當用戶打開APP時檢測設備類型;
2、如果設備類型為Android,則代表可以進行升級檢測;
3、獲取APP的當前版本號,發送到升級接口;
4、后臺升級接口根據APP傳回的版本號與服務器上最新的版本進行對比,如發現有版本更新,則返回給前臺新版APP的下載地址;
5、APP端接收后臺返回結果,如沒有更新,則什么都不做。如有更新,則提示用戶有新版APP,并詢問是否需要更新;
6、如用戶選擇更新,則根據后臺返回的新版APP下載地址將該文件下載到本地,同時打開該文件;
7、用戶只需點擊確認安裝,安裝完成以后重新打開APP;
8、升級完成。
部分實現源碼
export class UserModule {
constructor(
public platform: Platform,
public events: Events,
public heyApp: AppService,
public userService: UserService,
public modalCtrl: ModalController,
public alertCtrl: AlertController,
public utilService: UtilService,
public localStorageService: LocalStorageService
) {
// platform ready
this.platform.ready().then(() => {
//啟動時自動檢查更新
this.updateApp();
});
}
updateApp(){
if(this.utilService.isAndroid() || this.utilService.isIos()){
this.utilService.getVersionNumber().then(ret => {
let params = {
versionNum : ret,
systemType: 'android'
}
this.userService.checkUpdate(params).then(data => {
if(data.isNeedUpdate){
//檢查當前版本是否要彈出提示
let cancelVersion = this.localStorageService.get(AppGlobal.CANCEL_VERSION);
if(cancelVersion == data.versionNum){
return;
}
this.alertCtrl.create({
title: '升級',
subTitle: '發現新版本,是否立即升級?',
buttons: [
{
text: '取消',
handler: () => {
this.localStorageService.set(AppGlobal.CANCEL_VERSION, data.versionNum);
}
},
{
text: '確定',
handler: () => {
this.utilService.downloadApp(data.versionAddr);
}
}
]
}).present();
}
});
});
}
}
}
模塊完整代碼
該模塊的完整代碼在我的GitHub上,如感興趣可以下載查看:
https://github.com/aapple/sm-coal-app
總結
只要把邏輯理清楚本模塊業務上基本上沒有難點,技術上需要重點關注的就是借助Cordova插件進行Android本地文件的下載和保存,最好對下載的文件進行完整性校驗,再提示用戶安裝。