diff --git a/frontend/mobile-app/lib/core/services/account_service.dart b/frontend/mobile-app/lib/core/services/account_service.dart index fbbd4115..550ae34f 100644 --- a/frontend/mobile-app/lib/core/services/account_service.dart +++ b/frontend/mobile-app/lib/core/services/account_service.dart @@ -778,9 +778,10 @@ class AccountService { value: 'true', ); - // 设置遥测服务的用户ID(使用userSerialNum,如D25121400005) + // 设置遥测服务的用户ID和访问令牌(用于心跳认证) if (TelemetryService().isInitialized) { TelemetryService().setUserId(response.userSerialNum); + TelemetryService().setAccessToken(response.accessToken); debugPrint('$_tag _saveAccountData() - 设置TelemetryService userId: ${response.userSerialNum}'); } @@ -1166,9 +1167,10 @@ class AccountService { value: 'true', ); - // 设置遥测服务的用户ID(使用userSerialNum,如D25121400005) + // 设置遥测服务的用户ID和访问令牌(用于心跳认证) if (TelemetryService().isInitialized) { TelemetryService().setUserId(response.userSerialNum); + TelemetryService().setAccessToken(response.accessToken); debugPrint('$_tag _saveRecoverAccountData() - 设置TelemetryService userId: ${response.userSerialNum}'); } @@ -1993,9 +1995,10 @@ class AccountService { value: 'true', ); - // 设置遥测服务的用户ID + // 设置遥测服务的用户ID和访问令牌(用于心跳认证) if (TelemetryService().isInitialized) { TelemetryService().setUserId(response.accountSequence); + TelemetryService().setAccessToken(response.accessToken); debugPrint('$_tag _savePhoneAuthData() - 设置TelemetryService userId: ${response.accountSequence}'); } diff --git a/frontend/mobile-app/lib/core/services/multi_account_service.dart b/frontend/mobile-app/lib/core/services/multi_account_service.dart index c0eada42..ac7eafd6 100644 --- a/frontend/mobile-app/lib/core/services/multi_account_service.dart +++ b/frontend/mobile-app/lib/core/services/multi_account_service.dart @@ -289,9 +289,11 @@ class MultiAccountService { // 6. 设置当前账号标记 await setCurrentAccountId(userSerialNum); - // 7. 更新遥测服务的用户ID + // 7. 更新遥测服务的用户ID和访问令牌(_restoreAccountData 已将 token 写入 SecureStorage) if (TelemetryService().isInitialized) { TelemetryService().setUserId(userSerialNum); + final restoredToken = await _secureStorage.read(key: StorageKeys.accessToken); + TelemetryService().setAccessToken(restoredToken); debugPrint('$_tag switchToAccount() - 设置TelemetryService userId: $userSerialNum'); } @@ -479,6 +481,7 @@ class MultiAccountService { // 清除遥测和 Sentry 用户信息 if (TelemetryService().isInitialized) { TelemetryService().clearUserId(); + TelemetryService().clearAccessToken(); } if (SentryService().isInitialized) { SentryService().clearUser(); diff --git a/frontend/mobile-app/lib/core/telemetry/telemetry_service.dart b/frontend/mobile-app/lib/core/telemetry/telemetry_service.dart index 419c0a39..4da6a272 100644 --- a/frontend/mobile-app/lib/core/telemetry/telemetry_service.dart +++ b/frontend/mobile-app/lib/core/telemetry/telemetry_service.dart @@ -36,6 +36,9 @@ class TelemetryService { String? _userId; String? get userId => _userId; + /// 访问令牌(登录后缓存,用于心跳/上传认证头) + String? _accessToken; + /// API 基础地址 late String _apiBaseUrl; @@ -148,13 +151,11 @@ class TelemetryService { debugPrint('📊 [Telemetry] Install ID: $_installId'); } - /// 获取认证头 + /// 获取认证头(使用缓存的 access token,由 AccountService 登录时注入) Map _getAuthHeaders() { - // TODO: 从 AuthService 获取 token - // final token = AuthService.instance.accessToken; - // if (token != null) { - // return {'Authorization': 'Bearer $token'}; - // } + if (_accessToken != null) { + return {'Authorization': 'Bearer $_accessToken'}; + } return {}; } @@ -294,6 +295,17 @@ class TelemetryService { debugPrint('📊 [Telemetry] User ID cleared'); } + /// 设置访问令牌(登录/切换账号后调用,用于心跳认证) + void setAccessToken(String? token) { + _accessToken = token; + debugPrint('📊 [Telemetry] Access token ${token != null ? 'set' : 'cleared'}'); + } + + /// 清除访问令牌(退出登录时调用) + void clearAccessToken() { + _accessToken = null; + } + /// 暂停遥测上传(退出登录时调用) /// 停止定期上传任务,清空事件队列 Future pauseForLogout() async {