Flutter错误追踪插件simplytics_sentry的使用

Flutter错误追踪插件simplytics_sentry的使用

Simplytics 是一个简单的分析和崩溃报告抽象层。该插件添加了对 Sentry 和 GlitchTip 集成的支持。

使用

要开始在 Flutter 应用程序中使用 Simplytics 与 Sentry 或 GlitchTip,你需要初始化 Sentry 并配置 Simplytics,指定要使用的分析和错误监控服务类:

SentryFlutter.init(
  (options) => options
    // Sentry/GlitchTip DSN 和其他选项
    ..dsn = '<dsn url>'
    ..tracesSampleRate = 1.0
    ..enableAutoSessionTracking = false
    ..debug = true
    ..diagnosticLevel = SentryLevel.debug,
  appRunner: () => runAppGuarded(
    () async {
      // 设置 Simplytics
      Simplytics.setup(
        crashlogService: SimplyticsCrashlogServiceGroup([
          SimplyticsDebugCrashlogService(),
          SimplyticsSentryCrashlogService(),
        ]),
      );

      return const MyApp();
    },

    // 当使用 Sentry 时,启用此设置非常重要
    runAppAfterSetup: true,

    onError: (error, stackTrace) {
      Simplytics.crashlog.recordFatalError(error, stackTrace);
    },
  ),
);

完整示例代码

以下是一个完整的示例,展示了如何在 Flutter 应用程序中使用 Simplytics 和 Sentry。

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:simplytics/simplytics.dart';
import 'package:simplytics_sentry/simplytics_sentry.dart';

void main() {
  // 初始化 Sentry/GlitchTip
  SentryFlutter.init(
    (options) => options
      // Sentry/GlitchTip DSN 和其他选项
      ..dsn = '<dsn url>'
      ..tracesSampleRate = 1.0
      ..enableAutoSessionTracking = false
      ..diagnosticLevel = SentryLevel.debug,
    appRunner: () => runAppGuarded(
      () async {
        // 设置 Simplytics
        Simplytics.setup(
          crashlogService: SimplyticsCrashlogServiceGroup([
            SimplyticsDebugCrashlogService(true),
            SimplyticsSentryCrashlogService(enabled: !kDebugMode),
          ]),
        );

        return const MyApp();
      },

      // 当使用 Sentry 时,启用此设置非常重要
      runAppAfterSetup: true,

      // 发送致命错误到 Simplytics
      onError: (error, stackTrace) => Simplytics.crashlog.recordFatalError(error, stackTrace),
    ),
  );
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Simplytics Sentry Demo',
      theme: ThemeData(
        primarySwatch: Colors.purple,
      ),
      home: const DemoPage(),
    );
  }
}

// 主演示页面

class DemoPage extends StatelessWidget {
  const DemoPage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisSize: MainAxisSize.min,
          children: [
            OutlinedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => const ErrorDemoPage()),
                );
              },
              child: const Text('错误报告测试'),
            ),
          ],
        ),
      ),
    );
  }
}

// 崩溃报告演示

class ErrorDemoPage extends StatefulWidget {
  const ErrorDemoPage({super.key});

  [@override](/user/override)
  State<ErrorDemoPage> createState() => _ErrorDemoPageState();
}

class _ErrorDemoPageState extends State<ErrorDemoPage> {
  [@override](/user/override)
  void initState() {
    super.initState();

    // 设置用户ID和自定义键值对
    Simplytics.crashlog.setUserId('test_user');
    Simplytics.crashlog.setCustomKey('test_key', 'test_value');
  }

  // 记录错误日志
  void _logError() {
    Simplytics.crashlog.log('Some log error');
  }

  // 记录错误信息
  void _recordError() {
    Simplytics.crashlog.recordError(
      'Some error',
      StackTrace.current,
      information: [
        SimplyticsErrorTag('code', 712234),
        SimplyticsErrorProperty('region', 'local'),
      ],
      reason: 'FakeException',
    );
  }

  // 记录致命错误
  void _recordFatalError() {
    Simplytics.crashlog.recordError(
      'Some error',
      StackTrace.current,
      reason: 'FakeException',
      fatal: true,
    );
  }

  // 抛出异常
  void _throwException() {
    throw Exception('Some exception');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('错误报告测试'),
      ),
      body: Center(
        child: SingleChildScrollView(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisSize: MainAxisSize.min,
            children: [
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  const Text('崩溃记录关闭'),
                  Switch(
                    value: Simplytics.crashlog.isEnabled,
                    onChanged: (value) async {
                      await Simplytics.crashlog.setEnabled(value);
                      setState(() {});
                    },
                  ),
                  const Text('崩溃记录打开'),
                ],
              ),
              const Divider(),
              TextButton(
                onPressed: _logError,
                child: const Text('记录错误日志'),
              ),
              TextButton(
                onPressed: _recordError,
                child: const Text('记录错误'),
              ),
              TextButton(
                onPressed: _recordFatalError,
                child: const Text('记录致命错误'),
              ),
              TextButton(
                onPressed: _throwException,
                child: const Text('抛出异常'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter错误追踪插件simplytics_sentry的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter错误追踪插件simplytics_sentry的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


simplytics_sentry 是一个用于 Flutter 的错误追踪插件,它集成了 Sentry 来捕获和报告应用程序中的错误和异常。使用这个插件可以帮助开发者更好地监控和调试应用程序中的问题。

以下是使用 simplytics_sentry 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 simplytics_sentry 的依赖。

dependencies:
  flutter:
    sdk: flutter
  simplytics_sentry: ^1.0.0  # 使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 初始化 Sentry

在你的 Flutter 应用程序中初始化 Sentry。通常,你可以在 main.dart 文件中进行初始化。

import 'package:flutter/material.dart';
import 'package:simplytics_sentry/simplytics_sentry.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 Sentry
  await SimplyticsSentry.init(
    dsn: 'YOUR_SENTRY_DSN',  // 替换为你的 Sentry DSN
    environment: 'production',  // 设置环境
    release: '1.0.0',  // 设置版本号
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

3. 捕获异常

simplytics_sentry 会自动捕获未处理的异常。如果你想要手动捕获异常,可以使用 SimplyticsSentry.captureException 方法。

try {
  // 可能会抛出异常的代码
} catch (e, stackTrace) {
  // 捕获并报告异常
  SimplyticsSentry.captureException(e, stackTrace: stackTrace);
}

4. 记录自定义事件

你还可以使用 SimplyticsSentry.captureMessage 来记录自定义事件或消息。

SimplyticsSentry.captureMessage('这是一个自定义消息');

5. 添加用户上下文

你可以为 Sentry 报告添加上下文信息,例如用户信息。

SimplyticsSentry.setUserContext(
  id: '12345',
  email: 'user@example.com',
  username: 'johndoe',
);

6. 添加额外数据

你还可以为事件添加额外的数据。

SimplyticsSentry.captureException(
  e,
  stackTrace: stackTrace,
  extra: {
    'key': 'value',
    'anotherKey': 'anotherValue',
  },
);

7. 调试和测试

在开发过程中,你可以启用调试模式来查看 Sentry 的日志输出。

await SimplyticsSentry.init(
  dsn: 'YOUR_SENTRY_DSN',
  debug: true,  // 启用调试模式
);

8. 发布

在发布应用程序之前,确保你已经正确配置了 Sentry 并且禁用了调试模式。

await SimplyticsSentry.init(
  dsn: 'YOUR_SENTRY_DSN',
  debug: false,  // 禁用调试模式
);
回到顶部