React Native SDK
The Jitsi React Native SDK provides the same user experience as the Jitsi Meet app, in a customizable way which you can embed in your React Native apps.
Sample application using the React Native SDK
If you want to see how easy integrating the Jitsi React Native SDK into a React Native application is, take a look at the
sample applications repository.
Usage
While this is a published library, you can npm i @jitsi/react-native-sdk
.
Dependency conflicts may occur between RNSDK and your app.
If that is the case, please run npm i @jitsi/react-native-sdk --force
.
To check if some dependencies need to be added, please run the following script node node_modules/@jitsi/react-native-sdk/update_dependencies.js
.
This will sync all of our peer dependencies with your dependencies.
Next you will need to do npm install
.
Because our SDK uses SVG files, you will need to update your metro bundler configuration accordingly:
const { getDefaultConfig } = require('metro-config');
module.exports = (async () => {
const {
resolver: {
sourceExts,
assetExts
}
} = await getDefaultConfig();
return {
transformer: {
babelTransformerPath: require.resolve('react-native-svg-transformer'),
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: true,
},
}),
},
resolver: {
assetExts: assetExts.filter(ext => ext !== 'svg'),
sourceExts: [...sourceExts, 'svg']
}
}
})();
Android
Permissions
- In
android/app/src/debug/AndroidManifest.xml
andandroid/app/src/main/AndroidManifest.xml
, under the</application>
tag, please include<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> - Starting Android 14, specific foreground service types permissions require to be added in the manifest file:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
Services
- To enables the screen share feature you now need to go to your
MainApplication.java
file and:-
import com.oney.WebRTCModule.WebRTCModuleOptions;
that comes fromreact-native-webrtc
dependency. -
WebRTCModuleOptions options = WebRTCModuleOptions.getInstance();
instance it. -
options.enableMediaProjectionService = true;
enable foreground service that takes care of screen-sharing feature.
-
API
- Our app use
react-native-orientation-locker
dependency that uses API 33 features. Make sure that your app, inandroid\build.gradle
, targets, at least, that version:buildscript {
ext {
compileSdkVersion = 33
targetSdkVersion = 33
}
}
iOS
Permissions
- React Native SDK requests camera and microphone access, make sure to include the required entries for
NSCameraUsageDescription
andNSMicrophoneUsageDescription
in yourInfo.plist
file. - React Native SDK shows and hides the status bar based on the conference state,
you may want to set
UIViewControllerBasedStatusBarAppearance
toNO
in yourInfo.plist
file. - For starting screen sharing React Native SDK provides the UI to present the
RPSystemBroadcastPickerView
to the user. By default, the picker will display a list of all the available broadcast providers. In order to limit the picker to our particular broadcast provider, we have to setpreferredExtension
to the bundle identifier of the broadcast extension. We are doing this by adding a new key namedRTCScreenSharingExtension
to the app's Info.plist and setting the broadcast extension bundle identifier as the value. - Make sure
voip
is added toUIBackgroundModes
, in the app'sInfo.plist
, in order to work when the app is in the background.
Build Phases
Run Script Phases
-
For the sounds to work, please add the following script in Xcode:
SOUNDS_DIR="${PROJECT_DIR}/../node_modules/@jitsi/react-native-sdk/sounds"
cp $SOUNDS_DIR/* ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/
JitsiMeeting props
Our JitsiMeeting component renders the full meeting experience. This has some customizable properties:
config
Object
- Overwrite different config options.
- For example:
<JitsiMeeting
config = {{
hideConferenceTimer: true,
subject: "React Native SDK",
customToolbarButtons: [
{
icon: "https://w7.pngwing.com/pngs/987/537/png-transparent-download-downloading-save-basic-user-interface-icon-thumbnail.png",
id: "btn1",
text: "Button one"
}, {
icon: "https://w7.pngwing.com/pngs/987/537/png-transparent-download-downloading-save-basic-user-interface-icon-thumbnail.png",
id: "btn2",
text: "Button two"
}
]
}} />
flags
Object
- Add different feature flags
that your meeting experience would like to have.
- For example:
<JitsiMeeting
flags={{
'call-integration.enabled': true,
'fullscreen.enabled': false,
'invite.enabled': true }} />
eventListeners
Object
- Options that personalize your meeting experience:
-
onConferenceBlurred
Function
- Takes a function that gets triggered whenCONFERENCE_BLURRED
action is dispatched, more exactly when a conference screen is out of focus, more exactly when navigation to another screen is initiated. -
onConferenceFocused
Function
- Takes a function that gets triggered whenCONFERENCE_FOCUSED
action is dispatched, more exactly when a conference screen is focused. -
onAudioMutedChanged
Function
- Takes a function that gets triggered whenSET_AUDIO_MUTED
action is dispatched, more exactly when audio mute state is changed. -
onConferenceJoined
Function
- Takes a function that gets triggered whenCONFERENCE_JOINED
action is dispatched, more exactly when a conference was joined. -
onConferenceLeft
Function
- Takes a function that gets triggered whenCONFERENCE_LEFT
action is dispatched, more exactly when a conference was left. -
onConferenceWillJoin
Function
- Takes a function that gets triggered whenCONFERENCE_WILL_JOIN
action is dispatched, more exactly when a conference will be joined. -
onEnterPictureInPicture
Function
- Takes a function that gets triggered whenENTER_PICTURE_IN_PICTURE
action is dispatched, more exactly when entering picture-in-picture is initiated. -
onParticipantJoined
Function
- Takes a function that gets triggered whenPARTICIPANT_JOINED
action is dispatched, more exactly when a specific participant joined a conference. -
onReadyToClose
Function
- Takes a function that gets triggered whenREADY_TO_CLOSE
action is dispatched, more exactly when one exits a conference. -
onVideoMutedChanged
Function
- Takes a function that gets triggered whenSET_VIDEO_MUTED
action is dispatched, more exactly when video mute state is changed.
room
string
- Name of the room where the conference takes place.
serverURL
string
- Server where the conference should take place.
style
Object
- CSS your meeting experience.
token
string
- JWT token used for authentication.
userInfo
-
avatarUrl
string
- Path to participant's avatar. -
displayName
string
- Default participant name to be displayed. -
email
string
- Default email for participant.