Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
react-native-callkit
Advanced tools
React Native CallKit utilises a brand new iOS 10 framework CallKit to make the life easier for VoIP developers using React Native.
For more information about CallKit, please see Official CallKit Framework Document or Introduction to CallKit by Xamarin
Note: Since CallKit is quite new, this module will be updated frequently so be careful with the version you are using.
Use version >= 1.1.0 if you're using react native >= 0.40
npm install --save react-native-callkit
rnpm link react-native-callkit
npm install --save react-native-callkit
cd ios
pod install
In Xcode
-> Build Phases
-> Link Binary With Libraries
, add CallKit.framework
and Intents.framework
with Optional
status
#import "RNCallKit.h"
Initialise RNCallKit first, since we need our custom observer
of NSNotificationCenter
to be started as soon as the app is initialising
// This is how you normally initialise React Root View, delete it
-RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
- moduleName:@"MyApp"
- initialProperties:nil
- launchOptions:launchOptions];
// Initialise RNCallKit
+RNCallKit *rncallkit = [[RNCallKit alloc] init];
// Initialise React Bridge with RNCallKit
+RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:jsCodeLocation
+ moduleProvider:^{ return @[rncallkit]; }
+ launchOptions:launchOptions];
// Initialise React Root View with React Bridge you've just created
+RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
+ moduleName:@"MyApp"
+ initialProperties:nil];
This delegate will be called when the user tries to start a call from native Phone App
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler
{
return [RNCallKit application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
}
Initialise RNCallKit with options
Call when you receive incoming calls to display system UI
Call when you make an outgoing call
Call when you finish an incoming/outgoing call
data:
{
handle: '886900000000' // The number/name got from Recents in built-in Phone app
}
User start call action from Recents in built-in Phone app
Try to start your call action from here (e.g. get credentials of the user by data.handle
and/or send INVITE to your SIP server)
After all works are done, remember to call RNCallKit.startCall(uuid, calleeNumber)
User answer the incoming call
Do your normal Answering
actions here
data:
{
callUUID: 'f0ee907b-6dbd-45a8-858a-903decb198f8' // The UUID of the call that is to be answered
}
User finish the call
Do your normal Hang Up
actions here
data:
{
callUUID: 'f0ee907b-6dbd-45a8-858a-903decb198f8' // The UUID of the call that is to be hung
}
The AudioSession
has been activated by RNCallKit, you might want to do following things when receiving this event:
import React from 'react';
import RNCallKit from 'react-native-callkit';
import uuid from 'uuid';
class RNCallKitExample extends React.Component {
constructor(props) {
// Initialise RNCallKit
let options = {
appName: 'RNCallKitExample',
imageName: 'my_image_name_in_bundle',
ringtoneSound: 'my_ringtone_sound_filename_in_bundle',
};
try {
RNCallKit.setup(options);
} catch (err) {
console.log('error:', err.message);
}
// Add RNCallKit Events
RNCallKit.addEventListener('didReceiveStartCallAction', this.onRNCallKitDidReceiveStartCallAction);
RNCallKit.addEventListener('answerCall', this.onRNCallKitPerformAnswerCallAction);
RNCallKit.addEventListener('endCall', this.onRNCallKitPerformEndCallAction);
RNCallKit.addEventListener('didActivateAudioSession', this.onRNCallKitDidActivateAudioSession);
}
onRNCallKitDidReceiveStartCallAction(data) {
/*
* Your normal start call action
*
* ...
*
*/
let _uuid = uuid.v4();
RNCallKit.startCall(_uuid, data.handle);
}
onRNCallKitPerformAnswerCallAction(data) {
/* You will get this event when the user answer the incoming call
*
* Try to do your normal Answering actions here
*
* e.g. this.handleAnswerCall(data.callUUID);
*/
}
onRNCallKitPerformEndCallAction(data) {
/* You will get this event when the user finish the incoming/outgoing call
*
* Try to do your normal Hang Up actions here
*
* e.g. this.handleHangUpCall(data.callUUID);
*/
}
onRNCallKitDidActivateAudioSession(data) {
/* You will get this event when the the AudioSession has been activated by **RNCallKit**,
* you might want to do following things when receiving this event:
*
* - Start playing ringback if it is an outgoing call
*/
}
// This is a fake function where you can receive incoming call notifications
onIncomingCall() {
// Store the generated uuid somewhere
// You will need this when calling RNCallKit.endCall()
let _uuid = uuid.v4();
RNCallKit.displayIncomingCall(_uuid, "886900000000")
}
// This is a fake function where you make outgoing calls
onOutgoingCall() {
// Store the generated uuid somewhere
// You will need this when calling RNCallKit.endCall()
let _uuid = uuid.v4();
RNCallKit.startCall(_uuid, "886900000000")
}
// This is a fake function where you hang up calls
onHangUpCall() {
// get the _uuid you stored earlier
RNCallKit.endCall(_uuid)
}
render() {
}
}
Any pull request, issue report and suggestion are highly welcome!
ISC License (functionality equivalent to MIT License)
FAQs
iOS 10 CallKit Framework For React Native
The npm package react-native-callkit receives a total of 19 weekly downloads. As such, react-native-callkit popularity was classified as not popular.
We found that react-native-callkit demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.