Building VoIP Apps with React Native: SIP, Push Notifications & CallKit
How to build a production React Native VoIP app: PJSIP integration via native modules, CallKit on iOS, ConnectionService on Android, VoIP push notifications with PushKit, and SIP registration management.
Building VoIP Apps with React Native: SIP, Push Notifications & CallKit
How to build a production React Native VoIP app: PJSIP integration via native modules, CallKit on iOS, ConnectionService on Android, VoIP push notifications with PushKit, and SIP registration management.
Kaushik Parmar
Founder & VoIP Architect, CelloIP Technologies
React Native for VoIP: The Architecture Decision
React Native is an excellent choice for VoIP apps when you need a shared codebase between iOS and Android and your team has JavaScript expertise. The SIP stack and native calling APIs must run in native code — React Native bridges to these native layers. The JavaScript layer handles UI, call state management, and business logic. The native layer runs PJSIP/linphone, audio processing, and CallKit/ConnectionService. You get 80–90% code sharing for UI and logic while the native modules deliver carrier-quality calling performance.
Setting Up PJSIP in React Native
Compile PJSIP as a native library for iOS and Android, then write a native module exposing PJSIP's API to JavaScript via the React Native bridge. react-native-callkeep provides pre-built CallKit/ConnectionService bindings. For production, build a custom PJSIP native module for control over codec configuration (Opus, G.711), SRTP encryption, ICE/STUN/TURN, and background SIP registration.
React Native — SIP account registration via native module
import { NativeModules, NativeEventEmitter } from 'react-native';
const { SipModule } = NativeModules;
await SipModule.createAccount({
username: 'alice', domain: 'sip.example.com',
password: 'secret', transport: 'TLS',
enableSrtp: true,
});
const emitter = new NativeEventEmitter(SipModule);
emitter.addListener('onIncomingCall', (callData) => {
RNCallKeep.displayIncomingCall(
callData.callId, callData.remoteUri,
callData.remoteDisplayName, 'generic', true
);
});CallKit (iOS) and ConnectionService (Android)
CallKit displays native iOS call screens, integrates with Recents, Siri, and Bluetooth. Without CallKit, your app cannot receive background VoIP calls on iOS. react-native-callkeep handles both platforms with a unified API. Use PushKit (not APNs) for VoIP push notifications on iOS — PushKit wakes the app within milliseconds for incoming calls. On Android, use FCM high-priority messages combined with a foreground service for reliable background call reception.
Frequently Asked Questions
Can React Native VoIP apps pass App Store review?
Yes, if implemented correctly with PushKit, CallKit, the voip background mode, and no abuse of background processing.
React Native vs Flutter for VoIP?
React Native is better if your team knows JavaScript or shares code with a web admin panel. Flutter is better for highest UI performance with less native bridge overhead. Both support full VoIP development.
Do I need a native developer for React Native VoIP?
Yes, for the PJSIP native module and CallKit/ConnectionService integration — this 10–20% native code requires iOS and Android expertise.
Need help implementing this for your project?
Talk to a VoIP Engineer