From 0c3ef3b59867cb15eb328e2b724deefcf79a3d70 Mon Sep 17 00:00:00 2001 From: hailin Date: Sat, 7 Mar 2026 00:50:42 -0800 Subject: [PATCH] fix(mobile): fix version check API and platform detection in both apps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit genex-mobile/lib/core/updater/version_checker.dart - platform 从写死 'android' 改为运行时检测 Platform.isIOS ? 'IOS' : 'ANDROID' admin-app/lib/core/updater/version_checker.dart - API 路径修正: /api/app/version/check → /api/v1/app/version/check - 新增 app_type: 'ADMIN_APP'(原缺失,后端默认返回 GENEX_MOBILE 版本) - platform 从写死 'android' 改为运行时检测 - 响应解析修正: 原逻辑把外层 {code,data} 当版本数据用, 改为正确取 response.data['data'] 内层对象 - 新增 downloadUrl 相对路径修复(向下兼容旧记录) Co-Authored-By: Claude Sonnet 4.6 --- .../lib/core/updater/version_checker.dart | 23 +++++++++++++------ .../lib/core/updater/version_checker.dart | 4 +++- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/frontend/admin-app/lib/core/updater/version_checker.dart b/frontend/admin-app/lib/core/updater/version_checker.dart index 626a0e0..a56c4d2 100644 --- a/frontend/admin-app/lib/core/updater/version_checker.dart +++ b/frontend/admin-app/lib/core/updater/version_checker.dart @@ -1,6 +1,7 @@ import 'package:package_info_plus/package_info_plus.dart'; import 'package:dio/dio.dart'; import 'package:flutter/foundation.dart'; +import 'dart:io' show Platform; import 'models/version_info.dart'; /// 版本检测器 @@ -27,26 +28,34 @@ class VersionChecker { final currentInfo = await getCurrentVersion(); debugPrint('[VersionChecker] 当前版本: ${currentInfo.version}, buildNumber: ${currentInfo.buildNumber}'); + final platform = Platform.isIOS ? 'IOS' : 'ANDROID'; final response = await _dio.get( - '/api/app/version/check', + '/api/v1/app/version/check', queryParameters: { - 'platform': 'android', + 'app_type': 'ADMIN_APP', + 'platform': platform, 'current_version': currentInfo.version, 'current_version_code': currentInfo.buildNumber, }, ); if (response.statusCode == 200 && response.data != null) { - final data = response.data is Map - ? response.data as Map - : (response.data['data'] as Map?) ?? response.data; + final responseMap = response.data as Map; + final data = (responseMap['data'] as Map?) ?? responseMap; - final needUpdate = data['needUpdate'] as bool? ?? true; + final needUpdate = data['needUpdate'] as bool? ?? false; if (!needUpdate) { debugPrint('[VersionChecker] 无需更新'); return null; } - return VersionInfo.fromJson(data); + + // Fix relative downloadUrl → prepend apiBaseUrl for backward compatibility + final rawUrl = data['downloadUrl'] as String? ?? ''; + final fixedData = (rawUrl.isNotEmpty && !rawUrl.startsWith('http')) + ? (Map.from(data)..['downloadUrl'] = '$apiBaseUrl$rawUrl') + : data; + + return VersionInfo.fromJson(fixedData); } return null; } catch (e) { diff --git a/frontend/genex-mobile/lib/core/updater/version_checker.dart b/frontend/genex-mobile/lib/core/updater/version_checker.dart index c5d46a1..3e8eed2 100644 --- a/frontend/genex-mobile/lib/core/updater/version_checker.dart +++ b/frontend/genex-mobile/lib/core/updater/version_checker.dart @@ -1,6 +1,7 @@ import 'package:package_info_plus/package_info_plus.dart'; import 'package:dio/dio.dart'; import 'package:flutter/foundation.dart'; +import 'dart:io' show Platform; import 'models/version_info.dart'; /// 版本检测器 @@ -27,11 +28,12 @@ class VersionChecker { final currentInfo = await getCurrentVersion(); debugPrint('[VersionChecker] 当前版本: ${currentInfo.version}, buildNumber: ${currentInfo.buildNumber}'); + final platform = Platform.isIOS ? 'IOS' : 'ANDROID'; final response = await _dio.get( '/api/v1/app/version/check', queryParameters: { 'app_type': 'GENEX_MOBILE', - 'platform': 'android', + 'platform': platform, 'current_version': currentInfo.version, 'current_version_code': currentInfo.buildNumber, },