HomeDocsReact NativeScreen recording

Screen recording

v1.9.0

Recording is off by default. With tester approval, attach up to 30 seconds of recent activity at balanced quality.

Recording permission

  • Recording requires Android 10 (API 29)+ or iOS 15+ with ReplayKit, and a hardware H.264 encoder. Ordinary reports still support Android API 24+. BugScreen leaves any recording already started by your app alone on iOS.
  • Both platforms require OS consent and display recording indicators. Android also shows a foreground-service notification with Stop.
  • Screenshot or photo-library permission does not cover recording. No microphone permission is requested.
  • Choose app capture when Android offers it. Full-display recording can include notifications and system UI.
  • iOS records your app through ReplayKit. Protected content may be missing or blank, including some iOS video.
typescript
await BugScreen.configure({
  apiKey: 'fb_your_api_key_here',
  startScreenRecordingImmediately: true,
});

Check the recording

  1. Open the app and accept the system recording prompt.
  2. Use the app for a few seconds, then open a bug report.
  3. Play the attached clip to check it shows what happened before the report.

If no clip appears, check the recording state and try again after collecting more footage.

OptionDefaultDescription
startScreenRecordingImmediately?: booleanfalseStart recording after system permission.
screenRecordingOptions?: ScreenRecordingOptions30 seconds, balancedSet durationSeconds and low, balanced or high quality.

Duration and quality

Duration must be a finite integer and is clamped to 5–60 seconds. Invalid durations or quality values reject configure before capture starts. Clips may be shorter; video upload limits still apply.

typescript
await BugScreen.configure({
  apiKey: 'fb_your_api_key_here',
  startScreenRecordingImmediately: true,
  screenRecordingOptions: { durationSeconds: 45, quality: 'low' },
});

Quality presets

  • low: up to 480 × 1066, 10 fps, 0.75 Mbps; 8 MiB buffer.
  • balanced (default): up to 720 × 1600, 15 fps, 1.5 Mbps; 16 MiB buffer.
  • high: up to 1080 × 2400, 30 fps, 4 Mbps; 32 MiB buffer.

Sizes apply in either orientation, without stretching or upscaling. Frame rate and bitrate are targets. Buffer limits cover compressed history and exports, not total app memory.

Control recording at runtime

Start recording from a tester control to choose when the system asks for permission. Commands do not confirm consent or successful capture; query the actual state.

typescript
BugScreen.startScreenRecording();

Await getScreenRecordingState() for disabled, waitingForForeground, requestingConsent, recording, pausedForReporter or unavailable. Querying before configuration returns disabled.

typescript
const state = await BugScreen.getScreenRecordingState();
if (state.status === 'unavailable') {
  console.info('Recording unavailable:', state.reason);
}

Only unavailable has a reason, such as permissionDenied, recorderBusy, encodingFailed, memoryPressure or thermalPressure; unknown covers an unrecognized native value. Other states have reason: null.

To stop recording, call:

typescript
BugScreen.stopScreenRecording();

When recording pauses or stops

  • Recording stops and clears history when the app backgrounds or the phone locks. It can restart when the app returns, asking for permission again if needed.
  • Call startScreenRecording() to retry after denial, a manual stop, or an interruption such as memory or thermal pressure. Rotation or resizing starts fresh history.
  • Opening a report pauses recording before the reporter appears. The clip uses one of the four attachment slots; testers can preview or remove it before submitting. Closing the reporter starts fresh history if the session is still approved. Recording permission prompts stay paused while the reporter is open.
  • Clips may be shorter after startup, rotation or dropped frames. If recording or preparation fails, reporting still works and existing attachments stay in place.

Performance

Choose Low quality to reduce encoding work, or shorten the duration to store less history.

Recording privacy

Recording stays on the device with no microphone or app audio. Only clips kept in submitted reports are uploaded. Stopping clears history; disabling recording keeps clips attached to a draft. Removed clips and temporary files are deleted. Videos cannot be redacted, so remove sensitive clips before submitting.

Configure recording in your app. The console and MCP cannot enable recording or approve permission.