Настройка одно-к одному вызовов и push-уведомлений в библиотеке пользовательского интерфейса
Библиотека пользовательского интерфейса предоставляет поддержку вне поля для выполнения вызовов один к одному с помощью идентификаторов участников Службы коммуникации Azure. Для поддержки одного вызова библиотека пользовательского интерфейса предоставляет входящие уведомления о вызовах. Вы также можете использовать Службы коммуникации Azure в качестве источника событий Сетка событий Azure для вызовов.
Из этой статьи вы узнаете, как правильно вызывать один к одному с помощью библиотеки пользовательского интерфейса в приложении.
Важно!
Эта функция Службы коммуникации Azure сейчас доступна в предварительной версии.
Предварительные версии API и пакеты SDK предоставляются без соглашения об уровне обслуживания. Рекомендуется не использовать их для рабочих нагрузок. Некоторые функции могут не поддерживаться или могут иметь ограниченные возможности.
Дополнительные сведения см . в дополнительных условиях использования для предварительных версий Microsoft 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" />
Регистрация для получения push-уведомлений
Чтобы зарегистрировать push-уведомления, приложению необходимо вызвать registerPushNotification()
CallComposite
экземпляр с маркером регистрации устройства.
Чтобы получить маркер регистрации устройства, добавьте пакет SDK Firebase в экземпляр модуля build.gradle
приложения. Чтобы получать уведомления из Firebase, интегрируйте Центры уведомлений Azure, следуя инструкциям в уведомлениях служб коммуникации.
Чтобы избежать текущих ограничений, можно пропустить registerPushNotification
Сетка событий Azure для push-уведомлений. Дополнительные сведения см. в Подключение вызове собственных push-уведомлений с Сетка событий Azure.
val deviceRegistrationToken = "" // From Firebase
callComposite.registerPushNotification(
applicationContext,
CallCompositePushNotificationOptions(
CommunicationTokenCredential...,
deviceRegistrationToken,
displayName
)
)
Работа с push-уведомлениями
Чтобы получать push-уведомления для входящих вызовов, вызовите handlePushNotification
CallComposite
экземпляр с полезными данными.
Чтобы получить полезные данные из FCM, начните с создания новой службы (file>New>Service),> которая расширяет FirebaseMessagingService
класс Sdk Firebase и переопределяет onMessageReceived
метод. Этот метод — это обработчик событий, который вызывается при доставке push-уведомления в приложение.
// On Firebase onMessageReceived
val pushNotificationInfo = CallCompositePushNotificationInfo(remoteMessage.data)
// If pushNotificationInfo.eventType is an incoming call
val remoteOptions = CallCompositeRemoteOptions(
pushNotificationInfo,
communicationTokenCredential,
displayName
)
callComposite.handlePushNotification(
applicationContext,
remoteOptions
)
Регистрация для уведомлений о входящих вызовах
Чтобы получать уведомления о входящих звонках после handlePushNotification
, подписываться на IncomingCallEvent
и IncomingCallEndEvent
.
private var incomingCallEvent: IncomingCallEvent? = null
private var incomingCallEndEvent: IncomingCallEndEvent? = null
class IncomingCallEndEvent : CallCompositeEventHandler<CallCompositeIncomingCallEndEvent> {
override fun handle(eventArgs: CallCompositeIncomingCallEndEvent?) {
// Display incoming call UI to accept/decline a call
}
}
class IncomingCallEndEvent : CallCompositeEventHandler<CallCompositeIncomingCallEndEvent> {
override fun handle(eventArgs: CallCompositeIncomingCallEndEvent?) {
// Call-ended event when a call is declined or not accepted
}
}
// Event subscription
incomingCallEvent = IncomingCallEvent()
callComposite.addOnIncomingCallEventHandler(incomingCallEvent)
incomingCallEndEvent = IncomingCallEndEvent()
callComposite.addOnIncomingCallEndEventHandler(incomingCallEndEvent)
// Event unsubscribe
callComposite.removeOnIncomingCallEventHandler(incomingCallEvent)
callComposite.removeOnIncomingCallEndEventHandler(incomingCallEndEvent)
Обработка вызовов
Чтобы принять звонки, выполните звонок acceptIncomingCall
. Чтобы отказаться от звонков, выполните звонок declineIncomingCall
.
// Accept call
callComposite.acceptIncomingCall(applicationContext, localOptions)
// Decline call
callComposite.declineIncomingCall()
Наберите других участников
Чтобы начать вызовы с другими участниками, создайте CallCompositeStartCallOptions
необработанные идентификаторы участников из CommunicationIdentity
и launch
.
val participant = [] // Participant raw IDs
val startCallOption = CallCompositeStartCallOptions(participant)
val remoteOptions = CallCompositeRemoteOptions(startCallOption, communicationTokenCredential, displayName)
callComposite.launch(context, remoteOptions, localOptions)
Интеграция примеров TelecomManager
Чтобы интегрировать TelecomManager, используйте примеры, приведенные в библиотеке с открытым кодом. Используйте CallComposite
API для hold
, resume
и mute
unmute
. Создание CallComposite
с CallCompositeTelecomIntegration.APPLICATION_IMPLEMENTED_TELECOM_MANAGER
использованием TelecomManager
в приложении.
Дополнительные сведения см. в библиотеке пользовательского интерфейса iOS с открытым исходным кодом и образце кода приложения.
Настройка push-уведомлений
Мобильное push-уведомление — это всплывающее уведомление, которое вы получаете на мобильном устройстве. Для вызова в этой статье основное внимание уделяется отправке push-уведомлений через Протокол Интернета (VoIP).
В следующих разделах описывается регистрация push-уведомлений, работа с ними и их отмена. Прежде чем приступить к выполнению этих задач, выполните следующие предварительные требования.
- В Xcode перейдите к разделу Подписывание и возможности. Добавьте возможность, выбрав пункт + возможность, а затем — Push-уведомления.
- Добавьте еще одну возможность, выбрав пункт + возможность, а затем — Режимы фоновой работы.
- В разделе Режимы фоновой работы выберите флажки Голосовая связь через IP и Удаленные уведомления.
Регистрация для получения push-уведомлений
Чтобы зарегистрировать push-уведомления, приложению необходимо вызвать registerPushNotification()
CallComposite
экземпляр с маркером регистрации устройства.
Чтобы избежать текущих ограничений, можно пропустить registerPushNotification
Сетка событий Azure для push-уведомлений. Дополнительные сведения см. в Подключение вызове собственных push-уведомлений с Сетка событий Azure.
let deviceToken: Data = pushRegistry?.pushToken(for: PKPushType.voIP)
let displayName = "DISPLAY_NAME"
let notificationOptions = CallCompositePushNotificationOptions(
deviceToken: deviceToken,
credential: credential,
displayName: displayName,
callKitOptions: callKitOptions) // CallKit options
try await callComposite.registerPushNotification(notificationOptions: notificationOptions)
Работа с push-уведомлениями
Чтобы получать push-уведомления о входящих вызовах, вызовите handlePushNotification()
для экземпляра CallComposite
, передав полезные данные словаря.
При использовании handlePushNotification()
вы получите уведомление CallKit для принятия или отклонения звонков.
// App is in the background
let pushNotificationInfo = CallCompositePushNotificationInfo(pushNotificationInfo: dictionaryPayload)
let cxHandle = CXHandle(type: .generic, value: "\(pushNotificationInfo.callId)")
let cxProvider = CallCompositeCallKitOption.getDefaultCXProviderConfiguration()
let remoteInfo = CallCompositeCallKitRemoteInfo(displayName: pushNotificationInfo.fromDisplayName,
cxHandle: cxHandle)
let callKitOptions = CallCompositeCallKitOption(cxProvideConfig: cxProvider,
isCallHoldSupported: true,
remoteInfo: remoteInfo)
CallComposite.reportIncomingCall(callKitOptions: callKitOptions,
callNotification: pushNotificationInfo) { result in
if case .success() = result {
DispatchQueue.global().async {
// Handle push notification
// You don't need to wait for a Communication Services token to handle the push because
// Communication Services commonly receives a callback function to get the token
}
}
}
// App is in the foreground
let pushNotificationInfo = CallCompositePushNotificationInfo(pushNotificationInfo: dictionaryPayload)
let displayName = "display name"
let remoteOptions = RemoteOptions(for: pushNotificationInfo,
credential: credential,
displayName: displayName,
callKitOptions: callKitOptions)
try await callComposite.handlePushNotification(remoteOptions: remoteOptions)
Регистрация для уведомлений о входящих вызовах
Чтобы получать уведомления о входящих звонках после handlePushNotification
, подписываться на IncomingCallEvent
и IncomingCallEndEvent
.
let onIncomingCall: (CallCompositeIncomingCallInfo) -> Void = { [] _ in
// Incoming call
}
let onIncomingCallEnded: (CallCompositeIncomingCallEndedInfo) -> Void = { [] _ in
// Incoming call ended
}
callComposite.events.onIncomingCall = onIncomingCall
callComposite.events.onIncomingCallEnded = onIncomingCallEnded
Наберите других участников
Чтобы начать вызовы с другими участниками, создайте CallCompositeStartCallOptions
необработанные идентификаторы участников из CommunicationIdentity
и launch
.
let startCallOptions = CallCompositeStartCallOptions(participants: <list of participant IDs>)
let remoteOptions = RemoteOptions(for: startCallOptions,
credential: credential,
displayName: "DISPLAY_NAME",
callKitOptions: callKitOptions)
callComposite.launch(remoteOptions: remoteOptions,
localOptions: localOptions)