Error Analysis
Prerequisites
Section titled PrerequisitesContentsquare SDK is included
Section titled Contentsquare SDK is includedYou must include the Contentsquare SDK first using the same integration method and understand how the SDK works.
Updating to latest SDK version
Section titled Updating to latest SDK versionTo enable Error Analysis in your application and ensure optimal stability, make sure to always use the last SDK version.
Screen tracking implemented
Section titled Screen tracking implementedTracking will start at the 1st screenview event, it is required to have screen tracking implemented. Make sure to follow the Flutter Track screens sections.
Reminder about User consent
Section titled Reminder about User consentIf you are in the process of implementing the SDK for the 1st time, or if you choose to take this update as an opportunity to review your privacy-related implementation, ensure that you follow the Flutter Privacy section and use the Opt-in API to get the user consent, otherwise no data will be collected.
Get Started
Section titled Get StartedStart the SDK
Section titled Start the SDKYou do not need to do anything to start the Error Analysis SDK, it will start itself with Contentsquare SDK.
Validate SDK integration
Section titled Validate SDK integrationWhen the SDK starts, you should see a log like this one:
API Errors
Section titled API ErrorsAutomatic network inspection
Section titled Automatic network inspectionAPI Errors automatically collects failed network requests.
Removing Personal Data in request URL path
Section titled Removing Personal Data in request URL pathBy default, the API Errors feature collects the URL path of the failed API requests. To prevent the collection of Personal Data in the URL path, you can rewrite the request URL path with the Contentsquare.setURLMaskingPatterns
SDK API.
Replace a step of the path - meaning between two slashes (/) - containing Personal Data with a variable:
:user_id
becomes CS_ANONYMIZED_USER_ID:address
becomes CS_ANONYMIZED_ADDRESS
Example
Section titled ExampleResult
Section titled ResultURL before masking | URL after masking |
---|---|
https://www.contentsquare.com/users/123/address/castle+black | https://www.contentsquare.com/users/CS_ANONYMIZED_USER_ID/address/CS_ANONYMIZED_ADDRESS |
Debugging and Logging
Section titled Debugging and LoggingIf in-app features are enabled, a info log should appear with the details of the event (see Flutter Debugging and Logging section):
How API Errors works
Section titled How API Errors worksInitialization
Section titled InitializationOur SDK automatically starts upon application launch and seamlessly captures failed network requests.
Configuration
Section titled ConfigurationOnce started, our SDK fetches its config from our servers. It will start collecting data from network events if the API Errors setting is enabled in the config (this is handled by the Contentsquare team).
Tracking
Section titled TrackingThe SDK monitors only the API Errors with response code 400 and above, and generates analytics data. These events are then locally stored, and eventually sent to our servers in batches.
Sending data
Section titled Sending dataFor each network error, a new event will be sent in Analytics and Session Replay data. Check the following sections to learn more about how data is processed and sent:
API Troubleshooting Details
Section titled API Troubleshooting DetailsAPI Errors troubleshooting details feature enhances your ability to collect additional information about API errors, facilitating faster troubleshooting.
With this feature, you can view three types of additional API error details in the Event Stream of Session Replay:
- The HTTP headers of the request and the response.
- The body (the data sent by the request or received in the response).
- The query parameters of the request endpoint (of the URL of the information you request for).
See API Troubleshooting Details ↗ for more details.
Collected data points
Section titled Collected data pointsOnly network calls in error (response code 400 and above) will be collected.
Here is the exhaustive list of data collected:
- URL (without query strings)
- HTTP method
- Response code
- Timestamp of the request
- Timestamp of the response
- HTTP headers of the request
- HTTP headers of the response
- HTTP body of the request
- HTTP body of the response
- Query parameters
Known limitations and recommendations
Section titled Known limitations and recommendationsConflict with Firebase Performance Monitoring
Section titled Conflict with Firebase Performance MonitoringAndroid
Section titled AndroidContentsquare Error Analysis is not compatible with Firebase Performance Monitoring auto-collection. Only one of the two will log events, and usually, the events will be automatically logged by the Contentsquare Error Analysis. To log events to Firebase Performance Monitoring, we suggest logging it manually ↗.
Contentsquare Error Analysis is compatible with Firebase Performance auto-collection, but the HTTP body from the response won’t be collected by the Error Analysis SDK.
Contentsquare Error Analysis may not be compatible with other network auto-collection tools.
Use a custom HttpOverrides
Section titled Use a custom HttpOverridesUse ContentsquareHttpOverrides
if you need to override the global HttpOverrides
.
Error Reporter
Section titled Error ReporterHandle the Flutter errors
Section titled Handle the Flutter errorsYou can collect unhandled errors from the framework by using the FlutterError.onError ↗ callback. However, errors that occur outside of Flutter’s callbacks, such as asynchronous errors, will not be captured. To handle these, consider implementing the PlatformDispatcher.onError ↗ or runZonedGuarded ↗ callbacks.
Example
Section titled ExampleFlutter error presentation
Section titled Flutter error presentationContentsquare automatically presents ↗ the Flutter errors. You can disable it by using the optional presentErrorDetails
parameter in collectFlutterError
API.
Compatibility with Firebase Crashlytics
Section titled Compatibility with Firebase CrashlyticsIntegrating Crashlytics as an additional error reporting solution is straightforward: include the corresponding instruction within each callback.
Example with Firebase Crashlytics
Section titled Example with Firebase CrashlyticsValidate integration
Section titled Validate integration- Enable the in-app features.
- Run your application. You should see a log printed in the console:
Validate error reporting
Section titled Validate error reportingWith in-app features enabled, any errors occurring in your application should generate a log in the console:
Symbolization and de-obfuscation
Section titled Symbolization and de-obfuscationTo be able to read errors from an application built with Flutter obfuscation and/or de-symbolisation, you will need to upload the debug files to Contentsquare.
The upload command must be executed immediately after the Flutter build.
Minimum required Flutter version
Section titled Minimum required Flutter version- Android: 3.10.6
- iOS: 3.13.0
How Error Reporter works
Section titled How Error Reporter worksInitialization
Section titled InitializationError Reporter is started automatically and begins to collect the reported errors when your application is launched
Configuration
Section titled ConfigurationOnce started, our SDK fetches its configuration from our servers. It will start reporting errors if the Error Reporter setting is enabled (this is handled by the Contentsquare team).
You have to implement an error handler strategy and collect the received errors. See Flutter errors for examples
Reporting
Section titled ReportingWhen an error occurs, a report is created and stored locally in the device. The report is sent to our servers as soon as possible and then removed from the local storage.
Sending error data
Section titled Sending error dataFor each error, a new event will be sent to analytics and Session Replay data when the network conditions allow for the server to be reached.
Native crashes
Section titled Native crashesCrashes from the native parts of your application can be captured with additional setup.
See 📚 iOS Crash Reporter.
See 📚 Android Crash Reporter.
WebView errors
Section titled WebView errorsErrors occurring in web pages loaded in WebViews can be collected if Webview tracking is setup in your app.
See 📚 Webview Tracking implementation.
Once WebView tracking is implemented, errors collection can be set up.
See 📚 Errors (in WebView)