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


Краткое руководство. Начало работы с библиотекой пользовательского интерфейса

Начните работу с библиотекой пользовательского интерфейса Службы коммуникации Azure, чтобы быстро интегрировать взаимодействие с приложениями. В этом кратком руководстве описано, как интегрировать составные компоненты библиотеки пользовательского интерфейса в приложение и настроить интерфейс для пользователей приложения.

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

Просмотрите это видео для обзора:

Примечание.

Подробные документацию и краткие руководства по библиотеке веб-пользовательского интерфейса см. в статье "История библиотеки веб-интерфейса".

Необходимые компоненты

Вы можете получить доступ к следующим кратким руководствам.

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

Необходимые компоненты

Настройка проекта

Выполните следующие разделы, чтобы настроить проект быстрого запуска.

Создание нового проекта Android

В Android Studio создайте проект:

  1. В меню "Файл" выберите "Создать>проект".

  2. В новом проекте выберите шаблон проекта "Пустое действие ".

    Снимок экрана: диалоговое окно

  3. Выберите Далее.

  4. В поле "Пустое действие" назовите project UILibraryQuickStart. Для языка выберите Java/Kotlin. Для минимального пакета SDK выберите API 26: Android 8.0 (Oreo) или более поздней версии.

  5. Выберите Готово.

    Снимок экрана: новые параметры проекта и выбрана кнопка

Установка пакетов

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

Добавление зависимости

В файле UILibraryQuickStart/app/build.gradle (в папке приложения) добавьте следующую зависимость:

dependencies {
    ...
    implementation 'com.azure.android:azure-communication-ui-calling:+'
    ...
}

Добавление репозиториев Maven

Для интеграции библиотеки требуются два репозитория Maven:

  • MavenCentral
  • Репозиторий пакетов Azure

Чтобы добавить репозитории, выполните следующие действия.

  1. В скриптах проекта Gradle убедитесь, что добавлены следующие репозитории. Для Android Studio (2020.*) repositories находится в settings.gradleразделе dependencyResolutionManagement(Gradle version 6.8 or greater). Для более ранних версий Android Studio (4.*) repositories находится на уровне build.gradleпроекта в разделе allprojects{}.

    // dependencyResolutionManagement
    repositories {
        ...
        mavenCentral()
        maven {
            url "https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1"
        }
        ...
    }
    
  2. Синхронизируйте проект с файлами Gradle. Чтобы синхронизировать проект, в меню "Файл " выберите "Синхронизировать проект с файлами Gradle".

Добавление кнопки для Activity_main.xml

В файле макета app/src/main/res/layout/activity_main.xml добавьте следующий код, чтобы создать кнопку, чтобы запустить составной элемент:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/startButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Launch"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Инициализация составного

Чтобы инициализировать составной элемент, выполните следующие действия.

  1. Переход к MainActivity.

  2. Добавьте следующий код, чтобы инициализировать составные компоненты для вызова. Замените "GROUP_CALL_ID" идентификатор группы для вызова. Замените "DISPLAY_NAME" собственным именем. Замените "USER_ACCESS_TOKEN" маркером.

package com.example.uilibraryquickstart

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import com.azure.android.communication.common.CommunicationTokenCredential
import com.azure.android.communication.common.CommunicationTokenRefreshOptions
import com.azure.android.communication.ui.calling.CallComposite
import com.azure.android.communication.ui.calling.CallCompositeBuilder
import com.azure.android.communication.ui.calling.models.CallCompositeGroupCallLocator
import com.azure.android.communication.ui.calling.models.CallCompositeJoinLocator
import java.util.UUID

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        val startButton: Button = findViewById(R.id.startButton)
        startButton.setOnClickListener { l -> startCallComposite() }
    }

    private fun startCallComposite() {
        val communicationTokenRefreshOptions = CommunicationTokenRefreshOptions({ fetchToken() }, true)
        val communicationTokenCredential = CommunicationTokenCredential(communicationTokenRefreshOptions)

        val locator: CallCompositeJoinLocator = CallCompositeGroupCallLocator(UUID.fromString("GROUP_CALL_ID"))
        val callComposite: CallComposite = CallCompositeBuilder()
            .applicationContext(this.applicationContext)
            .credential(communicationTokenCredential)
            .displayName("DISPLAY_NAME").build()
        
        callComposite.launch(this, locator)
    }

    private fun fetchToken(): String? {
        return "USER_ACCESS_TOKEN"
    }
}

Выполнение кода

В Android Studio создайте и запустите приложение:

  1. Нажмите кнопку "Запустить".
  2. Примите разрешения, а затем выберите параметры устройства, микрофона и видео.
  3. Выберите Присоединиться к звонку.

Анимация GIF, показывающая пример запуска проекта на устройстве Android.

Объектная модель

Следующие классы и интерфейсы обрабатывают некоторые ключевые функции пользовательского интерфейса Службы коммуникации Azure Android:

Имя Описание
CallComposite Составной компонент, который отображает интерфейс вызова с коллекцией участников и элементами управления
CallCompositeBuilder Построитель, который строится с параметрами CallComposite
CallCompositeJoinMeetingLocator Переданный CallComposite запуск для запуска группового вызова
CallCompositeTeamsMeetingLinkLocator Передано для запуска для присоединения к собранию CallComposite Microsoft Teams
CallCompositeLocalizationOptions Внедрено как необязательное для CallCompositeBuilder задания языка составного

Функциональность библиотеки пользовательского интерфейса

Получите код для создания ключевых функций связи для приложения Android.

Настройка проверки подлинности

Чтобы настроить проверку подлинности, в startCallComposite функции инициализировать CommunicationTokenCredential экземпляр. Замените "USER_ACCESS_TOKEN" маркер доступа.

val callComposite: CallComposite = CallCompositeBuilder().build()

val communicationTokenRefreshOptions = CommunicationTokenRefreshOptions(this::fetchToken, true)

val communicationTokenCredential = CommunicationTokenCredential(communicationTokenRefreshOptions)

Создание CallComposite

Чтобы создать CallCompositestartCallComposite функцию, инициализировать CallCompositeBuilder экземпляр с помощью контекста приложения, учетных данных и отображаемого имени.

val callComposite: CallComposite = CallCompositeBuilder()
            .applicationContext(this.applicationContext)
            .credential(communicationTokenCredential)
            .displayName("DISPLAY_NAME").build()

Настройка группового вызова

Чтобы настроить групповой вызов, инициализировать .CallCompositeGroupCallLocator

val locator = CallCompositeGroupCallLocator(UUID.fromString("GROUP_CALL_ID"))

Подключение к собранию Teams

Вы можете присоединиться к собранию Teams с помощью двух механизмов:

  • URL-адрес собрания Teams или короткий URL-адрес собрания Teams
  • Идентификатор собрания Teams и секретный код

Ссылку на собрание Teams можно получить с помощью API Graph, который подробно описан в документации по Graph.

Пакет SDK вызовов Служб коммуникации принимает полную ссылку на собрание Teams. Эта ссылка возвращается как часть ресурса onlineMeeting, доступного в свойстве joinWebUrl. Кроме того, вы можете получить необходимые сведения о собрании, воспользовавшись URL-адресом для участия в собрании в самом приглашении на собрание Teams.

Присоединение через URL-адрес собрания Teams

Чтобы присоединиться к собранию Microsoft Teams, инициализировать CallCompositeTeamsMeetingLinkLocator.

val locator = CallCompositeTeamsMeetingLinkLocator("TEAMS_MEETING_LINK")

Присоединение с помощью идентификатора собрания Teams и секретного кода

Он CallCompositeTeamsMeetingLinkLocator находит собрание с помощью идентификатора собрания и секретного кода. Их можно найти в разделе сведений о присоединении к собранию Teams. Идентификатор собрания Teams длиной 12 символов и состоит из числовых цифр, сгруппированных в три (т. е. 000 000 000 000). Секретный код состоит из 6 символов алфавита (т. е. aBcDeF). Секретный код учитывает регистр.

val locator = CallCompositeTeamsMeetingIdLocator("TEAMS_MEETING_ID", "TEAMS_MEETING_PASSCODE")

Настройка звонка в номерах

Чтобы настроить вызов Службы коммуникации Azure комнат, инициализируйте CallCompositeRoomLocator номер с идентификатором комнаты. В то время как на экране CallComposite установки включает камеру и микрофон для всех участников с любой ролью комнаты. Текущая роль и возможности участника извлекаются из Службы коммуникации Azure после подключения.

Дополнительные сведения о комнатах см. в кратком руководстве по созданию комнат и управлению ими

val locator = CallCompositeRoomLocator("<ROOM_ID>")

Настройка push-уведомлений для исходящих вызовов и входящих вызовов 1:N

Библиотека пользовательского интерфейса поддерживает один к одному вызову VoIP для абонентов по идентификатору связи. Для получения входящего пользовательского интерфейса вызова также поддерживается регистрация для push-уведомлений. Дополнительные сведения об интеграции для платформы Android и iOS и использовании API см. в статье "Как сделать один к одному" и получать push-уведомления.

Запуск составного

Чтобы запустить пользовательский интерфейс вызова, в startCallComposite функции вызовите launch CallComposite экземпляр.

callComposite.launch(activityContext, locator)

Подписка на события ошибок CallComposite

Чтобы получить события ошибок, вызовите setOnErrorHandler с CallCompositeпомощью .

errorCode Следующие значения могут быть отправлены обработчику ошибок:

  • CallCompositeErrorCode.CALL_JOIN_FAILED
  • CallCompositeErrorCode.CALL_END_FAILED
  • CallCompositeErrorCode.TOKEN_EXPIRED
  • CallCompositeErrorCode.CAMERA_FAILURE
  • CallCompositeErrorCode.MICROPHONE_PERMISSION_NOT_GRANTED
  • CallCompositeErrorCode.NETWORK_CONNECTION_NOT_AVAILABLE

В следующем примере показано событие ошибки для неудачного составного события.

callComposite.addOnErrorEventHandler { callCompositeErrorEvent ->
    println(callCompositeErrorEvent.errorCode)
}

Применение конфигурации темы

Чтобы изменить основной цвет составного, создайте новый стиль темы в src/main/res/values/themes.xml и src/main/res/values-night/themes.xml с помощью AzureCommunicationUICalling.Theme родительской темы. Чтобы применить тему, внесите идентификатор темы в CallCompositeBuilder:

<style name="MyCompany.CallComposite" parent="AzureCommunicationUICalling.Theme">
    <item name="azure_communication_ui_calling_primary_color">#27AC22</item>
    <item name="azure_communication_ui_calling_primary_color_tint10">#5EC65A</item>
    <item name="azure_communication_ui_calling_primary_color_tint20">#A7E3A5</item>
    <item name="azure_communication_ui_calling_primary_color_tint30">#CEF0CD</item>
</style>
val callComposite: CallComposite =
        CallCompositeBuilder()
            .theme(R.style.MyCompany_CallComposite)
            .build()

Применение конфигурации локализации

Чтобы изменить язык составного, используйте CallCompositeSupportedLocale для создания CallCompositeLocalizationOptions с Localeпомощью . Чтобы применить язык, внесите конфигурацию локализации CallCompositeBuilder. По умолчанию все текстовые метки используют строки английского языка (en). Можно использовать CallCompositeLocalizationOptions для задания другого значения language. По умолчанию библиотека пользовательского интерфейса содержит набор значений language , которые можно использовать с компонентами пользовательского интерфейса. CallCompositeSupportedLocale предоставляет поддерживаемые языковые стандарты. Например, для доступа к языковому стандарту английского языка можно использовать CallCompositeSupportedLocale.EN. CallCompositeSupportedLocale.getSupportedLocales() предоставляет список объектов языкового стандарта для поддерживаемых языков.

import com.azure.android.communication.ui.calling.models.CallCompositeLocalizationOptions
import com.azure.android.communication.ui.calling.models.CallCompositeSupportedLocale

// CallCompositeSupportedLocale provides list of supported locale
val callComposite: CallComposite =
            CallCompositeBuilder().localization(
                CallCompositeLocalizationOptions(CallCompositeSupportedLocale.EN)
            ).build()

Подписка на измененное событие состояния вызова CallComposite

Чтобы получать события изменения состояния вызова, вызовите addOnCallStateChangedEventHandler с CallCompositeпомощью .

В следующем примере показано событие изменения состояния вызова.

callComposite.addOnCallStateChangedEventHandler { callStateChangedEvent ->
    println(callStateChangedEvent.code)
}

Закрытие CallComposite и подписка на отклоненное событие

Чтобы получить увольнение, вызовите addOnDismissedEventHandler с CallComposite. Чтобы закрыть CallComposite, вызовите dismiss.

В следующем примере показано событие изменения состояния вызова.

callComposite.addOnDismissedEventHandler { callCompositeDismissedEvent ->
    println(callCompositeDismissedEvent.errorCode)
}

callComposite.dismiss()

Дополнительные компоненты

Список вариантов использования содержит подробные сведения о дополнительных функциях.

Добавление уведомлений в мобильное приложение

Службы коммуникации Azure интегрируется с Сетка событий Azure и Центрами уведомлений Azure, чтобы добавлять push-уведомления в приложения в Azure. Push-уведомления можно использовать для отправки информации из приложения на мобильные устройства пользователей. Push-уведомление может отображать диалоговое окно, воспроизводить звук или отображать пользовательский интерфейс входящего вызова.

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

Необходимые компоненты

Настройка проекта

Выполните следующие разделы, чтобы настроить проект быстрого запуска.

Создание проекта Xcode

В Xcode создайте проект:

  1. В меню "Файл" выберите "Создать>проект".

  2. В разделе "Выбор шаблона" для нового проекта выберите платформу iOS и выберите шаблон приложения. В кратком руководстве используются раскадровки UIKit. Краткое руководство не создает тесты, поэтому можно снять флажок "Включить тесты ".

    Снимок экрана: диалоговое окно нового проекта Xcode с iOS и выбранным шаблоном приложения.

  3. В поле "Выбор параметров для нового проекта" введите UILibraryQuickStart. Для интерфейса выберите "Раскадровка".

    Снимок экрана: настройка новых параметров проекта в Xcode.

Установка пакета и зависимостей

  1. (Необязательно) Для MacBook с M1 установите и включите Rosetta в Xcode.

  2. В корневом каталоге проекта запустите файл pod init Podfile. При возникновении ошибки обновите CocoaPods до текущей версии.

  3. Добавьте следующий код в podfile. Замените UILibraryQuickStart именем проекта.

    platform :ios, '15.0'
    
    target 'UILibraryQuickStart' do
        use_frameworks!
        pod 'AzureCommunicationUICalling'
    end
    
  4. Запустите pod install --repo-update.

  5. В Xcode откройте созданный файл Xcworkspace*.

Запрос доступа к оборудованию устройства

Чтобы получить доступ к оборудованию устройства, включая микрофон и камеру, обновите список свойств вашего приложения. Задайте связанное значение строке, включенной в диалоговое окно, в системе используется для запроса доступа от пользователя.

  1. В дереве проекта щелкните правой кнопкой мыши запись Info.plist и выберите Open As>Source Code (Открыть как > Исходный код). Добавьте следующие строки в раздел верхнего уровня <dict> и сохраните файл.

    <key>NSCameraUsageDescription</key>
    <string></string>
    <key>NSMicrophoneUsageDescription</key>
    <string></string>
    

    Ниже приведен пример исходного Info.plist кода в файле Xcode:

    Снимок экрана: пример исходного кода списка сведений в файле Xcode.

  2. Чтобы убедиться, что запросы на разрешение устройства добавлены правильно, выберите "Открыть список свойств как>". Убедитесь, что список свойств сведений выглядит примерно так:

    Снимок экрана: конфиденциальность устройства камеры и микрофона в Xcode.

Отключение bitcode

В проекте Xcode в разделе "Параметры сборки" задайте для параметра Enable Bitcode значение No. Чтобы найти параметр, измените фильтр с "Базовый" на "Все" или используйте панель поиска.

Снимок экрана: параметр

Инициализация составного

Чтобы инициализировать составной элемент, выполните следующие действия.

  1. Переход к ViewController.

  2. Добавьте следующий код, чтобы инициализировать составные компоненты для вызова. Замените <GROUP_CALL_ID> идентификатор группы для вызова или UUID() на создание идентификатора группы для вызова. Замените <DISPLAY_NAME> собственным именем. (Ограничение <DISPLAY_NAME> длины строки для 256 символов.) Замените <USER_ACCESS_TOKEN> маркер доступа.

    import UIKit
    import AzureCommunicationCalling
    import AzureCommunicationUICalling
    
    class ViewController: UIViewController {
    
        private var callComposite: CallComposite?
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let button = UIButton(frame: CGRect(x: 100, y: 100, width: 200, height: 50))
            button.contentEdgeInsets = UIEdgeInsets(top: 10.0, left: 20.0, bottom: 10.0, right: 20.0)
            button.layer.cornerRadius = 10
            button.backgroundColor = .systemBlue
            button.setTitle("Start Experience", for: .normal)
            button.addTarget(self, action: #selector(startCallComposite), for: .touchUpInside)
    
            button.translatesAutoresizingMaskIntoConstraints = false
            self.view.addSubview(button)
            button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
            button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        }
    
        @objc private func startCallComposite() {
            let callCompositeOptions = CallCompositeOptions(displayName: "<DISPLAY_NAME>")
            let communicationTokenCredential = try! CommunicationTokenCredential(token: "<USER_ACCESS_TOKEN>")
    
            callComposite = CallComposite(credential: communicationTokenCredential, withOptions: callCompositeOptions)
    
            callComposite?.launch(locator: .groupCall(groupId: UUID(uuidString: "<GROUP_CALL_ID>")!))
        }
    }
    

Выполнение кода

Чтобы создать и запустить приложение в симуляторе iOS, выберите "Запуск продукта>" или используйте сочетание клавиш (".-R). Затем попробуйте выполнить вызов на симуляторе:

  1. Выберите "Начать работу".

  2. Примите разрешения на звук, а затем выберите параметры устройства, микрофона и видео.

  3. Нажмите кнопку "Пуск"

Анимация GIF, демонстрирующая окончательный внешний вид и ощущение приложения iOS для быстрого запуска.

Объектная модель

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

Имя Описание
CallComposite Компонент, который отображает интерфейс вызова с коллекцией участников и элементами управления
CallCompositeOptions Параметры для таких параметров, как темы и обработка событий
ThemeOptions Параметры настройки составной темы
ЛокализацияOptions Языковые параметры составного элемента

Функциональность библиотеки пользовательского интерфейса

Получите код для создания ключевых функций связи для приложения iOS.

Настройка проверки подлинности

Чтобы настроить проверку подлинности, в startCallComposite функции инициализировать CommunicationTokenCredential экземпляр. Замените <USER_ACCESS_TOKEN> маркер доступа.

let communicationTokenCredential = try! CommunicationTokenCredential(token: "<USER_ACCESS_TOKEN>")

Если у вас еще нет маркера доступа, создайте маркер доступа Службы коммуникации Azure.

Создание CallComposite

Чтобы создать CallCompositeфункцию, startCallComposite инициализируйте экземпляр с необязательным CallCompositeOptions <DISPLAY_NAME> и экземпляром CommunicationTokenCredential :

@objc private func startCallComposite() {
    let callCompositeOptions = CallCompositeOptions(displayName: "<DISPLAY_NAME>")
    let communicationTokenCredential = try! CommunicationTokenCredential(token: "<USER_ACCESS_TOKEN>")

    callComposite = CallComposite(credential: communicationTokenCredential, withOptions: callCompositeOptions)
}

Настройка группового вызова

Чтобы настроить групповой вызов, внутри startCallComposite функции инициализировать .groupCall указатель. Замените <GROUP_CALL_ID> идентификатор группы для вызова.

// let uuid = UUID() to create a new call
let uuid = UUID(uuidString: "<GROUP_CALL_ID>")!
let locator = .groupCall(groupId: uuid)

Дополнительные сведения об использовании идентификатора группы для звонков см. в разделе "Управление вызовами".

Подключение к собранию Teams

Вы можете присоединиться к собранию Teams с помощью двух механизмов:

  • URL-адрес собрания Teams или короткий URL-адрес собрания Teams
  • Идентификатор собрания Teams и секретный код

Ссылку на собрание Teams можно получить с помощью API Graph, который подробно описан в документации по Graph.

Пакет SDK вызовов Служб коммуникации принимает полную ссылку на собрание Teams. Эта ссылка возвращается как часть ресурса onlineMeeting, доступного в свойстве joinWebUrl. Кроме того, вы можете получить необходимые сведения о собрании, воспользовавшись URL-адресом для участия в собрании в самом приглашении на собрание Teams.

Присоединение через URL-адрес собрания Teams

Чтобы присоединиться к собранию Microsoft Teams, в startCallComposite функции инициализировать экземпляр указателя .teamsMeeting . Замените <TEAMS_MEETING_LINK> ссылку на собрание Teams для вызова. Замените <DISPLAY_NAME> собственным именем.

let locator = .teamsMeeting(teamsLink: "<TEAMS_MEETING_LINK>")

Присоединение с помощью идентификатора собрания Teams и секретного кода

Он teamMeetingId находит собрание с помощью идентификатора собрания и секретного кода. Их можно найти в разделе сведений о присоединении к собранию Teams. Идентификатор собрания Teams длиной 12 символов и состоит из числовых цифр, сгруппированных в три (т. е. 000 000 000 000). Секретный код состоит из 6 символов алфавита (т. е. aBcDeF). Секретный код учитывает регистр.

let locator = .teamsMeetingId(meetingId: "<TEAMS_MEETING_ID>", meetingPasscode:  "<TEAMS_MEETING_PASSCODE>" )

Настройка вызова комнаты

Чтобы настроить вызов Службы коммуникации Azure комнат, инициализируйте CallCompositeRoomLocator номер с идентификатором комнаты. В то время как на экране CallComposite установки включите камеру и микрофон для всех участников с любой ролью комнаты. Текущая роль и возможности участника извлекаются из Службы коммуникации Azure после подключения.

Дополнительные сведения о комнатах см. в кратком руководстве по созданию комнат и управлению ими .

let locator = .roomCall(roomId: "<ROOM_ID>")

Настройка push-уведомлений для исходящих вызовов и входящих вызовов 1:N

Библиотека пользовательского интерфейса поддерживает один к одному вызову VoIP для абонентов по идентификатору связи. Для получения входящего пользовательского интерфейса вызова также поддерживается регистрация для push-уведомлений. Дополнительные сведения об интеграции для платформы Android и iOS и использовании API см. в статье "Как сделать один к одному" и получать push-уведомления.

Запуск составного

startCallComposite В функции вызовите launch CallComposite экземпляр:

callComposite?.launch(locator: locator)

Оформление подписки на события

Вы можете реализовать закрытия для действий над составными событиями. Следующие коды ошибок могут быть отправлены обработчику ошибок:

  • callJoin
  • callEnd
  • cameraFailure
  • tokenExpired
  • microphonePermissionNotGranted
  • networkConnectionNotAvailable

В следующем примере показано событие ошибки для неудачного составного события:

callComposite?.events.onError = { error in
    print("CallComposite failed with error:\(error)")
}

Применение параметров темы

Чтобы настроить взаимодействие в приложении, создайте настраиваемые параметры темы, реализующие ThemeOptions протокол. Включите экземпляр нового класса в CallCompositeOptions:

class CustomThemeOptions: ThemeOptions {
   var primaryColor: UIColor {
       return UIColor.red
   }
}
let callCompositeOptions = CallCompositeOptions(theme: CustomThemeOptions())

Дополнительные сведения о работе с темами см. в руководстве по теме.

Применение параметров локализации

Чтобы изменить язык в составном компоненте, создайте настраиваемые параметры локализации и включите их в CallCompositeOptions. По умолчанию все текстовые метки используют строки английского языка (SupportedLocale.en). Можно использовать LocalizationOptions для задания другого значения locale. По умолчанию библиотека пользовательского интерфейса содержит набор значений locale , которые можно использовать с компонентами пользовательского интерфейса. SupportedLocale.values предоставляет список всех поддерживаемых языков.

В следующем примере составной объект локализован на французский (fr):

// Option1: Use IntelliSense to get locales UI Library supports.
let localizationOptions = LocalizationOptions(locale: SupportedLocale.frFR)

// Option2: If UI Library doesn't support the locale you set, the Swift Locale struct defaults to English.
let localizationOptions = LocalizationOptions(locale: Locale(identifier: "fr-FR"))

let callCompositeOptions = CallCompositeOptions(localization: localizationOptions) 

Дополнительные сведения о локализации и списке поддерживаемых языков см. в руководстве по локализации.

Подписка на измененное событие состояния вызова CallComposite

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

В следующем примере показано событие изменения состояния вызова.

callComposite?.events.onCallStateChanged = { callStateEvent in
   print("CallComposite call state changed:\(callStateEvent.requestString)")
}

Закрытие CallComposite и подписка на отклоненное событие

Чтобы закрыть CallComposite, вызовите dismiss. Следующее событие увольнения будет отправлено при отключенном вызове:

callComposite?.events.onDismissed = { dismissed in
   print("CallComposite dismissed:\(dismissed.errorCode)")
}

callComposite.dismiss()

Дополнительные компоненты

Список вариантов использования содержит подробные сведения о дополнительных функциях.

Добавление уведомлений в мобильное приложение

Службы коммуникации Azure интегрируется с Сетка событий Azure и Центрами уведомлений Azure, чтобы добавлять push-уведомления в приложения в Azure. Push-уведомления можно использовать для отправки информации из приложения на мобильные устройства пользователей. Push-уведомление может отображать диалоговое окно, воспроизводить звук или отображать пользовательский интерфейс входящего вызова.

Очистка ресурсов

Если вы хотите отменить и удалить подписку на Службы коммуникации, можно удалить ресурс или группу ресурсов.

При удалении группы ресурсов также удаляются все связанные с ней ресурсы.

См. сведения об очистке ресурсов.