react-native-phone-keep
v1.1.2
Published
A native phone calling module for React Native
Downloads
14
Maintainers
Readme
react-native-phone-keep
A native module for React Native that allows you to handle phone calls with a native UI on both iOS (CallKit) and Android (ConnectionService/TelecomManager).
This library is designed to be a lightweight alternative to full-blown VoIP libraries when you just need to trigger the native call screen for WebRTC or other calling applications.
Features
- Native UI: Uses the system's native incoming call UI (CallKit on iOS, ConnectionService on Android).
- WebRTC Ready: Designed to work alongside WebRTC. It handles the native "shell" of the call while you handle the audio/video logic.
- Crash Resistant: Uses safe intents and permission checks to avoid common crashes.
- TypeScript Support: Fully typed API.
Installation
npm install react-native-phone-keep
# or
yarn add react-native-phone-keepiOS Setup
- Pod Install:
cd ios && pod install - Capabilities:
- Open your project in Xcode.
- Go to Signing & Capabilities.
- Add Background Modes.
- Check Voice over IP.
Android Setup
- Permissions: The library automatically adds
MANAGE_OWN_CALLSto your manifest. - Service: The library automatically registers the
VoiceConnectionService.
Usage
import {
setup,
displayIncomingCall,
endCall,
addListener
} from 'react-native-phone-keep';
// 1. Initialize the service (usually in your App.tsx)
useEffect(() => {
setup('MyCallingApp');
// 2. Listen for events
const answerSub = addListener('onAnswerCall', (data) => {
console.log('User answered call:', data.uuid);
// Start your WebRTC connection here
});
const endSub = addListener('onEndCall', (data) => {
console.log('User ended call:', data.uuid);
// Cleanup WebRTC connection here
});
return () => {
answerSub.remove();
endSub.remove();
};
}, []);
// 3. Trigger an incoming call (e.g., when receiving a push notification)
const handleIncomingPush = async () => {
const uuid = 'some-unique-uuid';
await displayIncomingCall(uuid, '+1234567890', 'John Doe');
};
// 4. End a call programmatically
const endCurrentCall = async (uuid) => {
await endCall(uuid);
};API
setup(appName: string): Promise<boolean>
Initializes the calling service with your app's name.
displayIncomingCall(uuid: string, handle: string, callerName: string): Promise<boolean>
Displays the native incoming call screen.
uuid: A unique ID for the call.handle: The phone number or ID of the caller.callerName: The name to display.
startCall(uuid: string, handle: string): Promise<boolean>
- iOS: Reports an outgoing call to CallKit.
- Android: Opens the system dialer (fallback) or uses ConnectionService if configured as a calling app.
endCall(uuid: string): Promise<boolean>
Ends the call with the specified UUID.
makeSystemDialerCall(phoneNumber: string): Promise<boolean>
Simply opens the system dialer with the number pre-filled. Does not manage call state.
Events
onAnswerCall: Triggered when the user answers the call.onEndCall: Triggered when the call is ended (by user or programmatically).onStartCall: Triggered when an outgoing call starts.
License
ISC
