Platform notes
iOS
- Requires the
voipbackground mode and a VoIP push certificate. - Uses CallKit + PushKit + WebRTC's
RTCAudioSessionfor manual audio control. - Minimum iOS version: 15.1.
Android
- Requires
MANAGE_OWN_CALLSpermission. - Minimum SDK: 26 (Android 8.0).
- Uses
androidx.core:core-telecom. - Incoming calls come via FCM data messages — the config plugin registers
ExpoCallKitTelecomMessagingServiceautomatically.
VoIP push token types
The VoIP push token type is reported as "APNS_VOIP" on iOS and "FCM" on Android — send both to your backend so it knows which transport to use.
Keeping connections alive in the background
This module hands the OS a CallKit/Core-Telecom call, which keeps the process alive during a call — but JS timers (setInterval, setTimeout) and JS-side network heartbeats are still subject to background throttling once the screen locks. If your media stack needs an app-level heartbeat (e.g. a WebSocket signalling channel) to survive the background, pair this module with react-native-nitro-keepalive-timer to get native timers that fire reliably while a call is active.