Flutter性能监控插件newrelic_mobile的使用
Flutter性能监控插件newrelic_mobile的使用
New Relic Flutter Agent允许你在Flutter应用中通过原生的New Relic Android和iOS代理来收集崩溃、网络流量和其他信息。
特性
- 捕获Dart错误
- 网络请求跟踪
- 分布式追踪
- Future错误跟踪
- 捕获交互及其创建顺序
- 传递用户信息到New Relic以跟踪用户会话
- 通过NavigationObserver进行屏幕跟踪
- 捕获print和debug print语句作为日志
- 捕获离线事件和异常
- 捕获后台报告事件
当前支持
- Android API 24+
- iOS 10
- 依赖于New Relic iOS/XCFramework和Android代理
安装
在你的pubspec.yaml
文件中添加newrelic_mobile
插件:
dependencies:
newrelic_mobile: ^1.1.4
Flutter设置
初始化NewRelic
在main.dart
中初始化NewRelic:
import 'package:newrelic_mobile/newrelic_mobile.dart';
import 'dart:io';
var appToken = "";
if (Platform.isAndroid) {
appToken = "<android app token>";
} else if (Platform.isIOS) {
appToken = "<ios app token>";
}
Config config = Config(
accessToken: appToken,
analyticsEventEnabled: true,
networkErrorRequestEnabled: true,
networkRequestEnabled: true,
crashReportingEnabled: true,
interactionTracingEnabled: true,
httpResponseBodyCaptureEnabled: true,
loggingEnabled: true,
webViewInstrumentation: true,
printStatementAsEventsEnabled: true,
httpInstrumentationEnabled: true,
distributedTracingEnabled: true,
logLevel: LogLevel.DEBUG);
NewrelicMobile.instance.start(config, () {
runApp(MyApp());
});
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorObservers: [NewRelicNavigationObserver()],
home: HomePage(),
);
}
}
屏幕跟踪
为了跟踪导航事件,需要将NewRelicNavigationObserver
添加到你的MaterialApp
中:
MaterialApp(
navigatorObservers: [
NewRelicNavigationObserver(),
],
// 其他参数
)
示例Demo
以下是一个完整的示例代码,展示了如何在Flutter应用中使用New Relic插件进行各种操作:
import 'package:flutter/material.dart';
import 'package:newrelic_mobile/newrelic_mobile.dart';
import 'dart:io';
void main() {
var appToken = "";
if (Platform.isAndroid) {
appToken = "<android app token>";
} else if (Platform.isIOS) {
appToken = "<ios app token>";
}
Config config = Config(
accessToken: appToken,
analyticsEventEnabled: true,
networkErrorRequestEnabled: true,
networkRequestEnabled: true,
crashReportingEnabled: true,
interactionTracingEnabled: true,
httpResponseBodyCaptureEnabled: true,
loggingEnabled: true,
webViewInstrumentation: true,
printStatementAsEventsEnabled: true,
httpInstrumentationEnabled: true,
distributedTracingEnabled: true,
logLevel: LogLevel.VERBOSE);
NewrelicMobile.instance.start(config, () {
runApp(const MyApp());
});
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorObservers: [NewRelicNavigationObserver()],
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("New Relic Demo")),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
NewrelicMobile.instance.logInfo("This is an informational message");
},
child: Text('Log Info'),
),
ElevatedButton(
onPressed: () async {
try {
var dio = Dio();
var response = await dio.get('https://reqres.in/api/users?delay=15');
print(response);
NewrelicMobile.instance.noticeHttpTransaction(
"https://reqres.in/api/users?delay=15",
"GET",
200,
1000,
2000,
100,
300,
null,
responseBody: "This is Test Payload");
} catch (e) {
print(e);
}
},
child: Text('Track HTTP Transaction'),
),
ElevatedButton(
onPressed: () async {
var id = await NewrelicMobile.instance.startInteraction("Getting Data from Service");
try {
var dio = Dio();
var response = await dio.get('https://reqres.in/api/users?delay=15');
print(response);
NewrelicMobile.instance.endInteraction(id);
} catch (e) {
print(e);
}
},
child: Text('Start Interaction'),
),
],
),
),
);
}
}
这个示例展示了如何记录信息日志、跟踪HTTP事务以及开始和结束交互。你可以根据自己的需求扩展这些功能。
故障排除
如果在New Relic UI中没有显示HTTP数据,请确保你没有在Flutter应用中覆盖HttpOverrides.global
。
对于更多详细信息和配置,请参考New Relic文档。
更多关于Flutter性能监控插件newrelic_mobile的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter性能监控插件newrelic_mobile的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用New Relic Mobile性能监控插件的示例代码。请确保你已经安装了Flutter和Dart开发环境,并且已经创建了一个Flutter项目。
1. 添加依赖
首先,你需要在你的Flutter项目的pubspec.yaml
文件中添加New Relic Mobile的依赖。
dependencies:
flutter:
sdk: flutter
newrelic_mobile: ^版本号 # 替换为当前最新的版本号
然后运行以下命令来安装依赖:
flutter pub get
2. 配置New Relic
你需要在New Relic网站上为你的应用创建一个应用实例,并获取你的应用的配置信息(例如:应用ID、API Key等)。
3. 初始化New Relic
在你的Flutter项目的入口文件(通常是main.dart
)中,初始化New Relic。
import 'package:flutter/material.dart';
import 'package:newrelic_mobile/newrelic_mobile.dart';
void main() {
// 初始化New Relic
NewRelicMobile.initialize(
androidApiKey: '你的Android API Key',
iosApiKey: '你的iOS API Key',
applicationId: '你的Application ID',
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
// 记录自定义事件(可选)
NewRelicMobile.recordCustomEvent(eventName: 'counter_incremented');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
4. 运行应用
确保你已经正确配置了New Relic,并且已经替换了代码中的API Key和Application ID。然后你可以运行你的Flutter应用:
flutter run
5. 监控性能
一旦应用运行起来,并且你与New Relic服务进行了连接,你应该能够在New Relic的仪表板上看到你的应用的性能数据,包括页面加载时间、网络请求、自定义事件等。
注意事项
- 确保你已经正确设置了New Relic账户,并且获取了必要的配置信息。
- New Relic Mobile插件可能需要一些额外的权限配置,特别是在Android和iOS项目中,你可能需要在
AndroidManifest.xml
和Info.plist
中添加一些权限声明。 - 根据你的具体需求,你可能需要配置更多的New Relic选项,比如启用或禁用某些监控功能。
希望这些代码示例和说明能帮助你在Flutter项目中成功集成New Relic Mobile性能监控插件。