一开始博主项目中做的是跳转到浏览器下载  后面发现有的手机跳转后无法连接服务器  但是在浏览器访问连接又可以 还没发现什么原因

后面试了3种解决方案 (改为 app内下载、更新)如下:

ios由于系统原因 只能跳转到 app stor 这里不讨论

注意:任何一种方式 都需要先获取存储读写权限,否则无法下载

方法1 先下载安装包,打开文件进行安装

  1. 使用dio工具库的下载,也可以采用下载插件flutter_downloader 使用稍微复杂点,这个插件支持Android、IOS下载

      我这里演示代码使用的是dio下载 ,使用 install_plugin 或者 open_file 安装apk ,

      我现在项目中使用的是 Dio 和 ota_update ,个人觉得这两个方便点

/// 下载apk
Future<File> _downloadApk(String datasource) async {
  /// 创建文件
  Directory storageDir = await getExternalStorageDirectory();
  String storagePath = storageDir.path;
  File file = new File('$storagePath/${Config.APP_NAME}v${_version}.apk');
   /// 判断文件是否存在,不存在则创建文件
  if (!file.existsSync()) {
    file.createSync();
  }

  try {
    /// 下载请求
    Response response = await Dio().get(datasource,
        onReceiveProgress: showDownloadProgress,
        options: Options(
          responseType: ResponseType.bytes,
          followRedirects: false,
        ));
    file.writeAsBytesSync(response.data);
    return file;
  } catch (e) {
    print(e);
  }
}


/// 安装apk
Future<Null> _installApk(String url) async {
  File _apkFile = await _downloadApk(url);
  String _apkFilePath = _apkFile.path;

  if (_apkFilePath.isEmpty) {
    print('确保设置了apk文件?');
    return;
  }

  InstallPlugin.installApk(_apkFilePath, Config.APP_ID)
      .then((result) {
    print('install apk $result');
  }).catchError((error) {
    print('install apk error: $error');
  });
}

方法2 使用 flutter_xupdate

传送门

方法3 使用 ota_update 第三方依赖

注意:安卓6.0以下 会出现无法下载或apk无效的情况 需自行进行配置

传送门

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐