Flutter SDK - Очистка конфиденциальных данных
Компоненты UI
Section titled Компоненты UIОберните в ORSanitizedView всё, что не должно появляться в воспроизведении. В записи эта область размывается и заштриховывается, как в iOS SDK, а виджет снимает свою регистрацию, как только покидает дерево.
import 'package:openreplay/openreplay.dart';
ORSanitizedView(
child: TextField(
controller: _cardNumber,
decoration: const InputDecoration(labelText: 'Card number'),
),
)
Маскирование применяется вторым проходом растеризации поверх захваченного кадра, поэтому оно никогда не меняет того, что ваш пользователь видит на экране.
Platform views
Section titled Platform viewsPlatform views — WebView, карты, превью камеры — отрисовываются в отдельных нативных слоях, которые Flutter не может считать, поэтому иначе они выглядели бы как пустые области. По умолчанию трекер закрывает их заглушкой. Отключить это можно с помощью maskPlatformViews: false:
await OpenReplay.instance.start(
projectKey: 'YOUR_PROJECT_KEY',
options: const OROptions(maskPlatformViews: false),
);
Сетевые запросы
Section titled Сетевые запросыТела отбрасываются, если вы не установите capturePayload: true, а заголовки cookie, set-cookie и authorization отбрасываются по умолчанию. Помимо этого, последнее слово по каждому зафиксированному вызову остаётся за sanitizer:
OpenReplay.instance.patchNetwork(ORNetworkOptions(
capturePayload: true,
ignoreHeaders: ['cookie', 'set-cookie', 'authorization', 'x-api-key'],
sanitizer: (record) {
final body = record.requestBody;
if (body is Map) body.remove('password');
return record; // return null to drop the call entirely
},
));
Полный список полей см. в разделе параметры сети.
Остались вопросы?
Section titled Остались вопросы?Если у вас есть какие-либо вопросы об этом процессе, не стесняйтесь обращаться к нам в нашем Slack или загляните на наш Форум.