你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在应用程序的 UI 库中注入自定义数据模型

Azure 通信服务使用与标识无关的模型,在其中开发人员可以自带标识。 开发人员可以获取其数据模型并将其链接到 Azure 通信服务标识。 用户的数据模型最有可能包括以下信息:显示名称、个人资料图片或虚拟形象和其他详细信息。 开发人员使用此信息来构建其应用程序和平台。

UI 库让你可以轻松地将用户数据模型注入到 UI 组件。 当你呈现 UI 组件时,这些组件会向用户显示提供的信息,而不是来自 Azure 通信服务的常规信息。

先决条件

设置注入

有关 Web UI 库的详细文档和快速入门,请参阅 Web UI 库 Storybook

有关详细信息,请参阅 Web UI 库中的自定义用户数据模型

有关详细信息,请参阅开源 Android UI 库示例应用程序代码

本地参与者视图自定义

现在,UI 库使开发人员能够提供自定义的关于参与者信息的体验。 启动时,你可以选择性地注入本地参与者数据。 此本地数据不与服务器共享,可用于自定义本地用户的显示名称和虚拟形象。

本地选项

CallCompositeLocalOptions 是可以使用 CallCompositeParticipantViewDataCallCompositeSetupScreenViewData 的数据模型。 它表示本地参与者。

默认情况下,对于远程参与者,UI 库会显示 RemoteOptions 中注入的 displayName 信息。 此信息将发送到 Azure 通信服务后端服务器。 如果注入了 CallCompositeParticipantViewData,则参与者 displayNameavatar 的信息将在本地的所有虚拟形象组件中显示。

同样,对于 CallCompositeSetupScreenViewDataCallCompositeSetupScreenViewData 中的 titlesubtitle 将分别覆盖会前屏幕中导航栏的标题和副标题。 默认情况下,UI 库会显示“设置”作为标题,但不显示任何内容作为副标题

本地参与者视图数据

CallCompositeParticipantViewData 是用于设置虚拟形象控件的 displayNameavatarBitmapscaleType 的类。 此类将传递给 CallCompositeLocalOptions 以自定义本地参与者视图信息。 此类保存在 CallCompositeLocalOptions 对象中,该对象表示在发起通话的设备上本地使用的选项。

displayName 实例与通过 CallCompositeRemoteOptions 传递的 displayName 信息不同:

  • displayNameCallCompositeParticipantViewData 实例仅在本地用作重写。
  • displayNameCallCompositeRemoteOptions 实例传递给服务器并与其他参与者共享。

如果你不提供 displayNameCallCompositeParticipantViewData 实例,应用程序将使用 displayNameCallCompositeRemoteOptions 实例。

设置屏幕视图数据

CallCompositeSetupScreenViewData 是一个对象,用于设置通话设置屏幕上的导航栏的 titlesubtitle。 如果未定义 subtitle,则会隐藏副标题。 此处,title 是用于设置 subtitle 的必需项,但在设置 title 时,subtitle 是可选的。 此类存储在本地,其信息不会发送到服务器。

用法

若要使用 CallCompositeLocalOptions,请传递 CallCompositeParticipantViewData 和/或 CallCompositeSetupScreenViewData 的实例,并将 CallCompositeLocalOptions 注入到 callComposite.launch

val participantViewData: CallCompositeParticipantViewData = CallCompositeParticipantViewData()
    .setAvatarBitmap((Bitmap) avatarBitmap)
    .setScaleType((ImageView.ScaleType) scaleType)
    .setDisplayName((String) displayName)

val setupScreenViewData: CallCompositeSetupScreenViewData = CallCompositeSetupScreenViewData()
    .setTitle((String) title)
    .setSubtitle((String) subTitle)

val localOptions: CallCompositeLocalOptions = CallCompositeLocalOptions()
    .setParticipantViewData(participantViewData)
    .setSetupScreenViewData(setupScreenViewData)

callComposite.launch(callLauncherActivity, remoteOptions, localOptions)
设置视图 通话体验视图
Android 数据自定义模型注入的屏幕截图。 带有名称的 Android 数据自定义模型注入的屏幕截图。

远程参与者视图自定义

在某些情况下,你可能希望为远程参与者提供本地重写,以允许自定义头像和标题。

此过程类似于本地参与者过程,但在参与者加入通话时设置数据。 开发人员需要在远程参与者加入通话时添加一个侦听器,然后调用一个方法来为这些远程用户设置 CallCompositeParticipantViewData

用法

若要设置远程参与者的视图数据,请设置 setOnRemoteParticipantJoinedHandler。 在远程参与者加入时,使用 callCompositesetRemoteParticipantViewData 为远程参与者注入视图数据。 参与者标识符 CommunicationIdentifier 用于唯一标识远程参与者。

调用 setRemoteParticipantViewData 会返回 CallCompositeSetParticipantViewDataResult 的结果,该结果包含以下值:

  • CallCompositeSetParticipantViewDataResult.SUCCESS
  • CallCompositeSetParticipantViewDataResult.PARTICIPANT_NOT_IN_CALL
callComposite.addOnRemoteParticipantJoinedEventHandler { remoteParticipantJoinedEvent -> 
                remoteParticipantJoinedEvent.identifiers.forEach { identifier ->
                    // get displayName, bitmap for identifier
                    callComposite.setRemoteParticipantViewData(identifier,
                        CallCompositeParticipantViewData().setDisplayName("displayName")) // setAvatarBitmap for bitmap
                }
            }
参与者列表
Android 远程参与者视图数据注入的屏幕截图。

有关详细信息,请参阅开源 iOS UI 库示例应用程序代码

本地参与者视图数据注入

UI 库使开发人员能够提供自定义的体验。 在启动时,你可以注入可选的本地数据选项。 此对象可以包含 UI 图像(表示要呈现的虚拟形象)和根据需要显示的显示名称。 这些信息都不会发送到 Azure 通信服务。 它们保存在 UI 库本地。

本地选项

LocalOptions 是由 ParticipantViewDataSetupScreenViewData 组成的数据模型。

对于 ParticipantViewData,UI 库默认会显示 RemoteOptions 中注入的 displayName 信息。 此信息将发送到 Azure 通信服务后端服务器。 如果注入了 ParticipantViewData,则参与者 displayNameavatar 的信息将在所有虚拟形象组件中显示。

对于 SetupScreenViewData,UI 库默认会显示“设置”作为标题,但不显示任何内容作为副标题SetupScreenViewData 中的 titlesubtitle 信息将分别覆盖会前屏幕中导航栏的标题和副标题。

本地参与者视图数据

ParticipantViewData 是一个对象,用于设置虚拟形象组件的 displayNameavatar UI 图像。 此类将注入到 UI 库以设置虚拟形象信息。 它存储在本地,永远不会发送到服务器。

设置屏幕视图数据

SetupScreenViewData 是一个对象,用于设置会前屏幕(也称为“设置”视图)上的导航栏的 titlesubtitle。 如果定义了 SetupScreenViewData,则还必须提供 title,因为它是必需的字段。 但是,subtitle 不是必需的。

如果未定义 subtitle,则会将它隐藏。 此类存储在本地,其信息不会发送到服务器。

用法

// LocalOptions (data not sent to the server)
let localParticipantViewData = ParticipantViewData(avatar: <Some UIImage>,
                                                   displayName: "<DISPLAY_NAME>")
let localSetupScreenViewData = SetupScreenViewData(title: "<NAV_TITLE>",
                                                               subtitle: "<NAV_SUBTITLE>")
let localOptions = LocalOptions(participantViewData: localParticipantViewData, 
                                setupScreenViewData: localSetupScreenViewData)
// RemoteOptions (data sent to the server)
let remoteOptions = RemoteOptions(for: .groupCall(groupId: UUID()),
                                  credential: <Some CommunicationTokenCredential>,
                                  displayName: "<DISPLAY_NAME>")
// Launch
callComposite.launch(remoteOptions: remoteOptions, localOptions: localOptions)
设置视图 通话体验视图
iOS 数据自定义模型注入的屏幕截图。 带有名称的 iOS 数据自定义模型注入的屏幕截图。

远程参与者视图数据注入

远程参与者加入时,你可以为远程参与者注入视图数据。 此参与者视图数据可以包含 UI 图像(表示要呈现的虚拟形象)和根据需要显示的显示名称。 这些信息都不会发送到 Azure 通信服务。 它们保存在 UI 库本地。

用法

若要为远程参与者设置视图数据,请为事件处理程序设置 onRemoteParticipantJoined 完成。 在远程参与者加入时,使用 CallCompositeset(remoteParticipantViewData:, for:, completionHandler:) 为远程参与者注入视图数据。 参与者标识符 CommunicationIdentifier 用于唯一标识远程参与者。 可以使用可选的完成处理程序来返回设置操作的结果。

callComposite.events.onRemoteParticipantJoined = { [weak callComposite] identifiers in
  for identifier in identifiers {
    // map identifier to displayName
    let participantViewData = ParticipantViewData(displayName: "<DISPLAY_NAME>")
    callComposite?.set(remoteParticipantViewData: participantViewData,
                       for: identifier) { result in
      switch result {
      case .success:
        print("Set participant view data succeeded")
      case .failure(let error):
        print("Set participant view data failed with \(error)")
      }
    }
  }
}
参与者列表
iOS 远程参与者视图数据注入的屏幕截图。

后续步骤