Flutter应用升级管理插件r_upgrade的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter应用升级管理插件r_upgrade的使用

插件概述

r_upgrade 是一个用于Flutter应用在Android和iOS平台上进行版本更新的插件。它支持多种更新方式,如通过链接跳转更新、从应用商店更新、下载APK文件更新等,并且提供了详细的API来控制更新过程中的各个环节。

r_upgrade

主要功能

  • Android平台

    • [✔] 支持通过链接模式更新
    • [✔] 获取用户已安装的应用商店列表(仅限部分商店)
    • [✔] 从指定的应用商店获取应用版本信息(目前仅支持Google Play、小米、腾讯)
    • [✔] 跳转至应用商店进行更新
    • [✔] 使用下载链接直接下载APK并监控下载进度
      • 监控下载信息
      • 取消/暂停/继续下载
      • 根据ID获取下载状态
      • 安装APK
      • 获取最后一次下载ID
      • 修改通知栏显示内容
    • [✔] 热更新
    • [✔] 差异更新
  • iOS平台

    • [✔] 根据App ID跳转至App Store更新
    • [✔] 根据App ID获取当前在线版本

开发者为该插件付出了很多努力,如果你觉得有用,请考虑捐赠以支持开发者的工作。

快速开始

1. 添加依赖

首先,在pubspec.yaml文件中添加r_upgrade作为依赖项:

dependencies:
  r_upgrade: last_version # 替换为最新版本号

2. 基本用法

从自定义网址更新 (适用于Android或iOS)

void upgradeFromUrl() async {
  bool isSuccess = await RUpgrade.upgradeFromUrl('https://www.example.com');
  print(isSuccess);
}

Android平台特定操作

获取Android应用商店列表
void getAndroidStores() async {
  final stores = await RUpgrade.androidStores;
  print(stores);
}
从应用商店获取版本号
void getVersionName() async {
  final versionName = await RUpgrade.getVersionFromAndroidStore(AndroidStore.GOOGLE_PLAY);
  print(versionName);
}
从应用商店启动更新
void upgradeFromAndroidStore() async {
  bool isSuccess = await RUpgrade.upgradeFromAndroidStore(AndroidStore.GOOGLE_PLAY);
  print('${isSuccess ? '跳转成功' : '跳转失败'}');
}
通过下载链接更新

确保应用程序具有必要的权限,并请求动态权限:

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

添加下载监听器

RUpgrade.stream.listen((DownloadInfo info) {
  // 处理下载信息
});

开始更新

void upgrade() async {
  int id = await RUpgrade.upgrade(
    'https://example.com/app-release.apk',
    apkName: 'app-release.apk', 
    installType: RUpgradeInstallType.normal,
  );
}

取消下载

void cancel() async {
  bool isSuccess = await RUpgrade.cancel(id);
  print(isSuccess);
}

安装APK

void install() async {
  bool isSuccess = await RUpgrade.install(id);
  print(isSuccess);
}

获取最后一次更新ID

void getLastUpgradeId() async {
  int id = await RUpgrade.getLastUpgradedId();
  print(id);
}

根据ID获取下载状态

void getDownloadStatus() async {
  DownloadStatus status = await RUpgrade.getDownloadStatus(id);
  print(status);
}

增量更新

void incrementUpgrade() async {
  int id = await RUpgrade.upgrade(
    'https://example.com/increment.patch',
    fileName: 'increment.patch',
    useDownloadManager: false,
    installType: RUpgradeInstallType.none,
    upgradeFlavor: RUpgradeFlavor.incrementUpgrade,
  );
}

void installIncrement() async {
  try {
    await RUpgrade.install(id);
  } catch (e) {
    print('安装失败');
  }
}

热更新

void hotUpgrade() async {
  int id = await RUpgrade.upgrade(
    'https://example.com/hot_update.zip',
    fileName: 'hot_update.zip',
    useDownloadManager: false,
    installType: RUpgradeInstallType.none,
    upgradeFlavor: RUpgradeFlavor.hotUpgrade,
  );

  bool isSuccess = await RUpgrade.install(id);
  if (isSuccess) {
    print('热更新成功');
    Future.delayed(Duration(seconds: 3)).then((_) {
      SystemNavigator.pop(animated: true);
    });
  } else {
    print('热更新失败');
  }
}

iOS平台特定操作

跳转至App Store更新
void upgradeFromAppStore() async {
  bool isSuccess = await RUpgrade.upgradeFromAppStore('your AppId');
  print(isSuccess);
}
获取App Store上的最新版本
void getVersionFromAppStore() async {
  String versionName = await RUpgrade.getVersionFromAppStore('your AppId');
  print(versionName);
}

示例代码

以下是一个完整的示例项目结构,展示了如何集成r_upgrade插件并实现基本的功能。

import 'package:flutter/material.dart';
import 'package:r_upgrade/r_upgrade.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('r_upgrade Example')),
        body: UpgradeScreen(),
      ),
    );
  }
}

class UpgradeScreen extends StatefulWidget {
  @override
  _UpgradeScreenState createState() => _UpgradeScreenState();
}

class _UpgradeScreenState extends State<UpgradeScreen> {
  int? downloadId;

  @override
  void initState() {
    super.initState();
    RUpgrade.setDebug(true);
  }

  void startUpgrade() async {
    downloadId = await RUpgrade.upgrade(
      'https://example.com/app-release.apk',
      apkName: 'app-release.apk',
      installType: RUpgradeInstallType.normal,
    );
    setState(() {});
  }

  void cancelUpgrade() async {
    if (downloadId != null) {
      bool success = await RUpgrade.cancel(downloadId!);
      print('取消结果: $success');
    }
  }

  void pauseUpgrade() async {
    if (downloadId != null) {
      bool success = await RUpgrade.pause(downloadId!);
      print('暂停结果: $success');
    }
  }

  void resumeUpgrade() async {
    if (downloadId != null) {
      bool success = await RUpgrade.upgradeWithId(downloadId!);
      print('恢复结果: $success');
    }
  }

  void installApk() async {
    if (downloadId != null) {
      bool success = await RUpgrade.install(downloadId!);
      print('安装结果: $success');
    }
  }

  @override
  Widget build(BuildContext context) {
    return ListView(
      children: <Widget>[
        ListTile(
          title: Text('开始更新'),
          onTap: startUpgrade,
        ),
        ListTile(
          title: Text('取消更新'),
          onTap: cancelUpgrade,
        ),
        ListTile(
          title: Text('暂停更新'),
          onTap: pauseUpgrade,
        ),
        ListTile(
          title: Text('恢复更新'),
          onTap: resumeUpgrade,
        ),
        ListTile(
          title: Text('安装APK'),
          onTap: installApk,
        ),
      ],
    );
  }
}

这个示例展示了如何使用r_upgrade插件来管理应用的更新流程,包括启动更新、取消更新、暂停和恢复更新以及安装新版本的APK。你可以根据自己的需求进一步扩展这些功能。


更多关于Flutter应用升级管理插件r_upgrade的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用升级管理插件r_upgrade的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter应用中使用r_upgrade插件进行应用升级管理的代码案例。r_upgrade插件通常用于在应用内检测新版本、下载新版本并提示用户进行安装。以下是一个基本的实现步骤和代码示例。

步骤 1: 添加依赖

首先,在pubspec.yaml文件中添加r_upgrade依赖:

dependencies:
  flutter:
    sdk: flutter
  r_upgrade: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来获取依赖。

步骤 2: 配置权限

AndroidManifest.xmlInfo.plist中添加必要的权限配置,特别是网络权限,因为下载新版本需要网络连接。

Android (AndroidManifest.xml)

<uses-permission android:name="android.permission.INTERNET"/>

iOS (Info.plist)

通常,iOS不需要额外的网络权限配置,但确保你的应用有网络访问能力。

步骤 3: 初始化并使用r_upgrade

在你的Flutter应用中,你可以按照以下方式初始化并使用r_upgrade插件。

import 'package:flutter/material.dart';
import 'package:r_upgrade/r_upgrade.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  RUpgrade? _rUpgrade;

  @override
  void initState() {
    super.initState();
    // 初始化RUpgrade
    _rUpgrade = RUpgrade(
      // 配置你的升级服务器地址
      checkUrl: 'https://your-upgrade-server.com/version.json',
      // 配置其他参数,比如下载路径等(可选)
      apkStorageDir: '/sdcard/Download/',
      isForceUpgrade: false, // 是否强制升级
      upgradeDialogParams: UpgradeDialogParams(
        title: '应用升级',
        upgradeContent: '发现新版本,请更新应用。',
        cancelText: '取消',
        upgradeText: '立即更新',
        isShowIgnoreVersion: true, // 是否显示“忽略此版本”按钮
      ),
    );

    // 检查版本更新
    _checkVersion();
  }

  Future<void> _checkVersion() async {
    try {
      bool hasUpdate = await _rUpgrade!.checkVersion();
      if (hasUpdate) {
        // 显示升级对话框
        _rUpgrade!.showUpgradeDialog(context);
      } else {
        // 没有新版本
        print('当前已是最新版本');
      }
    } catch (e) {
      print('检查版本更新失败: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('应用升级管理示例'),
        ),
        body: Center(
          child: Text('检查更新中...'),
        ),
      ),
    );
  }
}

版本服务器返回的JSON示例

你的升级服务器应该返回一个JSON格式的数据,例如:

{
  "versionCode": 2,
  "versionName": "1.1.0",
  "apkUrl": "https://your-upgrade-server.com/app-release.apk",
  "changeLog": "修复了一些bug,增加了新功能。"
}

注意事项

  1. 权限处理:确保你的应用在运行时请求并获得了必要的权限(特别是Android 6.0及以上版本)。
  2. 错误处理:在实际应用中,添加更多的错误处理逻辑,以应对网络问题、文件读写问题等。
  3. 用户提示:根据实际需求自定义升级对话框的内容和样式。

通过以上步骤,你就可以在Flutter应用中使用r_upgrade插件进行应用升级管理了。

回到顶部