Plugin Flutter para o NewRelic Mobile. Este plugin permite instrumentar aplicativos Flutter com a ajuda dos agentes nativos do New Relic Android e iOS.
Orientação gerada a partir de informações públicas. Apenas para referência.
O pacote newrelic_mobile é um plugin Flutter que integra as capacidades de monitoramento móvel do New Relic em aplicações Flutter. Aproveitando agentes nativos para Android e iOS, ele permite rastreamento detalhado de desempenho, relatórios de falhas e insights sobre experiência do usuário. Os desenvolvedores podem monitorar a responsividade do aplicativo, acompanhar transações e identificar problemas em tempo real. O plugin simplifica a instrumentação com mudanças mínimas no código, tornando fácil sua adoção em projetos Flutter existentes. Ele suporta ambas as plataformas principais e está alinhado com o conjunto abrangente de observabilidade do New Relic.
Casos de uso
Monitoramento em tempo real do desempenho do aplicativo
Detecção e relatório de falhas
Rastreamento de sessão do usuário
Rastreamento de transações
Otimização de aplicativos móveis
Principais recursos
Integração nativa do agente para Android e iOS
Compatibilidade sem problemas com o Flutter
Captura automática de falhas e erros
Coleta de métricas de desempenho
Configuração fácil via pub.dev
Indicado para
Desenvolvedores de aplicativos móveis usando Flutter
Equipes focadas na estabilidade e no desempenho do aplicativo
Empresas que exigem ferramentas de observabilidade
Desenvolvedores integrando com o ecossistema da New Relic
Considerações
Requer conta e chave de licença do New Relic
Limitado a plataformas Android e iOS
Depende de versões nativas do agente
Pode aumentar levemente o tamanho do pacote do aplicativo
Necessita de configuração adequada para funcionalidade completa
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
New Relic Flutter Agent
This agent allows you to instrument Flutter apps with help of native New Relic Android and iOS
agents. The New Relic SDKs collect crashes, network traffic, and other information for hybrid apps
using native components.
Features
Capture Dart errors
Network Request tracking
Distributed Tracing
Future errors tracking
Capture interactions and the sequence in which they were created
Pass user information to New Relic to track user sessions
Screen tracking via NavigationObserver
Capture print and debug print statement as Logs
Capture Offline Events and Exception
Capture Background Reporting Events
Current Support:
Android API 24+
iOS:
Agent Version
Minimum iOS Version
< 1.1.17
iOS 10+
1.1.17 – 1.1.21
iOS 16+
>= 1.2.0
iOS 15+
Depends on New Relic iOS/XCFramework and Android agents
Flutter Web: Compiles without errors (monitoring is no-op, use New Relic Browser Agent for web monitoring)
As of version 1.1.20, this package supports compilation for Flutter Web (including WASM). However, monitoring functionality is only available on native mobile platforms (iOS/Android).
On mobile platforms: Full New Relic Mobile SDK functionality
On web platforms: All methods are no-ops (compile without errors, but don't collect data)
Install NewRelic plugin into your dart project by adding it to dependecies in your pubspec.yaml
dependencies:newrelic_mobile:1.1.20
Flutter Setup
Now open your main.dart and add the following code to launch NewRelic (don't forget to put proper
application tokens):
import'package:newrelic_mobile/newrelic_mobile.dart';
var appToken = "";
if (Platform.isAndroid) {
appToken = "<android app token>";
} elseif (Platform.isIOS) {
appToken = "<ios app token>";
}
Config config =
Config(accessToken: appToken,
//Android Specific// Optional:Enable or disable collection of event data.
analyticsEventEnabled: true,
// Optional:Enable or disable reporting network and HTTP request errors to the MobileRequestError event type.
networkErrorRequestEnabled: true,
// Optional:Enable or disable reporting successful HTTP requests to the MobileRequest event type.
networkRequestEnabled: true,
// Optional:Enable or disable crash reporting.
crashReportingEnabled: true,
// Optional:Enable or disable interaction tracing. Trace instrumentation still occurs, but no traces are harvested. This will disable default and custom interactions.
interactionTracingEnabled: true,
// Optional:Enable or disable capture of HTTP response bodies for HTTP error traces, and MobileRequestError events.
httpResponseBodyCaptureEnabled: true,
// Optional: Enable or disable agent logging.
loggingEnabled: true,
//iOS Specific// Optional:Enable/Disable automatic instrumentation of WebViews
webViewInstrumentation: true,
//Optional: Enable or Disable Print Statements as Analytics Events
printStatementAsEventsEnabled : true,
// Optional:Enable/Disable automatic instrumentation of Http Request
httpInstrumentationEnabled:true,
// Optional : Enable or disable reporting data using different endpoints for US government clients
fedRampEnabled: false ,
// Optional: Enable or disable offline data storage when no internet connection is available.
offlineStorageEnabled:true,
// iOS Specific// Optional: Enable or disable background reporting functionality.
backgroundReportingEnabled: false,
// iOS Specific // Optional: Enable or disable to use our new, more stable, event system for iOS agent.
newEventSystemEnabled: false,
// Optional: Enable or disable distributed tracing.
distributedTracingEnabled: true,
// Optional: Log Level for Agent Logs.
logLevel: LogLevel.DEBUG,
);
NewrelicMobile.instance.start(config, () {
runApp(MyApp());
});
classMyAppextendsStatelessWidget{
....
Alternatively, you can manually set up error tracking and resource tracking. Because NewRelic Mobile Start calls WidgetsFlutterBinding.ensureInitialized, if you are not using NewRelic Mobile Start, you need to call this method prior to calling NewrelicMobile.instance.startAgent.
AppToken is platform-specific. You need to generate the seprate token for Android and iOS apps.
Screen Tracking Events
In order to track navigation events you have to add the NewRelicNavigationObserver to your
MaterialApp, WidgetsApp or CupertinoApp.
You should provide a name to route settings: RouteSettings(name: 'Your Route Name'). The root route
name / will be replaced by root "/" for clarity's sake.
import'package:newrelic_mobile/newrelic_navigation_observer.dart';
//....MaterialApp(
navigatorObservers: [
NewRelicNavigationObserver(),
],
// other parameters
)
GoRouter Instrumentation
When using the go_router[https://pub.dev/packages/go_router] library, the automatic routing instrumentation can be enabled by adding an instance of NewRelicNavigationObserver to your application's GoRouter.observers:
If you are using Plugins DSL (Flutter 3.16 or Later) to Apply the NewRelic Gradle Plugin, make the following changes:
In android/settings.gradle:
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "7.4.2" apply false
id "org.jetbrains.kotlin.android" version "1.7.10" apply false
id "com.newrelic.agent.android" version "7.8.2" apply false // <-- include this
}
In android/app/build.gradle:
plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
id "com.newrelic.agent.android" //<-- include this
}
Or, if you are using the traditional way to apply the plugin:
End an interaction
(Required). This uses the string ID for the interaction you want to end.
This string is returned when you use startInteraction().
var id = awaitNewrelicMobile.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);
Timeline.finishSync();
} catch (e) {
print(e);
}
Tracks network requests manually. You can use this method to record HTTP transactions, with an option to also send a response body.
NewrelicMobile.instance.noticeHttpTransaction("https://cb6b02be-a319-4de5-a3b1-361de2564493.mock.pstmn.io/searchpage", "GET",200, 1000, 2000,100,300,null,responseBody: "This is Test Payload");
Records network failures. If a network request fails, use this method to record details about the failures. In most cases, place this call inside exception handlers, such as catch blocks. Supported failures are: Unknown, BadURL, TimedOut, CannotConnectToHost, DNSLookupFailed, BadServerResponse, SecureConnectionFailed.
Records custom metrics (arbitrary numerical data), where countUnit is the measurement unit of the metric count and valueUnit is the measurement unit for the metric value. If using countUnit or valueUnit, then all of value, countUnit, and valueUnit must all be set.
Returns the current session ID. This method is useful for consolidating monitoring of app data (not just New Relic data) based on a single session definition and identifier.
var sessionId = awaitNewrelicMobile.instance.currentSessionId();
setAttribute(name: string, value: boolean | number | string): void;
Creates a session-level attribute shared by multiple mobile event types. Overwrites its previous value and type each time it is called.
Increments the count of an attribute with a specified name. Overwrites its previous value and type each time it is called. If the attribute does not exists, it creates a new attribute. If no value is given, it increments the value by 1.
This API allows you to add any header field strings to a list that gets recorded as attributes with networking request events. After header fields have been added using this function, if the headers are in a network call they will be included in networking events in NR1.
Logs an exception with attributes to the New Relic log.
NewrelicMobile.instance.logAll(Exception("This is an exception"),
{"BreadNumValue": 12.3 ,
"BreadStrValue": "FlutterBread",
"BreadBoolValue": true ,
"message": "This is a message with attributes" }
);
Problem
After installing the Flutter agent and waiting at least 5 minutes, no http data appears in New Relic UI.
Solution
If no http data appears after you wait at least five minutes, check you are not overriding HttpOverrides.global inside your flutter app.
Crash reports may not be sent when ProGuard rules are not properly configured for New Relic in hybrid Android applications.
Solution:
Ensure proper ProGuard rules are added to your ProGuard configuration file. See "Configuring ProGuard Rules" in setup documentation.
Uploading dSYM files
Our iOS agent includes a Swift script intended to be run from a build script in your target's build phases in XCode. The script automatically uploads dSYM files in the background (or converts your dSYM to the New Relic map file format), and then performs a background upload of the files needed for crash symbolication to New Relic.
To invoke this script during an XCode build:
Copy the dsym-upload-tools folder from this repository: https://github.com/newrelic/newrelic-ios-agent-spm, to your projects SRCROOT folder first.
In Xcode, select your project in the navigator, then click on the application target.
Select the Build Phases tab in the settings editor.
Click the + icon above Target Dependencies and choose New Run Script Build Phase. Ensure the new build script is the very last build script.
Add the following lines of code to the new phase and replace APP_TOKEN with your iOS application token.
If there is a checkbox below Run script that says "Run script: Based on Dependency analysis" please make sure it is not checked.
Flutter agent 1.0.2 or higher
With the ios agent 7.4.6 release, the XCFramework no longer includes the dsym-upload-tools. You can find the dsym-upload-tools in the dsym-upload-tools folder of the https://github.com/newrelic/newrelic-ios-agent-spm Swift Package Manager repository. Please copy the dsym-upload-tools directory into your application source code directory by copying the XCFramework into your project or using Cocoapods if you're integrating the New Relic iOS Agent. Use the run script below in your Xcode build phases to perform symbol upload steps during app builds in Xcode.
ARTIFACT_DIR="${BUILD_DIR%Build/*}"
SCRIPT=`/usr/bin/find "${SRCROOT}""${ARTIFACT_DIR}" -type f -name run-symbol-tool | head -n 1`
/bin/sh "${SCRIPT}""APP_TOKEN"
Note: The automatic script requires bitcode to be disabled. You should clean and rebuild your app after adding the script.
Missing dSYMs
The automatic script will create an upload_dsym_results.log file in your project's iOS directory, which contains information about any failures that occur during symbol upload.
If dSYM files are missing, you may need to check Xcode build settings to ensure the file is being generated. Frameworks which are built locally have separate build settings and may need to be updated as well.
We encourage your contributions to improve newrelic-flutter-agent! Keep in mind that when you submit your
pull request, you'll need to sign the CLA via the click-through using CLA-Assistant. You only have
to sign the CLA one time per project.
If you have any questions, or to execute our corporate CLA (which is required if your contribution
is on behalf of a company), drop us an email at opensource@newrelic.com.
A note about vulnerabilities
As noted in our security policy, New Relic is committed to the privacy and security of our customers and their data. We believe that providing coordinated disclosure by security researchers and engaging with the security community are important means to achieve our security goals.
If you believe you have found a security vulnerability in this project or any of New Relic's products or websites, we welcome and greatly appreciate you reporting it to New Relic through our bug bounty program.
If you would like to contribute to this project, review these guidelines.
To all contributors, we thank you! Without your contribution, this project would not be what it is today. We also host a community project page dedicated to New Relic Flutter Agent
.
License
newrelic-flutter-agent is licensed under the Apache 2.0
License.
newrelic-flutter-agent also uses source code from third-party libraries. Full details on which libraries are used and the terms under which they are licensed can be found in the third-party notices document.