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