analytics_logger 1.0.0 copy "analytics_logger: ^1.0.0" to clipboard
analytics_logger: ^1.0.0 copied to clipboard

Lightweight analytics event logging for Flutter apps.

example/analytics_logger_example.dart

import 'package:analytics_logger/analytics_logger.dart';
import 'package:flutter/foundation.dart';

import 'analytics_category_example.dart';
import 'my_firebase_uploader_example.dart';

class AnalyticsLoggerExample {
  AnalyticsLoggerExample._();

  static final AnalyticsLoggerExample I = AnalyticsLoggerExample._();

  late final AnalyticsLogger _tracker;

  /// 初始化
  Future<void> setupAnalytics() async {
    _tracker = AnalyticsLogger(
      config: const AnalyticsConfig(
        batchSize: 20,
        flushInterval: Duration(seconds: 15),
        maxRetryCount: 6,
        maxQueueSize: 5000,
        enableDebugPrint: true,
        schemaVersion: '1',
      ),
      routePolicy: const DefaultRoutePolicy(),
      uploaders: {
        'default': MyFirebaseUploaderExample(),
      },
    );

    await _tracker.init();
  }

  /// 登录/退出时调用
  // static Future<void> setUserId(String? id) async {
  //   await FirebaseAnalytics.instance.setUserId(id: id);
  // }

  /// 公共上报入口
  Future<void> log({
    required AnalyticsCategoryExample category,
    required String event,
    Map<String, Object?> parameters = const {},
  }) async {
    try {
      final Map<String, Object> finalParams = {
        'event': event,
        ..._normalizeParams(parameters),
      };

      _tracker.track(
        category.eventName,
        params: finalParams,
      );

      if (kDebugMode) {
        debugPrint(
          '[Analytics] name=${category.eventName}, params=$finalParams',
        );
      }
    } catch (e, s) {
      if (kDebugMode) {
        debugPrint('[Analytics][upload failed] $e');
        debugPrint('$s');
      }
    }
  }

  /// 业务埋点
  Future<void> biz({
    required String event,
    Map<String, Object?> parameters = const {},
  }) {
    return log(
      category: AnalyticsCategoryExample.business,
      event: event,
      parameters: parameters,
    );
  }

  /// 页面埋点
  Future<void> page({
    required String event,
    Map<String, Object?> parameters = const {},
  }) {
    return log(
      category: AnalyticsCategoryExample.page,
      event: event,
      parameters: parameters,
    );
  }

  /// 性能埋点
  Future<void> perf({
    required String event,
    Map<String, Object?> parameters = const {},
  }) {
    return log(
      category: AnalyticsCategoryExample.perf,
      event: event,
      parameters: parameters,
    );
  }

  /// 错误埋点
  Future<void> error({
    required String event,
    Map<String, Object?> parameters = const {},
  }) {
    return log(
      category: AnalyticsCategoryExample.error,
      event: event,
      parameters: parameters,
    );
  }

  /// 崩溃补充埋点
  Future<void> crash({
    required String event,
    Map<String, Object?> parameters = const {},
  }) {
    return log(
      category: AnalyticsCategoryExample.crash,
      event: event,
      parameters: parameters,
    );
  }

  /// 网络埋点
  Future<void> net({
    required String event,
    Map<String, Object?> parameters = const {},
  }) {
    return log(
      category: AnalyticsCategoryExample.net,
      event: event,
      parameters: parameters,
    );
  }

  /// 用户埋点
  Future<void> user({
    required String event,
    Map<String, Object?> parameters = const {},
  }) {
    return log(
      category: AnalyticsCategoryExample.user,
      event: event,
      parameters: parameters,
    );
  }

  /// 核心事件埋点
  Future<void> key({
    required String event,
    Map<String, Object?> parameters = const {},
  }) {
    return log(
      category: AnalyticsCategoryExample.key,
      event: event,
      parameters: parameters,
    );
  }

  /// 调试埋点
  Future<void> debug({
    required String event,
    Map<String, Object?> parameters = const {},
  }) {
    return log(
      category: AnalyticsCategoryExample.debug,
      event: event,
      parameters: parameters,
    );
  }

  /// 过滤 Firebase 不支持的参数类型
  Map<String, Object> _normalizeParams(Map<String, Object?> params) {
    final Map<String, Object> result = {};

    params.forEach((key, value) {
      if (value == null) return;

      if (value is String || value is int || value is double) {
        result[key] = value;
      } else if (value is bool) {
        result[key] = value ? 1 : 0;
      } else {
        result[key] = value.toString();
      }
    });

    return result;
  }
}
0
likes
150
points
55
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Lightweight analytics event logging for Flutter apps.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter, uuid

More

Packages that depend on analytics_logger