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

跳过应用程序中的设置屏幕

Azure 通信服务 UI 库提供加入呼叫的选项,而无需通过设置屏幕。 它使开发人员能够以允许用户直接加入呼叫的方式构建通信应用程序,而无需任何用户交互。 此功能还提供在用户加入呼叫之前配置相机和麦克风(开或关)的默认状态的功能。

本文介绍如何在应用程序中正确设置该功能。

先决条件

设置该功能

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

跳过设置屏幕的选项

CallCompositeLocalOptions 是一个选项包装器,用于设置 UI 库使用布尔值跳过设置屏幕的功能。 默认情况下,跳过设置屏幕的功能设置为 false。 必须将skipSetupScreen设置为布尔值true,以提供跳过设置屏幕的体验。

我们建议你以这样的方式构建应用程序:当用户尝试加入通话时,已被授予麦克风权限,这样就可以获得流畅的加入体验。

屏幕截图显示如何通过跳过 Android 的设置屏幕加入通话。

若要使用该功能,请将布尔值通过skipSetupScreen传递给CallCompositeLocalOptions,并将其注入callComposite.launch

import com.azure.android.communication.ui.calling.models.CallCompositeLocalOptions

val localOptions: CallCompositeLocalOptions = CallCompositeLocalOptions()
    .setSkipSetupScreen(true)

callComposite.launch(callLauncherActivity, remoteOptions, localOptions)

相机和麦克风配置的默认选项

默认情况下,设置屏幕为用户提供在加入呼叫之前配置相机和麦克风设置的选项。 在设置跳过设置屏幕以加入通话时,用户在加入通话之前无法使用该选项。

您可以在用户加入呼叫前,通过传递布尔值 cameraOn 来控制相机和麦克风的开启或关闭 microphoneOn。 如果用户分别授予每个相机和麦克风的权限,则控制相机和麦克风的默认状态的功能不会受到影响。

默认情况下,cameraOnmicrophoneOn都设置为false。 即使在 UI 库的默认加入通话体验中,也可以使用此功能。 在这种情况下,根据设置的配置,相机和麦克风在设置屏幕上处于打开或关闭状态。

若要设置相机和麦克风的默认状态,请传递cameraOn布尔值并将其microphoneOnCallCompositeLocalOptions注入callComposite.launch其中。

import com.azure.android.communication.ui.calling.models.CallCompositeLocalOptions

val localOptions: CallCompositeLocalOptions = CallCompositeLocalOptions()
    .setMicrophoneOn(true)
    .setCameraOn(true)

callComposite.launch(callLauncherActivity, remoteOptions, localOptions)

权限处理

建议让用户在被授予麦克风和相机权限的情况下加入通话,以便利用默认配置 API 的功能,跳过麦克风和相机的设置屏幕。 如果未处理用户的权限,UI 库会尝试为你处理这些权限。

用户必须启用麦克风权限才能加入呼叫。 如果用户在拒绝麦克风权限后尝试加入呼叫,UI 库会在连接阶段中删除呼叫,并引发代码 CallCompositeErrorCode.MICROPHONE_PERMISSION_NOT_GRANTED错误。

但是,即使用户拒绝相机权限,用户也可以加入呼叫。 当拒绝相机权限时,UI 库将禁用相机功能。 因此,相机的默认配置 API 不会影响调用体验。 授予相机权限后,用户可以享受相机的默认配置 API 的效果。

我们建议你处理麦克风权限。 如果用户在默认情况下启用相机加入呼叫,则建议你也处理相机权限。

网络错误

如果在通话或通话中断期间发生网络中断,UI 库将关闭并抛出错误代码 CallCompositeErrorCode.CALL_END_FAILED

如果用户没有网络连接,并且尝试在跳过设置屏幕后加入呼叫,UI 库会在调用连接阶段关闭,并引发代码 CallCompositeErrorCode.NETWORK_CONNECTION_NOT_AVAILABLE错误。 为避免此错误,建议将应用程序配置为在用户加入呼叫之前检查网络可用性。

若要接收错误事件,请调用 setOnErrorHandlerCallComposite

可能会将以下 error 值发送到错误处理程序:

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

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

跳过设置屏幕的选项

LocalOptions 是一个选项包装器,用于设置 UI 库使用布尔值跳过设置屏幕的功能。 默认情况下,跳过设置屏幕的功能设置为 false。 必须将skipSetupScreen设置为布尔值true,以提供跳过设置屏幕的体验。

我们建议你以这样的方式构建应用程序:当用户尝试加入通话时,已被授予麦克风权限,这样就可以获得流畅的加入体验。

屏幕截图显示如何通过跳过 iOS 的设置屏幕加入通话。

若要使用该功能,请将布尔值通过skipSetupScreen传递给LocalOptions,并将其注入callComposite.launch

let localOptions = LocalOptions(skipSetupScreen: true)

callComposite.launch(remoteOptions: remoteOptions, localOptions: localOptions)

相机和麦克风配置的默认选项

默认情况下,设置屏幕为用户提供在加入呼叫之前配置相机和麦克风设置的选项。 在设置跳过设置屏幕以加入通话时,用户在加入通话之前无法使用该选项。

您可以在用户加入呼叫前,通过传递布尔值 cameraOn 来控制相机和麦克风的开启或关闭 microphoneOn。 如果用户分别授予每个相机和麦克风的权限,则控制相机和麦克风的默认状态的功能不会受到影响。

默认情况下,cameraOnmicrophoneOn都设置为false。 即使在 UI 库的默认加入通话体验中,也可以使用此功能。 在这种情况下,根据设置的配置,相机和麦克风在设置屏幕上处于打开或关闭状态。

若要设置相机和麦克风的默认状态,请传递cameraOn布尔值并将其microphoneOnLocalOptions注入callComposite.launch其中。

let localOptions = LocalOptions(cameraOn: true, microphoneOn: true)

callComposite.launch(remoteOptions: remoteOptions, localOptions: localOptions)

权限处理

建议让用户在被授予麦克风和相机权限的情况下加入通话,以便利用默认配置 API 的功能,跳过麦克风和相机的设置屏幕。 如果未处理用户的权限,UI 库会尝试为你处理这些权限。

用户必须启用麦克风权限才能加入呼叫。 如果用户在拒绝麦克风权限后尝试加入呼叫,UI 库会在连接阶段中删除呼叫并引发 microphonePermissionNotGranted 错误。

但是,即使用户拒绝相机权限,用户也可以加入呼叫。 当拒绝相机权限时,UI 库将禁用相机功能。 因此,相机的默认配置 API 不会影响调用体验。 授予相机权限后,用户可以享受相机的默认配置 API 的效果。

我们建议你处理麦克风权限。 如果用户在默认情况下启用相机加入呼叫,则建议你也处理相机权限。

网络错误

如果在通话中发生网络中断或通话掉线,UI 库将关闭并引发 callEndFailed 错误。

如果用户没有网络连接并在跳过设置屏幕后尝试加入呼叫,UI 库会在呼叫连接阶段关闭并引发 networkConnectionNotAvailable 错误。 为避免此错误,建议将应用程序配置为在用户加入呼叫之前检查网络可用性。

你可以实现闭包来处理复合事件。 以下示例显示了组合失败的错误事件:

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

可能会将以下 error 值发送到错误处理程序:

  • microphonePermissionNotGranted
  • networkConnectionNotAvailable

后续步骤