Flutter性能监控插件firebase_performance_dio的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter性能监控插件firebase_performance_dio的使用

Dio and Firebase Performance pub version

描述

firebase_performance_dio 是 Dio 的拦截器实现,用于将 HTTP 请求的度量数据发送到 Firebase。通过它,开发者可以方便地监控应用程序中网络请求的性能表现,包括响应时间、请求成功率等关键指标。

使用方法

添加依赖

首先,在 pubspec.yaml 文件中添加 firebase_performance_dio 作为依赖:

dependencies:
  flutter:
    sdk: flutter
  dio: ^4.0.0
  firebase_performance_dio: latest_version # 替换为最新版本号

然后执行 flutter pub get 来安装这些包。

初始化Firebase

确保你的项目已经集成了 Firebase,并且在应用启动时初始化了 Firebase。

import 'package:firebase_core/firebase_core.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

配置Dio与Interceptor

接下来配置 Dio 并添加 DioFirebasePerformanceInterceptor 拦截器:

import 'package:dio/dio.dart';
import 'package:firebase_performance_dio/firebase_performance_dio.dart';

class MyHttpClient {
  static final MyHttpClient _instance = MyHttpClient._internal();
  factory MyHttpClient() => _instance;

  late Dio _dio;

  MyHttpClient._internal() {
    _dio = Dio(BaseOptions(
      baseUrl: "https://example.com/api",
      connectTimeout: 5000,
      receiveTimeout: 3000,
    ));

    // 添加性能监控拦截器
    _dio.interceptors.add(DioFirebasePerformanceInterceptor());

    // 可以根据需要添加其他拦截器
    // _dio.interceptors.add(LogInterceptor());
  }

  Dio get dio => _dio;
}

示例代码

这里提供一个完整的示例 Demo,展示如何使用 firebase_performance_dio 进行网络请求并监控其性能:

import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:firebase_performance_dio/firebase_performance_dio.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  runApp(MyApp());
}

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  final dio = MyHttpClient().dio;

  Future<void> fetchData() async {
    try {
      Response response = await dio.get('/data');
      print('Response data: ${response.data}');
    } catch (e) {
      print('Error occurred: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Firebase Performance with Dio'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: fetchData,
          child: Text('Fetch Data'),
        ),
      ),
    );
  }
}

// HttpClient配置
class MyHttpClient {
  static final MyHttpClient _instance = MyHttpClient._internal();
  factory MyHttpClient() => _instance;

  late Dio _dio;

  MyHttpClient._internal() {
    _dio = Dio(BaseOptions(
      baseUrl: "https://jsonplaceholder.typicode.com", // 示例API地址
      connectTimeout: 5000,
      receiveTimeout: 3000,
    ));

    // 添加性能监控拦截器
    _dio.interceptors.add(DioFirebasePerformanceInterceptor());

    // 可以根据需要添加其他拦截器
    // _dio.interceptors.add(LogInterceptor());
  }

  Dio get dio => _dio;
}

注意事项

  • 如果你使用的是 Dio 单例模式,建议也将 DioFirebasePerformanceInterceptor 设置为单例。
  • 确保正确设置了 Firebase 项目,并且在应用程序启动时完成了 Firebase 的初始化。
  • 对于生产环境,请检查并调整超时设置(如连接超时和接收超时),以适应实际需求。

通过上述步骤,你可以轻松地将 firebase_performance_dio 集成到你的 Flutter 项目中,并开始监控 HTTP 请求的性能了!


更多关于Flutter性能监控插件firebase_performance_dio的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter性能监控插件firebase_performance_dio的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter性能监控插件firebase_performance_dio的使用,这里是一个详细的代码案例,展示如何集成和使用这个插件来监控网络请求的性能。

前提条件

  1. 确保你的Flutter项目已经集成了Firebase Performance插件。
  2. 确保你的Flutter项目已经集成了dio库用于HTTP请求。

步骤一:添加依赖

首先,在你的pubspec.yaml文件中添加必要的依赖:

dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^1.0.0 # 确保你有Firebase Core依赖
  firebase_performance: ^0.8.0+3 # 根据需要调整版本
  dio: ^4.0.0 # 根据需要调整版本

步骤二:配置Firebase

按照Firebase的官方文档配置你的Firebase项目。这通常涉及在Firebase控制台创建一个项目,并获取Google服务的配置文件(通常是google-services.json对于Android和GoogleService-Info.plist对于iOS),然后将这些文件放置在你的Flutter项目的相应位置。

步骤三:初始化Firebase Performance

在你的应用的主入口文件(通常是main.dart)中初始化Firebase:

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_performance/firebase_performance.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FirebasePerformance performance = FirebasePerformance.instance;
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Firebase Performance with DIO'),
        ),
        body: Center(
          child: MyHomePage(),
        ),
      ),
    );
  }
}

步骤四:使用dio和Firebase Performance

在你的HTTP请求中使用dio,并结合Firebase Performance进行性能监控。这里是一个示例:

import 'package:dio/dio.dart';
import 'package:firebase_performance/firebase_performance.dart';

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () async {
        makeNetworkRequest();
      },
      child: Text('Make Network Request'),
    );
  }

  Future<void> makeNetworkRequest() async {
    FirebasePerformance performance = FirebasePerformance.instance;
    HttpMetric metric = performance.newHttpMetric('example_request', HttpMethod.Get);

    try {
      Dio dio = Dio();
      Response response = await dio.get('https://jsonplaceholder.typicode.com/posts/1',
          onSend: (RequestOptions options) {
            metric.start();
            // 你可以在这里添加自定义标签
            metric.putAttribute('url', options.uri.toString());
          },
          onResponse: (Response response) {
            metric.stop();
            metric.setResponsePayloadSize(response.data.length);
            metric.putAttribute('status_code', response.statusCode.toString());
          },
          onError: (DioError error) {
            metric.stop();
            metric.putAttribute('error', error.message ?? 'Unknown error');
          });

      print('Response data: ${response.data}');
    } catch (e) {
      metric.stop();
      metric.putAttribute('error', e.toString());
      print('Error: $e');
    }
  }
}

解释

  1. 初始化Firebase Performance:在main函数中初始化Firebase。
  2. 创建HttpMetric:在发起HTTP请求之前,创建一个HttpMetric对象来监控这个请求。
  3. 在dio请求中使用HttpMetric
    • onSend:在请求发送前调用metric.start()开始监控,并添加自定义标签。
    • onResponse:在请求成功后调用metric.stop()停止监控,并添加响应大小和状态码作为标签。
    • onError:在请求出错时调用metric.stop()停止监控,并添加错误信息作为标签。

通过这种方式,你可以轻松地监控你的Flutter应用中dio库发起的HTTP请求的性能,并在Firebase Performance控制台中查看这些监控数据。

回到顶部