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()

Battery usageโ€‹

Screeb is optimized to minimize battery impact. Most features are event-driven, and session replay adapts automatically to app activity and device conditions.

When session replay is enabled, the SDK reduces work while idle and under Low Power Mode, Battery Saver, thermal pressure, or memory pressure. It prioritizes reducing image quality, resolution, and changed-region processing before lowering active capture cadence.

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, use the widget helpers from plugin_screeb:

ScreebMaskText(child: TextField(...))
ScreebNoCapture(child: SensitiveWidget())
ScreebId('checkout_button', child: ElevatedButton(...))

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")

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();

Privacy helpersโ€‹

import { ScreebId, ScreebMaskText, ScreebNoCapture } from '@screeb/react-native';

<ScreebMaskText>
<TextInput />
</ScreebMaskText>

<ScreebNoCapture>
<SensitiveView />
</ScreebNoCapture>

<ScreebId id="checkout_button">
<Button title="Checkout" />
</ScreebId>