-
-
Notifications
You must be signed in to change notification settings - Fork 221
/
native_sdk_integration.dart
77 lines (71 loc) · 2.65 KB
/
native_sdk_integration.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:sentry/sentry.dart';
import '../sentry_flutter_options.dart';
/// Enables Sentry's native SDKs (Android and iOS) with options.
class NativeSdkIntegration extends Integration<SentryFlutterOptions> {
NativeSdkIntegration(this._channel);
final MethodChannel _channel;
SentryFlutterOptions? _options;
@override
FutureOr<void> call(Hub hub, SentryFlutterOptions options) async {
_options = options;
if (!options.autoInitializeNativeSdk) {
return;
}
try {
await _channel.invokeMethod('initNativeSdk', <String, dynamic>{
'dsn': options.dsn,
'debug': options.debug,
'environment': options.environment,
'release': options.release,
'enableAutoSessionTracking': options.enableAutoSessionTracking,
'enableNativeCrashHandling': options.enableNativeCrashHandling,
'attachStacktrace': options.attachStacktrace,
'attachThreads': options.attachThreads,
'autoSessionTrackingIntervalMillis':
options.autoSessionTrackingInterval.inMilliseconds,
'dist': options.dist,
'integrations': options.sdk.integrations,
'packages':
options.sdk.packages.map((e) => e.toJson()).toList(growable: false),
'diagnosticLevel': options.diagnosticLevel.name,
'maxBreadcrumbs': options.maxBreadcrumbs,
'anrEnabled': options.anrEnabled,
'anrTimeoutIntervalMillis': options.anrTimeoutInterval.inMilliseconds,
'enableAutoNativeBreadcrumbs': options.enableAutoNativeBreadcrumbs,
'maxCacheItems': options.maxCacheItems,
'sendDefaultPii': options.sendDefaultPii,
'enableOutOfMemoryTracking': options.enableOutOfMemoryTracking,
'enableNdkScopeSync': options.enableNdkScopeSync,
'enableAutoPerformanceTracking': options.enableAutoPerformanceTracking,
'sendClientReports': options.sendClientReports,
});
options.sdk.addIntegration('nativeSdkIntegration');
} catch (exception, stackTrace) {
options.logger(
SentryLevel.fatal,
'nativeSdkIntegration failed to be installed',
exception: exception,
stackTrace: stackTrace,
);
}
}
@override
FutureOr<void> close() async {
final options = _options;
if (options != null && !options.autoInitializeNativeSdk) {
return;
}
try {
await _channel.invokeMethod('closeNativeSdk');
} catch (exception, stackTrace) {
_options?.logger(
SentryLevel.fatal,
'nativeSdkIntegration failed to be closed',
exception: exception,
stackTrace: stackTrace,
);
}
}
}