This is twilio programmable voice module for react native that makes you allow to make inbound / outbound calls.
This is working with version 4.1.0 of twilio native ios / android sdks. (Version 2.x and 3.x will be deprecated at the end of 2019.)
$ npm install react-native-twilio-voice-module --save
$ yarn add react-native-twilio-voice-module
$ react-native link react-native-twilio-voice-module
Libraries
➜ Add Files to [your project's name]
node_modules
➜ react-native-twilio-voice-module
and add TwilioVoiceModule.xcodeproj
libTwilioVoiceModule.a
to your project's Build Phases
➜ Link Binary With Libraries
Cmd+R
)<Open up android/app/src/main/java/[...]/MainApplication.java
import com.reactlibrary.TwilioVoiceModulePackage;
to the imports at the top of the filenew TwilioVoiceModulePackage()
to the list returned by the getPackages()
methodAppend the following lines to android/settings.gradle
:
include ':react-native-twilio-voice-module'
project(':react-native-twilio-voice-module').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-twilio-voice-module/android')
Insert the following lines inside the dependencies block in android/app/build.gradle
:
compile project(':react-native-twilio-voice-module')
For iOS, you have to add Microphone usage description in info.plist.
For Android, open AndroidManifest.xml file and add the following permissions.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-feature android:name="android.hardware.sensor.proximity" android:required="true" />
Next under <application>
tag, add the firebase messaging service
<service android:name="com.twiliovoicemodule.fcm.VoiceCallFCMService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
You will be required to follow iOS Quickstart step 2 ~ step 9 and Android Quickstart step 2 ~ step 9 to gain access token and to receive call invite.
Here are supported event listeners:
deviceRegistered
- Device is registered successfully to receive call incoming. It means FCM token is registered for android and device token is registered for iOSdeviceNotRegistered
- Device is not registered. Maybe invalid token issue.connectionDidConnect
- Call has connectedconnectionDidFailed
- Call has failed to connectconnectionDidRinging
- Called party is being alerted of a CallconnectionDidReconnecting
- Call starts to reconnect due to network change eventconnectionDidReconnect
- Call is reconnectedconnectionDidDisconnect
- Call has disconnectedcallIncoming
- A call is incoming to your devicecallIncomingCancelled
- A incoming call is cancelledYou should add these event listeners before you initialize TwilioVoiceModule with access token.
import TwilioVoiceModule from 'react-native-twilio-voice-module';
componentDidMount() {
TwilioVoiceModule.addEventListener('deviceRegistered', this.deviceRegistered);
TwilioVoiceModule.addEventListener('connectionDidConnect', this.connectionDidConnect);
// Add more listeners
TwilioVoiceModule.initWithToken(token).then(res => {
// true if initialized,
// false if something went wrong
});
}
componentWillUnmount() {
TwilioVoiceModule.removeEventListener('deviceRegistered', this.deviceRegistered);
TwilioVoiceModule.removeEventListener('connectionDidConnect', this.connectionDidConnect);
// Remove added listeners
}
deviceRegistered = () => {
// Now your device is allowed to receive incoming inbound calls.
}
connectionDidConnect = (call) => {
// call.call_sid
// call.call_state
// call.call_from
// call.call_to
}
Now you are ready to make a call.
TwilioVoiceModule.addEventListener('callIncoming', this.callIncoming);
TwilioVoiceModule.addEventListener('callIncomingCancelled', this.callIncomingCancelled);
// outbound call example
TwilioVoiceModule.connect({
To: '+123456789',
From: '+987654321'
});
//inbound call example
TwilioVoiceModule.connect({
To: 'John'
});
callIncoming = (call) => {
// ... maybe open dialog with accept / reject button
// Accept the call
TwilioVoiceModule.accept();
// Reject the call
TwilioVoiceModule.reject();
}
callIncomingCancelled = (cancelledCall) => {
}
To disconnect call, just call TwilioVoiceModule.disconnect()
# Twilio Programmable Voice
-keep class com.twilio.** { *; }
-keep class tvo.webrtc.** { *; }
-dontwarn tvo.webrtc.**
-keep class com.twilio.voice.** { *; }
-keepattributes InnerClasses
TwilioVoiceModule.getVersion((version) => {
// Twilio sdk version. Actually 4.1.0
});
const activeCall = await TwilioVoiceModule.getActiveCall();
TwilioVoiceModule.setMuted(true); // mute the sound
TwilioVoiceModule.setSpeakerPhone(true); // set the speaker on.
TwilioVoiceModule.sendDigits('12345'); // send IVR digits
MIT