注意:无特殊说明,Flutter版本及Dart版本如下:

  • Flutter版本: 1.12.13+hotfix.5
  • Dart版本: 2.7.0

应用程序升级功能是App的基础功能之一,如果没有此功能会造成用户无法升级,应用程序的bug或者新功能老用户无法触达,甚至损失这部分用户。

对于应用程序升级功能的重要性就无需赘言了,下面介绍下应用程序升级功能的几种方式,从平台方面来说:

  • IOS平台,应用程序升级功能只能通过跳转到app store进行升级。
  • Android平台,既可以通过跳转到应用市场进行升级,也可以下载apk包升级。

从强制性来说可以分别强制升级和非强制升级:

  • 强制升级:就是用户必须升级才能继续使用App,如果不是非常必要不建议使用如此强硬的方式,会造成用户的反感。
  • 非强制升级就是允许用户点击“取消”,继续使用App。

下面分别介绍IOS和Android升级流程。

IOS升级流程

IOS升级流程如下:

流程说明:

  1. 通常我们会访问后台接口获取是否有新的版本,如果有新的版本则弹出提示框,判断当前版本是否为“强制升级”,如果是则只提供用户一个“升级”的按钮,否则提供用户“升级”和“取消”按钮。
  2. 弹出提示框后用户选择是否升级,如果选择“取消”,提示框消失,如果选择“升级”,跳转到app store进行升级。

Android 升级流程

相比ios的升级过程,Android就稍显复杂了,流程图如下:

流程说明:

  1. 访问后台接口获取是否有新的版本,这里和IOS是一样的,有则弹出升级提示框,判断当前版本是否为“强制升级”,如果是则只提供用户一个“升级”的按钮,否则提供用户“升级”和“取消”按钮。
  2. 弹出提示框后有用户选择是否升级,如果选择“取消”,提示框消失,如果选择“升级”,判断是跳转到应用市场进行升级还是通过下载apk升级。
  3. 如果下载apk升级,则开始下载apk,下载完成后跳转到apk安装引导界面。
  4. 如果跳转到应用市场升级,判断是否指定了应用市场,比如只在华为应用市场上架了,那么此时需要指定跳转到华为应用市场,即使你在很多应用市场都上架了,也应该根据用户手机安装的应用市场指定一个应用市场,让用户选择应用市场不是一个好的体验,而且用户也不知道应该去哪个市场更新,如果用户选择了一个你没有上架的应用市场,那就更尴尬了。
  5. 指定应用市场后直接跳转到指定的应用市场的更新界面。

介绍完了升级流程,主角终于出场了。

App升级功能使用介绍

只需在主页的initState方法中调用升级检测方法:

@overridevoid initState() {AppUpgrade.appUpgrade(context,_checkAppInfo(),iosAppId: 'id88888888',);super.initState();}

_checkAppInfo方法访问后台接口获取是否有新的版本的信息,返回Future<AppUpgradeInfo> 类型,AppUpgradeInfo包含title、升级内容、apk下载url、是否强制升级等版本信息。

iosAppId参数用于跳转到app store。

_checkAppInfo()方法通常是访问后台接口,这里直接返回新版本信息,代码如下:

Future<AppUpgradeInfo> _checkAppInfo() {return Future.value(AppUpgradeInfo(title: '新版本V1.1.1',contents: ['1、支持立体声蓝牙耳机,同时改善配对性能','2、提供屏幕虚拟键盘','3、更简洁更流畅,使用起来更快','4、修复一些软件在使用时自动退出bug','5、新增加了分类查看功能'],apkDownloadUrl: '',force: false,));

好了,基本的升级功能就完成了,弹出提示框的效果如下:

点击“以后再说”,提示框消失,点击“立即体验”,自动区分不同平台。

访问后台接口获取新版本的信息一般需要当前App的包名和版本,查询方法如下:

await FlutterUpgrade.appInfo

返回的类型是AppInfo

  • versionName:版本号,比如1.0.0。
  • versionCode:Android独有版本号,对应Android build.gradle中的versionCode,ios返回“0”。
  • packageName:包名,对应Android build.gradle中的applicationId,ios的BundleIdentifier。

iOS平台升级

iOS平台直接跳转到app store相关页面,iosAppId一定要设置对,否则app store会找不到应用程序。

Android平台下载apk

Android平台则会判断是否设置了apk下载url,如果设置了则下载apk则直接下载,效果如下:

当下载完成时直接跳转到apk安装引导界面,效果如下:

用户点击允许,出现如下界面:

点击继续安装即可,上面的安装引导界面是系统界面,不同的手机或者不同的Android版本会略有不同。

Android平台跳转应用市场

如果不提供apk下载地址,点击“立即体验”,则会跳转到应用市场,不指定应用市场则会弹出提示框,让用户选择应用市场,效果如下:

提示框内将会包含手机内安装的所有的应用市场,用户选择一个然后跳转到对应应用市场的详情界面,如果当前应用未在此市场上架则会出现“找不到的界面”。

通常情况下会指定应用市场,这就需要知道用户手机内安装的应用市场,查询方法如下:

_getInstallMarket() async {List<String> marketList = await FlutterUpgrade.getInstallMarket();
}

插件内置了国内常用的应用市场,包括小米、魅族、vivo、oppo、华为、zte、360助手、应用宝、pp助手、豌豆荚,如果你需要检测其他的应用市场,比如google play,只需添加googl play的包名即可:

_getInstallMarket() async {List<String> marketList = await FlutterUpgrade.getInstallMarket(marketPackageNames: ['google play 包名']);
}

方法返回手机安装的应用市场,根据安装的应用市场指定跳转应用市场,如果你要指定内置的应用市场,可以根据包名获取内置的应用市场的相关信息:

AppMarketInfo _marketInfo = AppMarket.getBuildInMarket(packageName);

指定华为应用市场:

AppUpgrade.appUpgrade(context,_checkAppInfo(),iosAppId: 'id88888888',appMarketInfo: AppMarket.huaWei
);

指定没有内置的应用市场方法如下:

AppUpgrade.appUpgrade(context,_checkAppInfo(),iosAppId: 'id88888888',appMarketInfo: AppMarketInfo('应用市场名称(选填)','应用市场包名','应用市场类名'),
);

提示框样式定制

如果默认的升级提示框不满足你的需求,那么你可以定制你的升级提示框。

title及升级内容文字样式设置:

AppUpgrade.appUpgrade(context, _checkAppInfo(),titleStyle: TextStyle(fontSize: 30),contentStyle: TextStyle(fontSize: 18),...
)

通过titleStylecontentStyle设置其样式,可以设置字体大小、颜色、粗体等。

设置“取消”和“升级按钮”文本和样式:

AppUpgrade.appUpgrade(context, _checkAppInfo(),cancelText: '以后再说',cancelTextStyle: TextStyle(color: Colors.grey),okText: '马上升级',okTextStyle: TextStyle(color: Colors.red),...
)

默认“取消”按钮文本是"以后再说",默认“升级”按钮的文本是“立即体验”。

设置“升级”按钮的背景颜色,需要2种颜色,2种颜色左到右线性渐变,如果想设置纯色,只需将2种颜色设置为同一个颜色即可,默认颜色是系统的primaryColor:

AppUpgrade.appUpgrade(context, _checkAppInfo(),okBackgroundColors: [Colors.blue, Colors.lightBlue],...
)

设置进度条的颜色:

AppUpgrade.appUpgrade(context, _checkAppInfo(),progressBarColor: Colors.lightBlue.withOpacity(.4),...
)

设置升级提示框的圆角半径,默认是20:

AppUpgrade.appUpgrade(context, _checkAppInfo(),borderRadius: 15,...
)

Github:https://github.com/781238222/flutter-do/tree/master/flutter_app_upgrade

交流

如果你对Flutter还有疑问或者技术方面的疑惑,欢迎加入Flutter交流群(微信:laomengit)。

同时也欢迎关注我的Flutter公众号【老孟程序员】,公众号首发Flutter的相关内容。

Flutter地址:http://laomengit.com 里面包含160多个组件的详细用法。

强大的Flutter App升级功能相关推荐

  1. Android DownloadManager 系统下载器实现APP升级功能

    一.下载路径的设置和获取.    (1)request.setDestinationInExternalFilesDir(context, dirType, subPath);    (2)reque ...

  2. bugly android 错误不上报,Flutter Android 端集成 Bugly 的异常上报和升级功能

    前提 Flutter 版本:1.17.0地址,别用最新版本或者比较老的版本.我之前使用1.13.0版本也会出现问题. Dart版本:2.8.1使用Flutter中提供的版本 ok ,在大版本相同的情况 ...

  3. flutter跨平台开发之App升级方案

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 精通点的可以查看这里 精述 Flutter 从入门实践到开发一个APP之UI基础篇 视频 Flutter 从 ...

  4. 【uniapp】uniapp安卓APP在线自动升级功能

    纯前端实现uniapp写的安卓APP跟IOS在线自动升级功能 关于Uniapp自动升级用到的阿里云要收费的问题 使用的UI框架为UVIEW2.0 用到的请求等 总结下思路 就是通过获取XML文件返回来 ...

  5. 【githubgirl】功能强大的绘画 App:tldraw,自带画笔、橡皮、线框、文字等工具,用户可自定义画笔颜色

    Spider Flow,一个高度灵活可配置的爬虫平台,用户无需编写代码,以流程图的方式,即可实现爬虫. 该工具支持多数据源.自动保存至数据库.任务监控.抓取 JS 动态渲染页面.插件扩展(OCR 识别 ...

  6. 4个功能强大的国产APP,第2个可以免费看小说哦!

    国产手机越做越大,国产APP自然也不落后,比如那些大众的支付宝.微信.京东等给我们生活带来了很大的便利,今天再给大家分享5个功能强大的国产APP,第2个可以免费看小说哦. 1. Foodie 一款专门 ...

  7. Flutter App更新升级

    1. 应用程序升级流程 由于在 IOS 中没法直接下载安装,如果版本不一致则直接跳转到IOS应用对应的应用市场就可以了,所以本文仅介绍Android App的升级流程. Android App升级流程 ...

  8. flutterdio_强大的Flutter http请求库dio

    dio是Flutter中文网开源的一个强大的Dart Http请求库,支持Restful API.FormData.拦截器.请求取消.Cookie管理.文件上传/下载.超时等... 自dio开源至今, ...

  9. Flutter App开发蓝牙协议

    Flutter App开发蓝牙协议 Summary BLE低功耗蓝牙,是我们常说的蓝牙4.0, 该技术有极低的运行待机功耗,本文记录使用Flutter开发安卓App的过程,使用蓝牙模块的配置和一些细节 ...

最新文章

  1. CSS之定位(绝对定位元素的布局)
  2. c语言Inqueue函数用法,C语言用两个栈实现队列(完整版)
  3. 解析三层架构(1)---为什么要分层?
  4. 《智慧书》格言241-250
  5. int类型年月怎么区间查询_LeetCode 力扣官方题解 | 57.插入区间
  6. 【推荐】国外优秀Drupal答疑网站
  7. postman安装路径_Newman进行postman脚本自动化
  8. datagrid传参_DataGrid里面要传两个参数怎么传
  9. C语言之-fPIC编译与代码位置无关.a/.so库(二)
  10. Linux 定时任务详解
  11. 如何在 Mac 上使用任务控制空间?
  12. python如何获得列表中某个元素的index
  13. 正好股票开户指数大跌分解比较严重
  14. java int 转 object_在java上将int转换为Object
  15. postgresql 清理磁盘空间
  16. 华为鸿蒙系统平板电脑,华为5G鸿蒙系统平板电脑正式入网,搭载八核处理器麒麟9000芯片...
  17. 地图制图领域使用计算机优点在于哪些方面,电子地图制图的运用与发展
  18. Android App 耗电的测试方法
  19. 【Spring注解驱动开发】使用@Autowired@Qualifier@Primary三大注解自动装配组件,你会了吗?
  20. 解决img撑大父盒子

热门文章

  1. Flutter使用UDP
  2. 坚持就是胜利- -。。。。
  3. fxssvc.exe
  4. 一款开源的播放器框架WMPlayer
  5. RS232转Profinet网关的常规数据
  6. C8051F340芯片64位驱动移植
  7. SQL过滤中文(或英文)数据
  8. 如何加速网页的打开速度?
  9. 佳能《万物共生》艺术装置落地侨福芳草地
  10. android编译openssl静态库.a 动态库.so