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


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

Библиотека пользовательского интерфейса предоставляет поддержку вне поля для выполнения вызовов один к одному с помощью идентификаторов участников Службы коммуникации 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.

    val participants: List<CommunicationIdentifier> // participants to dial
    callComposite.launch(context, participants, localOptions)

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

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

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

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

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

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