Skip to main content
Version: Android SDK

Session Replay

Session Replay lets you record and replay real user sessions from your Android app directly in the Screeb platform.

Requirements

Session Replay requires Screeb Android SDK 3.x.x or higher.

Enable Session Replay

Session Replay can be enabled from your workspace settings in the Screeb platform.

You can also start and stop recording programmatically:

// Start recording
Screeb.sessionReplayStart()

// Stop recording
Screeb.sessionReplayStop()

Privacy: Masking Content

Automatic masking

By default, Screeb automatically masks password fields and elements whose contentDescription or resource name contains sensitive keywords (password, cvv, pin, ssn, etc.).

Mask specific views

Add the screebMaskText() extension to any View to force it to appear as a gray block in recordings. Its children will not be captured.

import app.screeb.sdk.screebMaskText

// Mask a credit card input
binding.cardNumberInput.screebMaskText()

// Mask an entire section
binding.personalInfoSection.screebMaskText()

This is the Android equivalent of the screeb-mask-text CSS class on the web.

Exclude views from capture entirely

Use screebNoCapture() to completely remove a view and its children from the recording. The view will not appear at all in the replay.

import app.screeb.sdk.screebNoCapture

binding.sensitiveContainer.screebNoCapture()

This is the Android equivalent of the screeb-no-capture CSS class on the web.

IAM Product Tours: Stable Element IDs

Screeb In-App Messaging (IAM) uses element IDs to target specific views for product tours and tooltips. By default, Screeb uses Android resource IDs (R.id.*) which are stable across app restarts.

For views that do not have a resource ID, such as programmatically created views, or to provide a semantically meaningful ID that survives layout refactoring, set a stable Screeb ID:

import app.screeb.sdk.screebId

binding.checkoutButton.screebId("checkout_button")
binding.profileAvatar.screebId("profile_avatar")
tip

Use snake_case identifiers that describe the element's purpose, not its position. These IDs are used by your product and design team to build IAM product tours, so keep them stable across app versions.

Flutter

In Flutter, the Screeb SDK wraps native Android and iOS views. For session replay privacy, the recommended approach today is:

Via MethodChannel (advanced)

If you need Flutter-side privacy rules before first-class widget wrappers are available, register masking behavior through your native bridge or MethodChannel implementation so widgets with matching semantic metadata are masked by the native SDK.

A dedicated Flutter API for semantic-label masking is planned for a future SDK version.

Wrapping native views

For native Android views rendered inside Flutter with PlatformView, use the Kotlin extensions directly in your platform channel implementation:

// In your Android platform channel handler
view.screebMaskText() // web equivalent: screeb-mask-text CSS class
view.screebNoCapture() // web equivalent: screeb-no-capture CSS class
view.screebId("checkout_button")

A ScreebMaskText, ScreebNoCapture, and ScreebId widget wrapper is planned for a future Flutter SDK version.

React Native

In React Native, the Screeb SDK bridges to native Android and iOS APIs. Session replay privacy annotations can be set via:

Start/Stop recording

import { sessionReplayStart, sessionReplayStop } from '@screeb/react-native';

// Start recording
await sessionReplayStart();

// Stop recording
await sessionReplayStop();

Masking views (coming soon)

A screebMaskText, screebNoCapture, and screebId prop on React Native View components is planned. In the meantime, for custom native components, you can set the tags directly from your native module:

// Android — from your React Native bridge
view.screebMaskText() // web equivalent: screeb-mask-text CSS class
view.screebNoCapture() // web equivalent: screeb-no-capture CSS class
view.screebId("my_element")
// iOS — from your React Native bridge
view.screebMaskText()
view.screebNoCapture()
view.screebId("my_element")