Browse Source

refactor(version_update_service): 重新组织代码结构并优化渠道获取逻辑

调整代码结构将相关方法分组,优化Android设备渠道获取逻辑
确保渠道信息与平台信息保持一致,并添加日志记录
newdev_shunjiawei
lxm 12 months ago
parent
commit
9c3258b37c
  1. 195
      lib/data/services/version_update_service.dart

195
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<String> 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<PlatformInfo> 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<PlatformInfo> 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<VersionUpdateInfo> 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<String> 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<PlatformInfo> 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<PlatformInfo> 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<void> _refreshTouristsFromEnv() async {
try {

Loading…
Cancel
Save