🚧

Native rendering mode

When using native rendering mode, the SDK can record sensitive data in your application.

In order to protect user privacy, you can configure Smartlook to not record sensitive data.

Smartlook attempts to hide selected sensitive UI elements automatically. It can be also instructed to hide or show particular UI components. The last possibility is to stop screen capturing altogether by using no rendering mode.

No Rendering

Sometimes, the entire screen is filled with sensitive data. In these cases, it is best not to record any data. To not record any data, use the NO_RENDERING rendering mode:

Smartlook.instance.preferences.setRenderingMode(RenderingMode.no_rendering);

πŸ“˜

Rendering modes

The Smartlook SDK provides rendering modes that hide sensitive information by simplifying the rendered screen for recording. This is still useful to you because all user interactions are still recorded, but no sensitive data is rendered. For more information, see Rendering Modes.

🚧

Automatically-detected touch events

Some screens display sensitive data through automatically detected touch events. Read more about this issue in secure custom keyboard example.

When the application no longer displays sensitive data, you can set the screen rendering mode to your preferred rendering mode:

Smartlook.instance.preferences.setRenderingMode(RenderingMode.no_rendering);

Handling WebView sensitivity

If an app uses WebView and you want to record them, you need to enable WebView recording:

Smartlook.instance.preferences.setWebViewEnabled(true);

Recording mask

In cases where certain areas of the app should not be recorded, but cannot be defined by a View, you can use RecordingMask:

await Smartlook.instance.setRecordingMask([
      RecordingMask(
          rect: Rect.fromLTWH(0, 0, 200, 200),
          maskType: RecordingMaskType.covering)
    ]);

You can only have one Recording mask set at a time, but the recording mask can contain a list of RecordingMask.Element to cover multiple areas at once.

RecordingMask.Element can be one of two types:

Mask typeHow it works
RecordingMask.Element.Type.COVERINGThe area defined by the element Rect is not recorded
RecordingMask.Element.Type.ERASINGThe area defined by the element Rect is recorded even if a previous RecordingMask.Element inside a list was covering the area.

RecordingMask example

The following example describes a RecordingMask in action.

On the left:

  • The blue box represents a video_item element.
  • The red box represents a video_item_image element.

On the right:

  • The video_item element (blue box) has a .COVERING value. The .COVERING value masks the element in the session recording.
  • The video_item_image element (red box) has an .ERASING value. The image is visible in the session recording because the .ERASING value cancels the .COVERING value.