feat: 添加用户行为分析功能
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
|
||||
import 'events/events.dart';
|
||||
|
||||
class AnalyticsSender {
|
||||
final Dio _dio;
|
||||
final String endpoint;
|
||||
|
||||
AnalyticsSender({required this.endpoint, Dio? dio}) : _dio = dio ?? Dio();
|
||||
|
||||
Future<void> send(List<BaseAnalyticsEvent> events) async {
|
||||
if (events.isEmpty) return;
|
||||
|
||||
final body = {'events': events.map((e) => e.toJson()).toList()};
|
||||
|
||||
try {
|
||||
await _dio.post(
|
||||
endpoint,
|
||||
data: jsonEncode(body),
|
||||
options: Options(
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
sendTimeout: const Duration(seconds: 10),
|
||||
receiveTimeout: const Duration(seconds: 10),
|
||||
),
|
||||
);
|
||||
} on DioException catch (e) {
|
||||
throw AnalyticsSendException(
|
||||
'Failed to send analytics events: ${e.message}',
|
||||
events: events,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class AnalyticsSendException implements Exception {
|
||||
final String message;
|
||||
final List<BaseAnalyticsEvent> events;
|
||||
|
||||
AnalyticsSendException(this.message, {required this.events});
|
||||
|
||||
@override
|
||||
String toString() => 'AnalyticsSendException: $message';
|
||||
}
|
||||
Reference in New Issue
Block a user