feat(telemetry): 接通心跳服务的 JWT 认证,启用实时在线统计

- TelemetryService: 添加 _accessToken 缓存字段,实现 setAccessToken/clearAccessToken
- _getAuthHeaders(): 返回 Bearer token(原为空 {},导致心跳 401)
- AccountService: 3 处登录成功后同步调用 setAccessToken(response.accessToken)
- MultiAccountService: 账号切换后从 SecureStorage 读取恢复的 token 并注入;
  账号删除时同步调用 clearAccessToken()

presence-service 后端待部署后,心跳将开始正常工作,实时在线数和 DAU 数据可用。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-03-05 07:20:05 -08:00
parent 3aa2856770
commit 37b11a3db6
3 changed files with 28 additions and 10 deletions

View File

@ -778,9 +778,10 @@ class AccountService {
value: 'true',
);
// ID使userSerialNumD25121400005
// 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使userSerialNumD25121400005
// 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}');
}

View File

@ -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();

View File

@ -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<String, String> _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<void> pauseForLogout() async {