快速入門:開始使用 UI 程式庫

開始使用 Azure 通訊服務 UI 程式庫,快速將通訊體驗整合到您的應用程式中。 在本快速入門中,瞭解如何將 UI 程式庫複合整合到應用程式中,並為您的應用程式使用者設定體驗。

通訊服務 UI 程式庫會在您的應用程式中轉譯完整的通訊體驗。 它會負責連線到通話,並設定使用者在幕後參與通話。 身為開發人員,您必須擔心應用程式使用者體驗中您想要啟動通訊體驗的位置。 複合會引導使用者設定其裝置、加入通話並參與該呼叫,以及轉譯其他參與者。

檢視此影片以取得概觀:

注意

如需 Web UI 程式庫的詳細檔和快速入門,請流覽 Web UI 程式庫劇本

必要條件

您可以存取下列快速入門

在適用于 Android 的 開放原始碼 Azure 通訊服務 UI 程式庫中,取得本 快速入門 的 Android 應用程式範例。

必要條件

設定專案

完成下列各節以設定快速入門專案。

建立新的 Android 專案

在 Android Studio 中,建立新的專案:

  1. 在 [ 檔案] 功能表中,選取 [ 新增 > 專案]。

  2. [新增專案 ] 中,選取 [ 空白活動] 專案範本。

    Screenshot that shows the New Project dialog in Android Studio with Empty Activity selected.

  3. 選取 [下一步] 。

  4. [空白活動 ] 中,將專案 命名為 UILibraryQuickStart 。 針對語言,選取 [JAVA/Kotlin ]。 針對最低 SDK,選取 [API 21:Android 5.0 (Lollipop) 或更新版本]。

  5. 選取完成

    Screenshot that shows new project options and the Finish button selected.

安裝套件

完成下列各節以安裝必要的應用程式套件。

新增相依性

在您的應用層級 UILibraryQuickStart/app/build.gradle 檔案中(在應用程式資料夾中),新增下列相依性:

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

新增 Maven 存放庫

整合程式庫需要兩個 Maven 存放庫:

  • MavenCentral
  • Azure 套件存放庫

若要新增存放庫:

  1. 在您的專案 Gradle 腳本中,確定已新增下列存放庫。 針對 Android Studio (2020.*), repositories 位於 settings.gradledependencyResolutionManagement(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 com.azure.android.communication.ui.calling.models.CallCompositeRemoteOptions
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 remoteOptions = CallCompositeRemoteOptions(locator, communicationTokenCredential, "DISPLAY_NAME")

        val callComposite: CallComposite = CallCompositeBuilder().build()
        callComposite.launch(this, remoteOptions)
    }

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

執行程式碼

在 Android Studio 中,建置並啟動應用程式:

  1. 選取 [ 啟動 ]。
  2. 接受許可權,然後選取裝置、麥克風和視訊設定。
  3. 選取加入通話

GIF animation that shows an example of how the project runs on an Android device.

物件模型

下列類別和介面會處理 Azure 通訊服務 Android UI 的一些主要功能:

名稱 描述
CallComposite 使用參與者資源庫和控制項呈現通話體驗的複合元件
CallCompositeBuilder 使用選項建置的 CallComposite 產生器
CallCompositeJoinMeetingLocator CallComposite傳入啟動以啟動群組通話
CallCompositeTeamsMeetingLinkLocator 傳遞以 CallComposite 啟動以加入 Microsoft Teams 會議
CallCompositeLocalizationOptions 插入為選擇性的 , CallCompositeBuilder 以設定複合語言

UI 程式庫功能

取得程式碼,為您的 Android 應用程式建立重要的通訊功能。

建立 CallComposite

若要在 startCallComposite 函式內建立 CallComposite ,請 CallCompositeBuilder 初始化 實例和 CallComposite 實例。

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

設定驗證

若要設定驗證,請在 函式內 startCallComposite 初始化 CommunicationTokenCredential 實例。 將 取代 "USER_ACCESS_TOKEN" 為您的存取權杖。

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

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

val communicationTokenCredential = CommunicationTokenCredential(communicationTokenRefreshOptions)

設定群組通話

若要設定群組呼叫,請初始化 CallCompositeGroupCallLocator ,並將它 CallCompositeRemoteOptions 提供給 物件。

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

val remoteOptions = CallCompositeRemoteOptions(
    locator,
    communicationTokenCredential,            
    "DISPLAY_NAME",
)

設定 Teams 會議

若要設定 Microsoft Teams 會議,請初始化 CallCompositeTeamsMeetingLinkLocator ,並將它 CallCompositeRemoteOptions 提供給 物件。

val locator = CallCompositeTeamsMeetingLinkLocator("TEAMS_MEETING_LINK")

val remoteOptions = CallCompositeRemoteOptions(
    locator,
    communicationTokenCredential,            
    "DISPLAY_NAME",
)

設定會議室通話

重要

Azure 通訊服務這項功能目前處於預覽狀態。

預覽 API 和 SDK 在沒有服務等級協定的情況下提供。 我們建議您不要將它們用於生產工作負載。 某些功能可能不受支援,或可能具有限制的功能。

如需詳細資訊,請檢閱 Microsoft Azure 預覽版 的補充使用規定。

若要設定Azure 通訊服務會議室呼叫,請初始化 CallCompositeRoomLocator ,並將 它提供給 物件, CallCompositeRemoteOptions 並將 設定 CallCompositeParticipantRoleCallCompositeLocalOptions by setRoleHint()CallComposite 將會在連線到呼叫之前使用角色提示。 連線呼叫之後,會從Azure 通訊服務擷取實際的最新參與者角色。

如需會議室的詳細資訊,請參閱 會議室快速入門

val locator = CallCompositeRoomLocator("<ROOM_ID>")

val remoteOptions = CallCompositeRemoteOptions(
    locator,
    communicationTokenCredential,            
    "DISPLAY_NAME",
)

val localOptions = CallCompositeLocalOptions().setRoleHint(participantRole)

val callComposite = CallCompositeBuilder().build()
callComposite.launch(context, remoteOptions, localOptions)

啟動複合

若要啟動呼叫 UI,請在 函式內 startCallComposite 呼叫 launch 實例。 CallComposite

callComposite.launch(context, remoteOptions)

訂閱 CallComposite 錯誤事件

若要接收錯誤事件,請使用 CallComposite 呼叫 setOnErrorHandler

下列 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 來建立 CallCompositeLocalizationOptionsLocale 若要套用語言,請在 中 CallCompositeBuilder 插入當地語系化組態。 根據預設,所有文字標籤都會使用英文 ( en ) 字串。 您可以使用 CallCompositeLocalizationOptions 來設定 不同的值 language 。 根據預設,UI 程式庫包含一組 language 值,您可以搭配 UI 元件使用。 CallCompositeSupportedLocale 提供支援的地區設定。 例如,若要存取英文地區設定,您可以使用 CallCompositeSupportedLocale.ENCallCompositeSupportedLocale.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 撥號狀態已變更事件

若要接收撥號狀態變更事件,請使用 CallComposite 呼叫 addOnCallStateChangedEventHandler

下列範例顯示已變更撥號狀態的事件。

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

關閉 CallComposite 並訂閱已關閉的事件

若要接收關閉,請使用 CallComposite 呼叫 addOnDismissedEventHandler 。 若要關閉 CallComposite,請呼叫 dismiss

下列範例顯示已變更撥號狀態的事件。

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

callComposite.dismiss()

更多功能

使用案例 清單 包含更多功能的詳細資訊。

將通知新增至行動應用程式

Azure 通訊服務與 Azure 事件方格 Azure 通知中樞 整合,因此您可以將 推播通知 新增至 Azure 中的應用程式。 您可以使用推播通知,將應用程式的資訊傳送給使用者的行動裝置。 推播通知可以顯示對話方塊、播放音效或顯示來電 UI。

在適用于 iOS 的 開放原始碼 Azure 通訊服務 UI 程式庫中,取得本 快速入門 的範例 iOS 應用程式。

必要條件

設定專案

完成下列各節以設定快速入門專案。

建立新的 Xcode 專案

在 Xcode 中,建立新的專案:

  1. 在 [ 檔案] 功能表中,選取 [ 新增 > 專案]。

  2. [選擇新專案的 範本] 中 ,選取 iOS 平臺,然後選取 應用程式 應用程式範本。 快速入門會使用 UIKit 分鏡腳本。 快速入門不會建立測試,因此您可以清除 [ 包含測試 ] 核取方塊。

    Screenshot that shows the Xcode new project dialog, with iOS and the App template selected.

  3. [選擇新專案的 選項] 中,針對產品名稱輸入 UILibraryQuickStart 。 針對介面,選取 [分鏡腳本 ]。

    Screenshot that shows setting new project options in Xcode.

安裝套件和相依性

  1. (選擇性)針對具有 M1 的 MacBook,請在 Xcode 中安裝和啟用 Rosetta

  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 專案樹狀結構的專案,然後選取 [開啟為 > 原始程式碼]。 將下列幾行新增至最上層 <dict> 區段,然後儲存檔案。

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

    以下是 Xcode 檔案中原始程式碼的 Info.plist 範例:

    Screenshot that shows an example of the info plist source code in an Xcode file.

  2. 若要確認已正確新增裝置許可權要求,請選取 [ 開啟身分 > 屬性清單]。 檢查資訊屬性清單看起來與下列範例類似:

    Screenshot that shows the camera and microphone device privacy in Xcode.

關閉 Bitcode

在 Xcode 專案中的 [建置設定] 底 下,將 [ 啟用 Bitcode ] 選項設定為 [否 ]。 若要尋找設定,請將篩選準則從 [基本 ] 變更為 [全部 ],或使用搜尋列。

Screenshot that shows the Build Settings option to turn off Bitcode.

初始化複合

若要初始化複合:

  1. 移至 ViewController

  2. 新增下列程式碼,以初始化呼叫的複合元件。 將 取代為通話的群組識別碼,或 UUID() 取代 <GROUP_CALL_ID> 為 ,以產生通話的群組識別碼。 以您的名稱取代 <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()
    
            callComposite = CallComposite(withOptions: callCompositeOptions)
    
            let communicationTokenCredential = try! CommunicationTokenCredential(token: "<USER_ACCESS_TOKEN>")
    
            let remoteOptions = RemoteOptions(for: .groupCall(groupId: UUID(uuidString: "<GROUP_CALL_ID>")!),
                                              credential: communicationTokenCredential,
                                              displayName: "<DISPLAY_NAME>")
            callComposite?.launch(remoteOptions: remoteOptions)
        }
    }
    

執行程式碼

若要在 iOS 模擬器上建置並執行您的應用程式,請選取 [產品 > 執行 ] 或使用 [⌘-R] 鍵盤快速鍵。 然後,在模擬器上試用通話體驗:

  1. 選取 [ 開始體驗 ]。

  2. 接受音訊許可權,然後選取裝置、麥克風和視訊設定。

  3. 選取 [ 開始通話 ]。

GIF animation that demonstrates the final look and feel of the quickstart iOS app.

物件模型

下列類別和介面會處理Azure 通訊服務 UI 用戶端程式庫的一些主要功能:

名稱 描述
CallComposite 轉譯具有參與者資源庫和控制項之通話體驗的元件
CallCompositeOptions 設定主題和事件處理等選項
RemoteOptions 傳送至Azure 通訊服務的遠端選項,以加入 群組通話 Teams 會議
ThemeOptions 複合主題的自訂選項
LocalizationOptions 複合語言選項

UI 程式庫功能

取得程式碼,為您的 iOS 應用程式建立重要的通訊功能。

建立 CallComposite

若要在 startCallComposite 函式 CallCompositeOptions 內建立 CallComposite 實例和 CallComposite 實例:

@objc private func startCallComposite() {
    let callCompositeOptions = CallCompositeOptions()

    callComposite = CallComposite(withOptions: callCompositeOptions)
}

設定驗證

若要設定驗證,請在 函式內 startCallComposite 初始化 CommunicationTokenCredential 實例。 將 取代 <USER_ACCESS_TOKEN> 為您的存取權杖。

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

如果您還沒有存取權杖, 請建立Azure 通訊服務存取權杖

設定群組通話

若要設定群組呼叫,請在 函式內 startCallComposite 初始化 RemoteOptions 定位器的 .groupCall 實例。 將 取代 <GROUP_CALL_ID> 為您通話的群組識別碼。 以您的名稱取代 <DISPLAY_NAME>

// let uuid = UUID() to create a new call
let uuid = UUID(uuidString: "<GROUP_CALL_ID>")!
let remoteOptions = RemoteOptions(for: .groupCall(groupId: uuid),
                                  credential: communicationTokenCredential,
                                  displayName: "<DISPLAY_NAME>")

如需使用群組識別碼進行通話的詳細資訊,請參閱 管理通話

設定 Teams 會議

若要設定 Microsoft Teams 會議,請在 函式內 startCallComposite 初始化 RemoteOptions 定位器的實例 .teamsMeeting 。 將 取代 <TEAMS_MEETING_LINK> 為您通話的 Teams 會議連結。 以您的名稱取代 <DISPLAY_NAME>

let remoteOptions = RemoteOptions(for: .teamsMeeting(teamsLink: "<TEAMS_MEETING_LINK>"),
                                  credential: communicationTokenCredential,
                                  displayName: "<DISPLAY_NAME>")

您可以使用 Graph API 取得 Microsoft Teams 會議連結。 此程式詳述于 Graph 檔中

通訊服務通話 SDK 接受完整的 Microsoft Teams 會議連結。 此連結會以 joinWebUrl 屬性 下的 資源一部分 onlineMeeting 傳回。 您也可以從 Teams 會議邀請本身的 [加入會議 URL] 取得所需的會議 資訊。

設定會議室通話

重要

Azure 通訊服務這項功能目前處於預覽狀態。

預覽 API 和 SDK 在沒有服務等級協定的情況下提供。 我們建議您不要將它們用於生產工作負載。 某些功能可能不受支援,或可能具有限制的功能。

如需詳細資訊,請檢閱 Microsoft Azure 預覽版 的補充使用規定。

若要設定Azure 通訊服務會議室呼叫,請在 函式內 startCallComposite 初始化 RemoteOptions 定位器的實例 .roomCall 。 將 取代 <ROOM_ID> 為您通話的會議室識別碼。 使用 LocalOptionsroleHint 初始化 實例。

以您的名稱取代 <DISPLAY_NAME>

CallComposite 將會在連線到呼叫之前使用角色提示。 連線呼叫之後,會從Azure 通訊服務擷取實際的最新參與者角色。

如需會議室的詳細資訊,請參閱 會議室快速入門

let remoteOptions = RemoteOptions(for: .roomCall(roomId: "<ROOM_ID>"),
                                  credential: communicationTokenCredential,
                                  displayName: "<DISPLAY_NAME>")
let localOptions = LocalOptions(roleHint: participantRole)

let callComposite = CallComposite()
callComposite.launch(remoteOptions: remoteOptions, localOptions: localOptions)

啟動複合

在 函 startCallComposite 式內,呼叫 launch 實例上的 CallComposite

callComposite?.launch(remoteOptions: remoteOptions)

訂閱事件

您可以實作關閉以針對複合事件採取行動。 下列 errorCodes 可能會傳送至錯誤處理常式:

  • 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 。 根據預設,UI 程式庫包含一組 locale 值,您可以搭配 UI 元件使用。 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 通知中樞 整合,因此您可以將 推播通知 新增至 Azure 中的應用程式。 您可以使用推播通知,將應用程式的資訊傳送給使用者的行動裝置。 推播通知可以顯示對話方塊、播放音效或顯示來電 UI。

清除資源

如果您想要清除並移除通訊服務訂用帳戶,您可以刪除資源或資源群組。

刪除資源群組也會刪除與其相關聯的任何其他資源。

深入瞭解清除 資源