Настройка одно-к одному вызовов и push-уведомлений в библиотеке пользовательского интерфейса
Библиотека пользовательского интерфейса предоставляет поддержку вне поля для выполнения вызовов один к одному с помощью идентификаторов участников Службы коммуникации Azure. Для поддержки одного вызова библиотека пользовательского интерфейса предоставляет входящие уведомления о вызовах. Вы также можете использовать Службы коммуникации Azure в качестве источника событий Сетка событий Azure для вызовов.
Из этой статьи вы узнаете, как правильно вызывать один к одному с помощью библиотеки пользовательского интерфейса в приложении.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Развернутый ресурс Служб коммуникации. Создайте ресурс Служб коммуникации.
- Маркер доступа пользователя для включения клиента для вызовов. Получите маркер доступа пользователя.
- Необязательно. Завершение краткого руководства по началу работы с составными компонентами библиотеки пользовательского интерфейса.
Настройка функций
Дополнительные сведения см. в библиотеке пользовательского интерфейса Android с открытым исходным кодом и образце кода приложения.
Настройка разрешений для push-уведомлений
Чтобы настроить push-уведомления, требуется учетная запись Firebase с включенной функцией Firebase Cloud Messaging (FCM). Служба FCM должна быть подключена к экземпляру Центров уведомлений Azure. Дополнительные сведения см. в разделе "Уведомления служб коммуникации". Для сборки приложения также необходимо использовать Android Studio версии 3.6 или более поздней.
Для приложения Android для получения уведомлений от FCM требуется набор разрешений. AndroidManifest.xml
В файле добавьте следующий набор разрешений после тега или </application>
тега<manifest ...>
.
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
Добавление входящих уведомлений в мобильное приложение
Службы коммуникации Azure интегрируется с Сетка событий Azure и Центрами уведомлений Azure, чтобы добавлять push-уведомления в приложения в Azure.
Регистрация и отмена регистрации push-уведомлений центра уведомлений
Чтобы зарегистрировать push-уведомления, приложению необходимо вызвать registerPushNotification()
CallComposite
экземпляр с маркером регистрации устройства.
Чтобы получить маркер регистрации устройства, добавьте пакет SDK Firebase в экземпляр модуля build.gradle
приложения. Чтобы получать уведомления из Firebase, интегрируйте Центры уведомлений Azure, следуя инструкциям в уведомлениях служб коммуникации.
val deviceRegistrationToken = "" // From Firebase
callComposite.registerPushNotification(deviceRegistrationToken).whenComplete { _, throwable ->
if (throwable != null) {
// Handle error
}
}
Обработка push-уведомлений, полученных из сетки событий или концентратора уведомлений
Чтобы получать push-уведомления для входящих вызовов, вызовите handlePushNotification
CallComposite
экземпляр с полезными данными.
Чтобы получить полезные данные из FCM, начните с создания новой службы (file>New>Service),> которая расширяет FirebaseMessagingService
класс Sdk Firebase и переопределяет onMessageReceived
метод. Этот метод — это обработчик событий, который вызывается при доставке push-уведомления в приложение.
// On Firebase onMessageReceived
val pushNotification = CallCompositePushNotification(remoteMessage.data)
callComposite.handlePushNotification(pushNotification).whenComplete { _, throwable ->
if (throwable != null) {
// Handle error
}
}
Регистрация для уведомлений о входящих вызовах
Чтобы получать уведомления о входящих звонках после handlePushNotification
, подписываться на CallCompositeIncomingCallEvent
и CallCompositeIncomingCallCancelledEvent
. CallCompositeIncomingCallEvent
содержит входящий идентификатор вызова и сведения о вызывающем объекте. CallCompositeIncomingCallCancelledEvent
содержит callId и код отмены вызова в Службы коммуникации Azure.
private var incomingCallEvent: IncomingCallEvent? = null
private var incomingCallCancelledEvent: IncomingCallCancelledEvent? = null
class IncomingCallEvent : CallCompositeEventHandler<CallCompositeIncomingCallEvent> {
override fun handle(eventArgs: CallCompositeIncomingCallEvent?) {
// Display incoming call UI to accept/decline a call
// CallCompositeIncomingCallEvent contains call id and caller information
}
}
class IncomingCallCancelledEvent : CallCompositeEventHandler<CallCompositeIncomingCallCancelledEvent> {
override fun handle(eventArgs: CallCompositeIncomingCallCancelledEvent?) {
// Call-ended event when a call is declined or not accepted
}
}
// Event subscription
incomingCallEvent = IncomingCallEvent()
callComposite.addOnIncomingCallEventHandler(incomingCallEvent)
incomingCallCancelledEvent = IncomingCallCancelledEvent()
callComposite.addOnIncomingCallCancelledEventHandler(incomingCallEndEvent)
// Event unsubscribe
callComposite.removeOnIncomingCallEventHandler(incomingCallEvent)
callComposite.removeOnIncomingCallCancelledEventHandler(incomingCallEndEvent)
Обработка вызовов
Чтобы принять звонки, выполните звонок accept
. Чтобы отказаться от звонков, выполните звонок reject
.
// Accept call
callComposite.accept(applicationContext, incomingCallId, localOptions)
// Decline call
callComposite.reject(incomingCallId)
Наберите других участников
Чтобы начать вызовы с другими участниками, создайте CallCompositeStartCallOptions
необработанные идентификаторы участников из CommunicationIdentity
и launch
.
Дополнительные сведения см. в библиотеке пользовательского интерфейса iOS с открытым исходным кодом и образце кода приложения.
Настройка push-уведомлений
Мобильное push-уведомление — это всплывающее уведомление, которое вы получаете на мобильном устройстве. В этой статье рассматриваются push-уведомления по протоколу Интернета (VoIP).
В следующих разделах описывается регистрация push-уведомлений, работа с ними и их отмена. Прежде чем приступить к выполнению этих задач, выполните следующие предварительные требования.
- В Xcode перейдите к разделу Подписывание и возможности. Добавьте возможность, выбрав пункт + возможность, а затем — Push-уведомления.
- Добавьте еще одну возможность, выбрав пункт + возможность, а затем — Режимы фоновой работы.
- В разделе Режимы фоновой работы выберите флажки Голосовая связь через IP и Удаленные уведомления.
Добавление входящих уведомлений в мобильное приложение
Службы коммуникации Azure интегрируется с Сетка событий Azure и Центрами уведомлений Azure, чтобы добавлять push-уведомления в приложения в Azure.
Регистрация и отмена регистрации для push-уведомлений центра уведомлений
Чтобы зарегистрировать push-уведомления, приложению необходимо вызвать registerPushNotifications()
CallComposite
экземпляр с маркером регистрации устройства.
// to register
let deviceToken: Data = pushRegistry?.pushToken(for: PKPushType.voIP)
callComposite.registerPushNotifications(
deviceRegistrationToken: deviceToken) { result in
switch result {
case .success:
// success
case .failure(let error):
// failure
}
}
// to unregister
callComposite.unregisterPushNotification()
Обработка push-уведомлений, полученных из сетки событий или концентратора уведомлений
Чтобы получать push-уведомления о входящих вызовах, вызовите handlePushNotification()
для экземпляра CallComposite
, передав полезные данные словаря.
При использовании handlePushNotification()
и настройке параметров CallKit вы получите уведомление CallKit о принятии или отклонении вызовов.
// App is in the background
// push notification contains from/to communication identifiers and event type
let pushNotification = PushNotification(data: payload.dictionaryPayload)
let callKitOptions = CallKitOptions(...//CallKit options)
CallComposite.reportIncomingCall(pushNotification: pushNotification,
callKitOptions: callKitOptions) { result in
if case .success() = result {
DispatchQueue.global().async {
// You don't need to wait for a Communication Services token to handle the push because
// Communication Services common receives a callback function to get the token with refresh options
// create call composite and handle push notification
callComposite.handlePushNotification(pushNotification: pushNotification)
}
}
}
// App is in the foreground
let pushNotification = PushNotification(data: dictionaryPayload)
callComposite.handlePushNotification(pushNotification: pushNotification) { result in
switch result {
case .success:
// success
case .failure(let error):
// failure
}
}
Регистрация для уведомлений о входящих вызовах в дескрипторе push-уведомлений
Чтобы получать уведомления о входящих звонках после handlePushNotification
, подписываться на onIncomingCall
и onIncomingCallCancelled
. IncomingCall
содержит входящий идентификатор вызова и сведения о вызывающем объекте. IncomingCallCancelled
содержит callId и код отмены вызова в Службы коммуникации Azure.
let onIncomingCall: (IncomingCall) -> Void = { [] incomingCall in
// Incoming call id and caller info
}
let onIncomingCallEnded: (IncomingCallCancelled) -> Void = { [] incomingCallCancelled in
// Incoming call cancelled code with callId
}
callComposite.events.onIncomingCall = onIncomingCall
callComposite.events.onIncomingCallEnded = onIncomingCallEnded
Отключение внутренней принудительной отправки для входящего вызова
Для получения push-уведомлений только от EventGrid
и APNS
задано disableInternalPushForIncomingCall
значение true в CallCompositeOptions
. Если disableInternalPushForIncomingCall
задано значение true, событие push-уведомлений из библиотеки пользовательского интерфейса получено только при handlePushNotification
вызове. Этот параметр disableInternalPushForIncomingCall
помогает остановить получение уведомлений в CallComposite
режиме переднего плана. Этот параметр не управляет EventGrid
параметрами и NotificationHub
параметрами.
let options = CallCompositeOptions(disableInternalPushForIncomingCall: true)
Запуск составного при входном вызове, принятом при вызове пакета SDK CallKit
Пакет SDK для вызовов iOS Службы коммуникации Azure поддерживает интеграцию CallKit. Эту интеграцию можно включить в библиотеке пользовательского CallCompositeCallKitOption
интерфейса, настроив экземпляр. Дополнительные сведения см. в разделе "Интеграция с CallKit".
Подпишитесь, onIncomingCallAcceptedFromCallKit
если CallKit из вызывающего пакета SDK включен. При принятом вызове запустите callComposite
с идентификатором вызова.
let onIncomingCallAcceptedFromCallKit: (callId) -> Void = { [] callId in
// Incoming call accepted call id
}
callComposite.events.onIncomingCallAcceptedFromCallKit = onIncomingCallAcceptedFromCallKit
// launch composite with/without local options
// Note: as call is already accepted, setup screen will not be displayed
callComposite.launch(callIdAcceptedFromCallKit: callId)
Обработка вызовов с помощью CallComposite
Чтобы принять звонки, выполните звонок accept
. Чтобы отказаться от звонков, выполните звонок reject
.
// Accept call
callComposite.accept(incomingCallId,
... // CallKit and local options
)
// Decline call
callComposite.reject(incomingCallId)
Наберите других участников
Чтобы начать звонки с другими участниками, запустите callComposite
список участников CommunicationIdentifier
.
// [CommunicationIdentifier]
// use createCommunicationIdentifier(fromRawId: "raw id")
callComposite.launch(participants: <list of CommunicationIdentifier>,
localOptions: localOptions)