Поделиться через


Настройка одно-к одному вызовов и push-уведомлений в библиотеке пользовательского интерфейса

Библиотека пользовательского интерфейса предоставляет поддержку вне поля для выполнения вызовов один к одному с помощью идентификаторов участников Службы коммуникации Azure. Для поддержки одного вызова библиотека пользовательского интерфейса предоставляет входящие уведомления о вызовах. Вы также можете использовать Службы коммуникации Azure в качестве источника событий Сетка событий Azure для вызовов.

Из этой статьи вы узнаете, как правильно вызывать один к одному с помощью библиотеки пользовательского интерфейса в приложении.

Важно!

Эта функция Службы коммуникации Azure сейчас доступна в предварительной версии.

Предварительные версии API и пакеты SDK предоставляются без соглашения об уровне обслуживания. Рекомендуется не использовать их для рабочих нагрузок. Некоторые функции могут не поддерживаться или могут иметь ограниченные возможности.

Дополнительные сведения см . в дополнительных условиях использования для предварительных версий Microsoft 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-уведомления для входящих вызовов, вызовите handlePushNotificationCallComposite экземпляр с полезными данными.

Чтобы получить полезные данные из 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и muteunmute. Создание CallComposite с CallCompositeTelecomIntegration.APPLICATION_IMPLEMENTED_TELECOM_MANAGER использованием TelecomManager в приложении.

callComposite.hold()
callComposite.resume()
callComposite.mute()
callComposite.unmute()

Дополнительные сведения см. в библиотеке пользовательского интерфейса iOS с открытым исходным кодом и образце кода приложения.

Настройка push-уведомлений

Мобильное push-уведомление — это всплывающее уведомление, которое вы получаете на мобильном устройстве. Для вызова в этой статье основное внимание уделяется отправке push-уведомлений через Протокол Интернета (VoIP).

В следующих разделах описывается регистрация push-уведомлений, работа с ними и их отмена. Прежде чем приступить к выполнению этих задач, выполните следующие предварительные требования.

  1. В Xcode перейдите к разделу Подписывание и возможности. Добавьте возможность, выбрав пункт + возможность, а затем — Push-уведомления.
  2. Добавьте еще одну возможность, выбрав пункт + возможность, а затем — Режимы фоновой работы.
  3. В разделе Режимы фоновой работы выберите флажки Голосовая связь через 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)

Следующие шаги