react-native-twilio-voice-module
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.)
Getting started
$ npm install react-native-twilio-voice-module --save
$ yarn add react-native-twilio-voice-module
Mostly automatic installation
$ react-native link react-native-twilio-voice-module
Manual installation
iOS
- In XCode, in the project navigator, right click
Libraries
➜Add Files to [your project's name]
- Go to
node_modules
➜react-native-twilio-voice-module
and addTwilioVoiceModule.xcodeproj
- In XCode, in the project navigator, select your project. Add
libTwilioVoiceModule.a
to your project'sBuild Phases
➜Link Binary With Libraries
- Run your project (
Cmd+R
)<
Android
- Open up
android/app/src/main/java/[...]/MainApplication.java
- Add
import com.reactlibrary.TwilioVoiceModulePackage;
to the imports at the top of the file - Add
new TwilioVoiceModulePackage()
to the list returned by thegetPackages()
method
- Append 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')
Permissions
-
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>
Usage
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 cancelled
You should add these event listeners before you initialize TwilioVoiceModule with access token.
; { TwilioVoiceModule; TwilioVoiceModule; // Add more listeners TwilioVoiceModule; } { TwilioVoiceModule; TwilioVoiceModule; // Remove added listeners} { // Now your device is allowed to receive incoming inbound calls.} { // call.call_sid // call.call_state // call.call_from // call.call_to}
Now you are ready to make a call.
TwilioVoiceModule;TwilioVoiceModule; // outbound call exampleTwilioVoiceModule; //inbound call exampleTwilioVoiceModule; { // ... maybe open dialog with accept / reject button // Accept the call TwilioVoiceModuleaccept; // Reject the call TwilioVoiceModule;} { }
To disconnect call, just call TwilioVoiceModule.disconnect()
Android ProGuard Rules
# Twilio Programmable Voice
-keep class com.twilio.** { *; }
-keep class tvo.webrtc.** { *; }
-dontwarn tvo.webrtc.**
-keep class com.twilio.voice.** { *; }
-keepattributes InnerClasses
Other APIs that you may need.
TwilioVoiceModule; const activeCall = await TwilioVoiceModule; TwilioVoiceModule; // mute the sound TwilioVoiceModule; // set the speaker on. TwilioVoiceModule; // send IVR digits
Twilio Voice SDK reference
Credits
License
MIT