From 9c3258b37c92f4bc0d64d3aaf0e331ee4ee1d593 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Fri, 24 Oct 2025 12:59:13 +0800 Subject: [PATCH] =?UTF-8?q?refactor(version=5Fupdate=5Fservice):=20?= =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=BB=84=E7=BB=87=E4=BB=A3=E7=A0=81=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E5=B9=B6=E4=BC=98=E5=8C=96=E6=B8=A0=E9=81=93=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整代码结构将相关方法分组,优化Android设备渠道获取逻辑 确保渠道信息与平台信息保持一致,并添加日志记录 --- lib/data/services/version_update_service.dart | 195 +++++++++--------- 1 file changed, 100 insertions(+), 95 deletions(-) diff --git a/lib/data/services/version_update_service.dart b/lib/data/services/version_update_service.dart index d41b31441..e26ed08eb 100644 --- a/lib/data/services/version_update_service.dart +++ b/lib/data/services/version_update_service.dart @@ -1,5 +1,6 @@ import 'dart:io'; -import 'package:flutter/foundation.dart'; +import 'dart:math' as math; + import 'package:get/get.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -8,7 +9,6 @@ import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import '../models/channel_app_model.dart'; import 'network/api.dart'; -import 'dart:math' as math; /// 版本更新服务类 class VersionUpdateService extends GetxService { @@ -49,7 +49,11 @@ class VersionUpdateService extends GetxService { String get cachedDeviceBrand => _deviceBrand ?? ''; /// 获取缓存的渠道信息 - UserChannel get cachedChannel => _channel ?? UserChannel.UNKNOWN; + UserChannel get cachedChannel => + _channel ?? + (_platform?.toLowerCase() == 'ios' + ? UserChannel.GLOBAL_APPLE + : UserChannel.GLOBAL_GOOGLE); /// 获取缓存的最新版本 String get cachedLatestVersion => _latestVersion ?? ''; @@ -90,96 +94,6 @@ class VersionUpdateService extends GetxService { // super.onInit(); // } - /// 获取当前应用版本信息 - Future getCurrentVersion() async { - try { - final packageInfo = await PackageInfo.fromPlatform(); - _appVersion = packageInfo.version; - _buildNumber = packageInfo.buildNumber; - return '${packageInfo.version}+${packageInfo.buildNumber}'; - } catch (e) { - _logger.e('获取当前版本信息失败: $e'); - return '1.0.0'; - } - } - - /// 获取当前平台信息 - Future getCurrentPlatformInfo() async { - if (Platform.isIOS) { - return const PlatformInfo( - platform: 'ios', - storeType: AppStoreType.appStore, - channel: UserChannel.GLOBAL_APPLE, - ); - } - - if (Platform.isAndroid) { - // 根据设备品牌判断应用商店类型 - return await getAndroidStoreInfoByBrand(); - } - - return const PlatformInfo( - platform: 'unknown', - storeType: AppStoreType.unknown, - channel: UserChannel.UNKNOWN, - ); - } - - /// 根据设备品牌获取应用商店信息 - /// - /// 该方法根据设备品牌判断应用商店类型,并返回对应的 [PlatformInfo] 对象。 - /// 如果品牌不在预设列表中,将使用环境变量 [Channel] 或默认值 [UserChannel.GLOBAL_GOOGLE]。 - Future getAndroidStoreInfoByBrand() async { - try { - final deviceInfo = DeviceInfoPlugin(); - final androidInfo = await deviceInfo.androidInfo; - final brand = androidInfo.brand.toLowerCase(); - - _deviceBrand = brand; - String channelFromEnv = dotenv.env['Channel'] ?? 'OFFICIAL'; - _channel = UserChannel.fromName(channelFromEnv); - - UserChannel brandChannel; //品牌渠道,只用于请求版本更新信息 - - switch (brand) { - case 'huawei': - brandChannel = UserChannel.CHINA_HUAWEI; - break; - case 'xiaomi': - case 'redmi': - brandChannel = UserChannel.CHINA_XIAOMI; - break; - case 'oppo': - case 'oneplus': - brandChannel = UserChannel.CHINA_OPPO; - break; - case 'vivo': - case 'iqoo': - brandChannel = UserChannel.CHINA_VIVO; - break; - case 'honor': - brandChannel = UserChannel.CHINA_HONOR; - break; - default: - brandChannel = _channel ?? UserChannel.GLOBAL_GOOGLE; - break; - } - - return PlatformInfo( - platform: 'android', - storeType: AppStoreType.official, - channel: brandChannel, - ); - } catch (e) { - _logger.e('获取Android设备信息失败: $e'); - return const PlatformInfo( - platform: 'android', - storeType: AppStoreType.googlePlay, - channel: UserChannel.UNKNOWN, - ); - } - } - /// 检查版本更新 Future checkForUpdate() async { if (_lastCheckTime != null && @@ -203,7 +117,7 @@ class VersionUpdateService extends GetxService { final platformInfo = await getCurrentPlatformInfo(); _platform = platformInfo.platform; - //_channel = platformInfo.channel; + _channel = platformInfo.channel; _lastCheckTime = DateTime.now(); // 调用后端接口获取最新版本信息 @@ -233,7 +147,7 @@ class VersionUpdateService extends GetxService { // 设置游客登录显示状态(先用当前渠道结果作为回退,再用.env渠道覆盖以保持一致) _isShowTourists = appInfo.tourists; - if (_channel != platformInfo.channel) { + if (Platform.isAndroid && _channel != platformInfo.channel) { //[4]当前渠道与.env渠道不同,需要从.env渠道获取游客登录配置 await _refreshTouristsFromEnv(); } @@ -281,6 +195,97 @@ class VersionUpdateService extends GetxService { } } + /// 获取当前应用版本信息 + Future getCurrentVersion() async { + try { + final packageInfo = await PackageInfo.fromPlatform(); + _appVersion = packageInfo.version; + _buildNumber = packageInfo.buildNumber; + return '${packageInfo.version}+${packageInfo.buildNumber}'; + } catch (e) { + _logger.e('获取当前版本信息失败: $e'); + return '1.0.0'; + } + } + + /// 获取当前平台信息 + Future getCurrentPlatformInfo() async { + if (Platform.isIOS) { + return const PlatformInfo( + platform: 'ios', + storeType: AppStoreType.appStore, + channel: UserChannel.GLOBAL_APPLE, + ); + } + + if (Platform.isAndroid) { + // 根据设备品牌判断应用商店类型 + return await getAndroidStoreInfoByBrand(); + } + + return const PlatformInfo( + platform: 'unknown', + storeType: AppStoreType.unknown, + channel: UserChannel.UNKNOWN, + ); + } + + /// 根据设备品牌获取应用商店信息 + /// + /// 该方法根据设备品牌判断应用商店类型,并返回对应的 [PlatformInfo] 对象。 + /// 如果品牌不在预设列表中,将使用环境变量 [Channel] 或默认值 [UserChannel.GLOBAL_GOOGLE]。 + Future getAndroidStoreInfoByBrand() async { + try { + final deviceInfo = DeviceInfoPlugin(); + final androidInfo = await deviceInfo.androidInfo; + final brand = androidInfo.brand.toLowerCase(); + + _deviceBrand = brand; + String channelFromEnv = dotenv.env['Channel'] ?? 'OFFICIAL'; + Logger().d('channelFromEnv: $channelFromEnv'); + _channel = UserChannel.fromName(channelFromEnv); + + UserChannel brandChannel; //品牌渠道,只用于请求版本更新信息 + + switch (brand) { + case 'huawei': + brandChannel = UserChannel.CHINA_HUAWEI; + break; + case 'xiaomi': + case 'redmi': + brandChannel = UserChannel.CHINA_XIAOMI; + break; + case 'oppo': + case 'oneplus': + brandChannel = UserChannel.CHINA_OPPO; + break; + case 'vivo': + case 'iqoo': + brandChannel = UserChannel.CHINA_VIVO; + break; + case 'honor': + brandChannel = UserChannel.CHINA_HONOR; + break; + default: + brandChannel = _channel ?? UserChannel.GLOBAL_GOOGLE; + break; + } + + return PlatformInfo( + platform: 'android', + storeType: AppStoreType.official, + channel: brandChannel, + ); + } catch (e) { + _logger.e('获取Android设备信息失败: $e'); + return const PlatformInfo( + platform: 'android', + storeType: AppStoreType.googlePlay, + channel: UserChannel.UNKNOWN, + ); + } + } + /// 从.env文件刷新游客登录配置 Future _refreshTouristsFromEnv() async { try {