Remote notifications
Sendbird Calls supports remote notifications to minimize the interruption of a user’s experience while they are using mobile devices. A banner-style notification will appear at the top of the screen when there is an incoming call or an incoming call has been canceled.
The Calls SDK will deliver remote notifications for: an incoming call, an incoming call declined or accepted from another device, an incoming call canceled by the caller, and a missed call. If the call is accepted, the callee will no longer receive notifications regarding the call.
Note: First, see our GitHub page to learn how to generate your certificate for iOS VoIP Services.
Set up
- To receive remote notifications in your iOS client app, you must register your APNs certificate from Sendbird dashboard.
- Refer to the Make 1-to-1 call section to enable
Remote notifications
capability. - Register your app with APNs and receive a unique device token by using the
registerForRemoteNotifications()
method ofUIApplication
in yourAppDelegate
. - Deliver incoming notifications from the
application(_ :didReceiveRemoteNotification:fetchCompletionHandler:)
to the Calls SDK.
Note: You should implement code to show the user interface at the
didStartRinging
delegate method which is called when the remote notification is delivered.
Remote push token registration
Register
To receive notifications for calls when an app is in the background or closed, a user’s device token must be registered to Sendbird server. To register a device token, call the SendBirdCall.registerRemotePush(token:completionHandler:)
method after a user’s authentication has been completed.
To request the current user's device token for remote notifications from AppDelegate
, ask appropriate permissions from UNUserNotificationCenter
, and call the registerForRemoteNotifications()
method of UIApplicationDelegate
as shown below. To learn more, see the Apple Developer Documentation's Registering Your App with APNs page.
If the user is not authenticated while the registerRemotePush(token:)
method is being called, the registration may not be completed. To avoid this, make sure that you are calling this method after the authentication of the user.
Note: Register a client app for remote notifications in the
AppDelegate
, and save the returned device token from theapplication(_: didRegisterForRemoteNotificationsWithDeviceToken:)
method to an object for storing data such asUserDefaults
. After the authentication of the user, register the saved device token to theSendBirdCall
.
Unregister
For a user to stop receiving remote notifications for incoming calls on the device, unregister their device token by using the SendBirdCall.unregisterRemotePush(token:completionHandler:)
method.
Note: Make sure to unregister the device token first, then deauthenticate the user when logging out from Sendbird server.
Unregister All
Use the SendBirdCall.unregisterAllRemotePushTokens(completionHandler:)
method to unregister all remote device tokens of the current user.
Deliver notifications to the SDK
The Calls SDK can process further operations only when the remote notifications related to calls are delivered through the SendBirdCall.application(_:didReceiveRemoteNotification:)
method. Like the following, use the method in the application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
.
Note: By default,
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
delegate method isn’t called if the client app is in the background or closed. When a remote push notification is delivered to the mobile device, the notification will show as a banner and won’t trigger the delegate method while the app is in the background. If the client app is closed, the payload will be delivered when the user responds to the notification by tapping on it. However, if the client app is in the foreground, the notification will trigger the delegate method immediately.
Customize with app extensions
Notification Service app extension
You can customize the content of remote notifications, such as the subject and description, before it is delivered to the user. Implement the didReceive(request:withContentHandler:)
method to a Notification Service Extension
so that you can access the payload of the remote notifications and customize the content.
It is recommended to use a lightweight UI in your extension because this method only allows up to 30 seconds to process and deliver the notification to the user. For more information, go to the Apple's Notification Service app extension guide.
Notification Content app extension
To show your own content on incoming notifications, add a Notification Content extension
target to the Xcode project containing your app. The default Xcode template contains a source file and storyboard for your view controller.
Using a storyboard, you can customize the default notification interface and add interactive controls. Implement didReceive(_ notification: UNNotification)
in your view controller for the system to call the method to process incoming notifications.
For more information, go to the Apple's Notification Content extension guide.