Sendbird Calls for iOS enables real-time voice and video calls for 1-to-1 calls or group calls among users within your Sendbird-integrated app. Our development kit can initialize, configure, and build voice and video calling functionality in your iOS app.
The minimum requirements for Calls SDK for iOS are:
iOS 9.0 and later
Swift 4.0 and later
Xcode 12 and later
You can start making a 1-to-1 call with Direct call or create a room to start a group call with Group call by installing Sendbird Calls for iOS.
Xcode and create a new project. Sendbird Calls supports
To use Sendbird Calls, you need to add our custom-built
SendBirdCalls frameworks to your project. The
WebRTC framework is a large sized file which requires you to install
Git Large File Storage.
SendBirdCallsframework into your
- Install the
- Update the
Go to your Xcode project target’s General tab in the
Frameworks and Librariessection. Then drag the built
.frameworkbinaries from the
<YOUR_XCODE_PROJECT_DIRECTORY>/Carthage/Build/iOSfolder into your application's Xcode project.
Go to your Xcode project target’s Build Phases tab, click the + icon, and choose New Run Script Phase. Create a
Run Script, specify your shell (ex:
/bin/sh), and add
/usr/local/bin/carthage copy-frameworksto the script below the shell.
Add the following paths to the
Note: Errors may occur if the size of the
YOUR_PROJECT_DIRECTORY/Pods/SendBirdWebRTCfolder is less than 800 MB. To fix these errors, refer to Troubleshooting in our GitHub repository.
Your users need to grant your app the permission to access camera and microphone on the device.
NSMicrophoneUsageDescriptionkey in your app’s
Info.plistfile to access microphone for audio call.
NSCameraUsageDescriptionin your app’s
Info.plistfile to access camera for video call.
To integrate and run Sendbird Calls in your application, you need to initialize it first. Initialize the
SendBirdCall instance by using the
APP_ID of your Sendbird application, which can be found on the Sendbird Dashboard after creating an application. If the instance is initialized with a different
APP_ID, all existing call-related data in a client app will be cleared and the
SendBirdCall instance will be initialized again with the new
Note: Each Sendbird application can be integrated with a single client app. Within the same application, users can communicate with each other across all platforms, whether they are on mobile devices or on the web.
To make and receive a 1-to-1 call or start a group call, authenticate a user to Sendbird server by using their user ID through the
After authenticating a user, you can continue to either make a 1-to-1 call with Direct call or start a group call with Group call. Skip to Step 12 if you wish to start a group call.
Note: You can implement both the Chat and Calls SDKs to your app. Two SDKs work on the same Sendbird application for them to share users. In this case, you can allow Calls to retrieve a list of users in the app by using the Chat SDK’s method or Chat API.
You can receive push notifications about an incoming 1-to-1 call with either VoIP notifications or remote notifications.
To receive notifications using VoIP notifications, add
PushKit. Then, go to your Xcode project’s Signing & Capabilities and enable
Background Modes. Select the
Voice over IP option under the list of available modes.
To receive notifications using remote notifications, go to your Xcode project’s Signing & Capabilities and enable
You can receive a 1-to-1 call by adding the user’s device token to the server. You can add the token for either VoIP notifications or remote notifications. Use the
SendBirdCall.registerVoIPPush() method to add a device token for VoIP notifications. Use the
SendBirdCall.registerRemotePush(token:completionHandler:) method if you wish to add a token with remote notifications.
Note: To learn more about the differences between the two types of notifications, go to Notifications.
Sendbird Calls provides
DirectCallDelegate event delegates to handle events related to Direct call. The
SendBirdCallDelegate is used to respond to device events such as incoming calls. The
DirectCallDelegate is used to respond to call specific events such as call results.
SendBirdCallDelegateby using the
You are now ready to make your first 1-to-1 call. To make a call, pass the callee’s user ID as an argument to a parameter in the
SendBirdCall.dial() method. To choose initial call configuration such as audio or video capabilities, video settings and mute settings, use the
You can accept or decline an incoming call. To accept an incoming call, use the
directCall.accept() method. To decline the call, use the
directCall.end() method. When you accept the call, a media session will automatically be established by the Calls SDK.
The callee’s app receives an incoming call through either VoIP notifications or the remote notifications. In order to receive incoming calls to the callee’s app, the received notification must be delivered to the Calls SDK through the
To receive notifications using VoIP notifications, refer to the code below:
To receive notifications using remote notifications, refer to the code below:
When creating your first room for a group call, you can choose either a room that supports up to 6 participants with video or a room that supports up to 25 participants with audio. When the room is created, a
ROOM_ID is generated.
RoomTypeproperty to set the room type.
createRoom()method to create a room as shown below.
You can now enter a room and start your first group call. When you enter a room, a participant is created with a unique participant ID to represent the user in the room.
To enter a room, you must acquire the room instance from Sendbird server with the room ID. To fetch the most up-to-date room instance from Sendbird server, use the
SendBirdCall.fetchRoom(by:completionHandler:) method. Also, you can use the
SendBirdCall.getCachedRoom(by:) method that returns the most recently cached room instance from Sendbird Calls SDK.
Note: A user can enter the room using multiple devices or browser tabs. Entering from each device or browser tab will create a new participant.
Once the room is retrieved, call the
enter(with:completionHandler:) method to enter the room.
Note: Share the room ID with other users for them to enter the room from the client app.