RealTimeX
Sign inStart for free
RealTimeXMobile Package
Introduction5-minute overviewFeaturesHow the package worksGlossary
Requirements & dependenciesBackend credentialsInstallation step by stepTutorial — your first chat appProject config fileApp entry — index.jsQuick start — minimum working chatComplete ChatScreen example
Native configuration (iOS & Android)Firebase, APNs & backend setup
Navigation — embedding the chatSession, auth & Socket.IOPermissions & access controlAudio & video callingPush notificationsMentions viewRich-text messages (WebView editor)Total unread count
Customization — four waysDefault component fallback (important)Which slots are wiredCustomization examples (Case 1–4)UI feature flags & copy (ui)Chat info (group + DM)Style overrides (ui.styles)Render props (ChatProvider)Theme, fonts & appearance
ChatProvider props referenceconfigureChat options referenceHooks & storeCallbacks referenceAPI query paramsAll exports
Production integration pattern (Fieldr)Host app integration — providers, toasts, tab bars & navigationEnvironment variablesLocal package / monorepo (Metro)
TroubleshootingSetup checklistArchitectureDocumentation & file mapPackage development (maintainers)License
Mobile packageFeatures & Guides

Audio & video calling

Calling uses RealtimeX call_* signaling and VideoSDK for media. ChatNavigator already mounts CallProvider and ActiveCallScreen; the room header's voice / video buttons start calls.

Setup

  1. Install the calling peers (@videosdk.live/react-native-sdk, @videosdk.live/react-native-incallmanager).
  2. Call VideoSDK register() once in index.js.
  3. Enable calling and pass the calls base:
typescript
1import {configureCalling, configureChat} from '@realtimexsco/live-chat-react-native';2 3configureCalling({enabled: true}); // default true; false hides calling4configureChat({callUri: 'https://realtimex.softwareco.com/api/v2' /* … */});
  1. Native: Android supportsPictureInPicture on MainActivity; iOS usage strings, audio / voip / picture-in-picture background modes; Broadcast extension for screen share — see Native configuration.

What you get

Incoming overlay with ringtone / vibration; outgoing, ringing and in-call screens; mute, camera, flip camera, speaker; screen share (with a "<name> wants to share their screen" banner and a Stop sharing action for the current presenter); whiteboard and cloud recording (when allowed); raise hand, emoji reactions, in-call chat, participants; draggable self-view; Picture-in-Picture; call history (CallsHistoryScreen), recordings (CallRecordingsScreen), and a join banner for live group calls.

Use your own call handling

typescript
1configureChat({2  ui: {3    chatRoom: {4      header: {5        onVideoCallPress: ({conversationId}) => {6          myVideoSdk.start(conversationId);7          return true; // skip the built-in call8        },9      },10    },11    chatInfo: {onAudioPress: ctx => (myVoiceSdk.start(ctx.conversationId), true)},12  },13});

Hide call buttons with showVoiceCall: false / showVideoCall: false. Hide the room menu's entries with roomOptions: {calls: false, recordings: false}.

Programmatic calls

tsx
1import {callManager, useCallStore} from '@realtimexsco/live-chat-react-native';2 3await callManager.startOutgoingCall({4  conversationId,5  mode: 'video', // 'audio' | 'video'6  peer: {name: displayName, avatar: avatarUrl},7  isGroupCall: false,8});9 10callManager.acceptIncomingCall();11callManager.rejectIncomingCall();12callManager.cancelOutgoingCall();13callManager.endActiveCall();14callManager.joinOngoingCall(callId);15 16const uiStatus = useCallStore(s => s.uiStatus);17// 'idle' | 'creating' | 'ringing-out' | 'incoming' | 'joining' | 'in-call' | 'ending'

Without ChatNavigator, mount CallProvider inside ChatProvider, pass navigationRef, and register ActiveCallScreen in that navigator.

Call REST helpers: apiFetchCallHistory, apiFetchActiveCalls, apiJoinCall. Stores: useCallStore, useCallExtrasStore, useLiveCallsStore, resetCallExtras. Components: FloatingReactions, CallChatPanel, JoinCallBanner.

Picture-in-Picture details

PlatformSetupBehavior
AndroidCallPipModule is autolinked and hooks the activity itself. Add android:supportsPictureInPicture="true" to MainActivityPiP opens when the user presses Home during a call
iOSCallPipModule is autolinked (pod install). Add the picture-in-picture background modeDevice only (not the simulator)
  • Without CallPipModule, calls still work; PiP is skipped.
  • Mic / camera / end controls are hidden while PiP is active.
  • When a remote participant is sharing, PiP shows the screen share; otherwise their camera, or their avatar when the camera is off.

Camera during PiP / iPad multitasking (iOS)

By default iOS pauses your camera when the app enters PiP, Split View or Slide Over. To keep it live, copy host-setup/patches/@videosdk.live+react-native-webrtc+0.0.22.patch into your app's patches/ folder and add "postinstall": "patch-package" to package.json.

iOS versionRequirement
18+voip in UIBackgroundModes (already required for calls). No entitlement
16–17, iPad with Stage ManagerNothing extra
16–17, PiP / Split View / Slide Overcom.apple.developer.avfoundation.multitasking-camera-access entitlement, granted by Apple first
15Not available; the camera pauses in the background and resumes on return

To check on a device, filter the Xcode console for RTCCameraVideoCapturer and CallPipModule; you should see Multitasking camera access supported=1 enabled=1.

Screen sharing at a glance

PlatformSetup
AndroidAutolinked (android-screenshare/: MediaProjection foreground service). Without it, Android 14+ crashes right after the user accepts the screen-capture prompt
iOSVideosdkRPK is autolinked. You add a Broadcast Upload Extension target with the 3 templates from host-setup/ios/screen-share/Broadcast/ and the RealtimexLiveChatBroadcast pod — see iOS — screen share extension ios/MyChatAppBroadcast/

Only one person can present at a time. When someone else asks to share, the presenter sees "<name> wants to share their screen" with a Stop sharing button.

PreviousPermissions & access controlNextPush notifications

On this page

SetupWhat you getUse your own call handlingProgrammatic callsPicture-in-Picture detailsCamera during PiP / iPad multitasking (iOS)Screen sharing at a glance
Back to top