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 packageNative Configuration

Firebase, APNs & backend setup

Accounts and consoles

WhereWhatNeeded for
Firebase consoleOne project with an Android app (package name) and an iOS app (bundle id). Download google-services.json / GoogleService-Info.plist from the project the client admin connected on the RealtimeX dashboard (projectId in /push/config). Tokens from another project never receive pushesAll pushes
Apple Developer → KeysAPNs auth key (.p8) with Apple Push Notifications service. Note Key ID and Team IDiOS pushes
Firebase → Project settings → Cloud MessagingUpload that .p8 under Apple app configurationiOS FCM pushes
RealtimeX dashboard → Settings → Notifications → FirebaseConnect the Firebase project (grant the shown service account Firebase Cloud Messaging API Admin, or upload a key)Server can send
RealtimeX dashboard → Settings → Notifications → Apple VoIPSame .p8 text, Key ID, Team ID; the bundle id must belong to that teamiOS CallKit ring when killed / locked
Apple Developer → IdentifiersApp id with Push Notifications (Xcode does this with automatic signing)iOS pushes

Debug builds register PushKit with apnsEnvironment: 'sandbox' (__DEV__), release builds with production. A Release build signed with a development profile needs configurePushNotifications({apnsEnvironment: 'sandbox'}), otherwise the dashboard card reports bad_device_token.

Backend endpoints the package uses

Endpoint / eventUsed for
GET {apiUrl}/settings/effectiveFeature gates, limits, group policy (Permissions)
GET {apiUrl}/message/mentioned-messages, socket mention_createdMentions view
GET {callUri}/notifications/push/config?platform=ios|androidconfigured, enabled, projectId, voipConfigured; nothing registers unless configured and enabled
POST {callUri}/notifications/push/tokenFCM token (transport: 'fcm') and, on iOS with voipConfigured, the PushKit token (transport: 'apns-voip') — same installationId, appId = bundle id / package name
DELETE {callUri}/notifications/push/tokenLogout, before the token is dropped
GET/PATCH {callUri}/notifications/preferences, GET/PUT {callUri}/notifications/conversations/:idSettings screen and per-conversation level / mute
{callUri}/calls/rooms, GET {callUri}/calls/:callId, POST {callUri}/calls/:callId/joinStart, ringing check, accept from push / CallKit
Socket notification, notification_clear, call_*, session_revoked, thread_status_updateBanners, clears, call signaling, forced logout, thread ticks

Push data the package expects (all string values): tenantId, userId, category (direct · group · mention · thread · call · announcement · moderation), tag, conversationId, threadRootId, messageId; calls add callId, meetingId, mode, callerId, callStatus (ringing · missed), and VoIP pushes expiresAt (unix seconds) and title / body. action: 'clear' with a tag closes that notification. VoIP pushes go to topic <bundle id>.voip, priority 10, expiring with the 40 s ring.

PreviousNative configuration (iOS & Android)NextNavigation — embedding the chat

On this page

Accounts and consolesBackend endpoints the package uses
Back to top