Ionic2实战-APP应用内升级模块开发
2018-03-15 本文已影响43人
逃离火星
前言
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本地文件的下载和保存,最好对下载的文件进行完整性校验,再提示用户安装。