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:
parent
3aa2856770
commit
37b11a3db6
|
|
@ -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}');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue