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