Skip to content

Commit 5d1cc8f

Browse files
committed
Merge branch 'master' into fix/flutter-replay
2 parents 51c4c82 + a3a017d commit 5d1cc8f

File tree

25 files changed

+477
-120
lines changed

25 files changed

+477
-120
lines changed

docs/concepts/migration/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ description: "Learn more about the reasons to move to Sentry's SaaS solution, wh
77
Sentry offers a cloud-hosted, software-as-a-service (SaaS) solution in addition to a self-hosted solution, which are both functionally the same. However, many customers find that self-hosted Sentry can quickly become expensive to maintain, scale, and support, making our SaaS product the better and less costly option. To facilitate moving from self-hosted to SaaS, we provide a self-serve process known as "relocation".
88

99
<Alert>
10-
Check out this video on [**Migrating to Sentry SaaS**](https://sentry.io/resources/migrate-to-sentry-saas-workshop/) to learn about our relocation tooling.
10+
Check out this video on <a href="https://sentry.io/resources/migrate-to-sentry-saas-workshop/" className="plausible-event-name=migrating+to+saas+video">**Migrating to Sentry SaaS**</a> to learn about our relocation tooling.
1111
</Alert>
1212

1313
For additional reading on considering SaaS, take a look at:

docs/organization/integrations/index.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ For more details, see the [full Integration Platform documentation](/organizatio
1616

1717
| Integration | Issue alerts | Metric alerts | Link Unfurling |
1818
| ------------------------------------------------------------------------ | ------------ | ------------- | -------------- |
19+
| [All Quiet](https://docs.allquiet.app/integrations/inbound/sentry) | X | | |
1920
| [Blar](/organization/integrations/notification-incidents/blar/) | X | | |
2021
| [Datadog](https://docs.datadoghq.com/integrations/sentry/) | X | | |
2122
| [Microsoft Teams](/organization/integrations/notification-incidents/msteams/) | X | X | |

docs/organization/integrations/notification-incidents/index.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ sidebar_order: 20
44
description: "Learn more about Sentry's notification and incidents integrations."
55
---
66

7+
- [All Quiet](https://docs.allquiet.app/integrations/inbound/sentry)
78
- [Blar](/organization/integrations/notification-incidents/blar/)
89
- [Datadog](https://docs.datadoghq.com/integrations/sentry/)
910
- [Microsoft Teams](/organization/integrations/notification-incidents/msteams/)

docs/platforms/dart/configuration/releases.mdx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,14 @@ Setting the release name tags each event with that release name. We recommend th
5757
If you don't tell Sentry about a new release, Sentry will automatically create a release entity in the system the first time it sees an event with that release ID.
5858

5959
After configuring your SDK, you can install a repository integration or manually supply Sentry with your own commit metadata. Read our documentation about [setting up releases](/product/releases/setup/) for further information about integrations, associating commits, and telling Sentry when deploying releases.
60+
61+
## Release Health
62+
63+
<Note>
64+
65+
Looking for Flutter release health? [See the Flutter documentation](/platforms/flutter/configuration/releases/#release-health).
66+
67+
</Note>
68+
69+
Monitoring release health is currently not supported for pure Dart applications.
70+

docs/platforms/dart/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Verify that your app is sending events to Sentry by adding the following snippet
6868
import 'package:sentry/sentry.dart';
6969
7070
try {
71-
aMethodThatMightFail();
71+
throw Exception('Sentry Test Error');
7272
} catch (exception, stackTrace) {
7373
await Sentry.captureException(
7474
exception,

docs/platforms/flutter/configuration/options.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ This option can be overridden using <PlatformIdentifier name="in-app-include" />
151151
<ConfigKey name="attach-screenshot">
152152

153153
Takes a screenshot of the application when an error happens and includes it as an attachment.
154+
Enable this option by setting <PlatformIdentifier name="attach-screenshot" /> to `true` and wrapping your root widget with `SentryWidget(child: MyApp())`.
154155
Learn more about enriching events with screenshots in our <PlatformLink to="/enriching-events/screenshots/">Screenshots documentation</PlatformLink>.
155156

156157
</ConfigKey>

docs/platforms/flutter/configuration/releases.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,14 @@ After configuring your SDK, you can install a repository integration or manually
6262

6363
Monitor the [health of releases](/product/releases/health/) by observing user adoption, usage of the application, percentage of [crashes](/product/releases/health/#crash), and [session data](/product/releases/health/#session). Release health will provide insight into the impact of crashes and bugs as it relates to user experience, and reveal trends with each new issue through the [Release Details](/product/releases/release-details/) graphs and filters.
6464

65+
In order to monitor release health, the SDK sends session data.
66+
6567
<Note>
6668

67-
Crash reporting and app hang detection are not available for watchOS.
69+
Release health in Flutter is only available for Android, iOS, and macOS.
6870

6971
</Note>
7072

71-
In order to monitor release health, the SDK sends session data.
72-
7373
### Sessions
7474

7575
A session represents the interaction between the user and the application. Sessions contain a timestamp, a status (if the session was OK or if it crashed), and are always linked to a release. Most Sentry SDKs can manage sessions automatically.

docs/platforms/flutter/enriching-events/screenshots/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ This feature is only available for SDKs with a user interface, like the ones for
99

1010
## Enabling Screenshots
1111

12-
Because screenshots may contain <PlatformLink to="/data-management/sensitive-data/">PII</PlatformLink>, they are an opt-in feature. You can enable screenshots as shown below:
12+
Because screenshots may contain <PlatformLink to="/data-management/sensitive-data/">PII</PlatformLink>, they are an opt-in feature.
1313

1414
<PlatformContent includePath="enriching-events/attach-screenshots" />
1515

docs/platforms/flutter/integrations/routing-instrumentation.mdx

Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Before starting, ensure:
3030

3131
Add an instance of `SentryNavigationObserver` to your application's `navigatorObservers`.
3232

33-
```dart {tabTitle: Flutter Routing}
33+
```dart {8} {tabTitle: Flutter Routing}
3434
import 'package:flutter/material.dart';
3535
import 'package:sentry_flutter/sentry_flutter.dart';
3636
@@ -43,7 +43,7 @@ return MaterialApp(
4343
);
4444
```
4545

46-
```dart {tabTitle: GoRouter}
46+
```dart {6} {tabTitle: GoRouter}
4747
import 'package:go_router/go_router.dart';
4848
import 'package:sentry_flutter/sentry_flutter.dart';
4949
@@ -62,21 +62,15 @@ For transactions to be created when navigation changes, you need to provide rout
6262
- Flutter routing: use `RouteSettings` and set the name in the constructor.
6363
- GoRouter: use the `name` parameter to set the route name.
6464

65-
```dart {tabTitle: Flutter Routing}
66-
import 'package:flutter/material.dart';
67-
import 'package:sentry_flutter/sentry_flutter.dart';
68-
65+
```dart {4} {tabTitle: Flutter Routing}
6966
/// Setting the route name is required
7067
MaterialPageRoute(
7168
builder: (BuildContext context) => MyWidget(),
7269
settings: RouteSettings(name: 'My Widget'),
7370
)
7471
```
7572

76-
```dart {tabTitle: GoRouter}
77-
import 'package:go_router/go_router.dart';
78-
import 'package:sentry_flutter/sentry_flutter.dart';
79-
73+
```dart {13} {tabTitle: GoRouter}
8074
final GoRouter _router = GoRouter(
8175
observers: [SentryNavigatorObserver()],
8276
routes: <RouteBase>[
@@ -110,8 +104,6 @@ There are two ways to set up TTID:
110104
The default setup is enabled automatically, but only provides an approximation of TTID. To set a more accurate TTID, manually wrap the desired widget with `SentryDisplayWidget`, as shown below:
111105

112106
```dart
113-
import 'package:sentry_flutter/sentry_flutter.dart';
114-
115107
SentryDisplayWidget(
116108
child: MyWidget(),
117109
)
@@ -129,23 +121,17 @@ TTFD is disabled by default. To enable TTFD measurements, follow these steps:
129121

130122
1. Enable the `enableTimeToFullDisplayTracing` option in the SDK configuration:
131123

132-
```dart
133-
import 'package:flutter/widgets.dart';
134-
import 'package:sentry_flutter/sentry_flutter.dart';
135-
136-
Future<void> main() async {
137-
await SentryFlutter.init(
138-
(options) => options.enableTimeToFullDisplayTracing = true,
139-
appRunner: () => runApp(MyApp()),
140-
);
141-
}
124+
```dart {3}
125+
await SentryFlutter.init(
126+
(options) {
127+
options.enableTimeToFullDisplayTracing = true;
128+
}, appRunner: () => runApp(MyApp()),
129+
);
142130
```
143131

144132
2. Report the span manually:
145133

146134
```dart
147-
import 'package:sentry_flutter/sentry_flutter.dart';
148-
149135
SentryFlutter.reportFullyDisplayed();
150136
```
151137

@@ -231,9 +217,6 @@ Log into [sentry.io](https://sentry.io) and open your project's performance page
231217
Adjust the duration before a routing transaction automatically finishes. The default is 3 seconds.
232218

233219
```dart
234-
import 'package:sentry_flutter/sentry_flutter.dart';
235-
236-
/// Change how long navigation transactions idle before being finished
237220
SentryNavigatorObserver(
238221
autoFinishAfter: Duration(seconds: 5)
239222
)
@@ -251,9 +234,6 @@ Set `enableAutoTransactions` to `false` if you only want to track navigation bre
251234
Enabled by default.
252235

253236
```dart
254-
import 'package:sentry_flutter/sentry_flutter.dart';
255-
256-
/// Only track navigation breadcrumbs
257237
SentryNavigatorObserver(
258238
enableAutoTransactions: false,
259239
)
@@ -265,9 +245,6 @@ Set `ignoreRoutes` if you want routes to be ignored and not processed by the nav
265245
Empty by default.
266246

267247
```dart
268-
import 'package:sentry_flutter/sentry_flutter.dart';
269-
270-
/// Ignore matching routes
271248
SentryNavigatorObserver(
272249
ignoreRoutes: ["/ignoreThisRoute", "/my/ignored/route"],
273250
)
@@ -280,9 +257,6 @@ An existing transaction in the scope 'CustomTransaction' will be renamed to 'MyW
280257
Disabled by default.
281258

282259
```dart
283-
import 'package:sentry_flutter/sentry_flutter.dart';
284-
285-
/// Override transaction name with route name
286260
SentryNavigatorObserver(
287261
setRouteNameAsTransaction: true,
288262
)

docs/platforms/flutter/session-replay/index.mdx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,22 @@ Sampling starts as soon as a session begins. The `sessionSampleRate` is then eva
6060

6161
## Privacy
6262

63-
The SDK is recording and aggressively redacting (masking) all text and images, according to the configuration in `options.experimental.replay`.
64-
You can tune this and add custom masking rules to fit your needs. For example, you can explicitly mask or unmask widgets by type,
63+
The SDK is recording and aggressively redacting (masking) all `Text`, `EditableText`, and `Image` widgets.
64+
Masking in the Sentry Flutter SDK is based on Widget *types*, e.g. `Image`, not the string representation of the type (i.e. we check whether
65+
a `widgetInstance` should be masked by checking `if (widgetInstance is Image)` instead of `if (widgetInstance.runtimeType == 'Image')`).
66+
This means we can ensure masking works regardless of obfuscation in release builds and also works for subclasses.
67+
However, it also means we can only automatically mask widgets that are part of the Flutter SDK itself.
68+
69+
<Alert level="warning">
70+
We cannot mask widgets defined in various 3rd-party packages (because the type is not known in the Sentry Flutter SDK),
71+
even though many should be masked.
72+
73+
Therefore, you need to consider the widgets your application uses and ensure they're masked correctly with custom masking rules.
74+
Examples of widgets that usually should be masked include (but are not limited to): VideoPlayer, WebView, Chart, etc.
75+
</Alert>
76+
77+
You can tune this and add custom masking rules to fit your needs by adjusting the configuration in `options.experimental.replay`.
78+
For example, you can explicitly mask or unmask widgets by type,
6579
or you can even have a callback to decide whether a specific widget instance should be masked:
6680

6781
```dart

0 commit comments

Comments
 (0)