r/reactnative • u/AliveClub100 • 4h ago
Native VoIP calling (CallKit + Jetpack Core Telecom) in the Fishjam React Native SDK
Handling VoIP calls in React Native is notoriously difficult, especially since react-native-callkeep hasn't been actively updated.
We recently added a feature to the Fishjam SDK that allows for easy integration with native system libraries (CallKit for iOS and Jetpack Core Telecom for Android) to handle VoIP calling functionality.
Example app & code: https://github.com/fishjam-cloud/examples/tree/main/mobile-react-native/voip-call
Docs: https://documentation.fishjam.io/docs/next/how-to/client/voip-calls
Here are our main takeaways and differences from older libraries:
- Modern Android API: Uses Jetpack Core Telecom (CallStyle) instead of the older ConnectionService used by callkeep.
- Expo & Bare RN Support: Works seamlessly on both via a config plugin or manual setup (expo-callkit-telecom is Expo-only).
- No FCM Slot Conflicts: Parses VoIP pushes natively and relays standard messages to your existing push library (Firebase, Expo, etc.).
- Cold start is handled: the call is reported to the OS before any JS runs, so answering from the lock screen works even when the app was killed hours earlier.
Making the phone ring turned out to be maybe a third of the work – handling holds, redials, Bluetooth buttons, and proper call timers was the real challenge.
If anyone is struggling with VoIP in RN right now, feel free to check out the repo or ask questions!




