apk_update.dart 4.3 KB
import 'package:apk_update/utils/utils.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'apk_update_platform_interface.dart';

class ApkUpdate {
  /// 检测应用版本(老版本方法)
  /// baseUrl
  /// versionNumber 当前应用版本号(versionCode)
  /// productNo 产品号
  /// onceDay 一天提示一次(应用首页设置true)
  /// appleId 苹果应用id
  /// 产品号:1.司机App(Android) 2.vipApp(Android) 4.马上富通App(Android) 9.马上来车App(Android)
  /// 27.司机App(iOS) 28.vipApp(iOS) 30.马上富通App(iOS) 29.马上来车App(iOS)
  void checkAppVersion({
    required String baseUrl,
    required int versionNumber,
    required int productNo,
    Map<String, dynamic>? paramsOSS,
    bool onceDay = false,
    required String appleId,
    Function()? downloadApkError, // 下载Apk错误
  }) {
    //App2.vipApp,3,vip-pc。4,马上富通。5,马上富通pc。6,微信货主。7,货主pc。8,马上审。默认为1
    checkVersion(
      url: "$baseUrl$getSystemVersionByNumber",
      method: Method.get,
      params: {"versionNumber": versionNumber, "productNo": productNo},
      isOssDownload: paramsOSS != null ? 1 : 0,
      onceDay: onceDay,
      jumpAppStore: () {
        // 跳转AppStore
        debugPrint("===== jumpAppStore");
        ApkUpdatePlatform.instance.jumpAppStore(appleId);
      },
      installApk: (String? path) {
        // 安装Apk
        debugPrint("===== installApk");
        ApkUpdatePlatform.instance.installApk(path);
      },
      downloadApkError: () {
        // 下载Apk错误
        debugPrint("===== downloadApkError");
        // 项目中没有依赖toast,自己项目中实现
        downloadApkError?.call();
      },
    );
  }

  /// 升级版本(新)
  /// url 全路径
  /// appleId 苹果应用id
  /// params {"versionNumber": 1, "product-code": "carrier-driver-app"}
  /// paramsOSS {"ak": "ak", "sk": "sk", "token": "token", "objectKey": "objectKey", "endpoint": "endpoint", "bucketName": "bucketName", }
  void updateApp({
    required String url,
    required Map<String, dynamic> params,
    bool onceDay = false,
    required String appleId,
    Map<String, dynamic>? paramsOSS,
    Function()? downloadApkError, // 下载Apk错误
  }) {
    checkVersion(
      url: url,
      method: Method.post,
      params: params,
      isOssDownload: paramsOSS != null ? 1 : 0,
      header: {"product-code": params["productCode"]},
      onceDay: onceDay,
      jumpAppStore: () {
        // 跳转AppStore
        debugPrint("===== jumpAppStore");
        ApkUpdatePlatform.instance.jumpAppStore(appleId);
      },
      installApk: (String? path) {
        // 安装Apk
        debugPrint("===== installApk");
        ApkUpdatePlatform.instance.installApk(path);
      },
      downloadApk: (String? path) {
        final dio = Dio();
        dio
            .get("${paramsOSS?['baseUrl']}$generateByExt",
                queryParameters: {
                  "extension": "apk",
                  "bucketName": paramsOSS?["bucketName"]
                },
                options: Options(headers: {
                  "token": paramsOSS?['token'],
                  "product-code": params["productCode"]
                }))
            .then((res) {
          if (res.data == null || res.data['code'] != 0) {
            debugPrint('获取OSS授权失败');
            downloadApkError?.call();
            return;
          }
          var map = res.data['data'];
          // 使用OSS下载
          var ak = map?['onceAccessKeyId'];
          var sk = map?["onceAccessKeySecret"];
          var token = map?["onceSecurityToken"];
          var objectKey = paramsOSS?["objectKey"];
          var endpoint = paramsOSS?["endpoint"];
          var bucketName = paramsOSS?["bucketName"];
          var localPath = path;
          if (localPath == null) {
            // 项目中没有依赖toast,自己项目中实现
            downloadApkError?.call();
            return;
          }
          ApkUpdatePlatform.instance.downloadApk(
              ak, sk, token, objectKey, endpoint, bucketName, localPath);
        });
      },
      downloadApkError: () {
        // 下载Apk错误
        debugPrint("===== downloadApkError");
        // 项目中没有依赖toast,自己项目中实现
        downloadApkError?.call();
      },
    );
  }
}