使用SDK和您自己的UI

虽然Talk SDK包含内置UI,但如果您愿意,您可以构建和使用自己的UI。SDK还包括封装其所有功能的API。

本节介绍如何在您自己的UI中使用SDK API。要自定义SDK内置UI的外观,请参见自定义外观

您需要创建一个SDK实例来访问API。看到创建SDK实例在《开始》中。

主题:

开始呼叫与您自己的权限和呼叫屏幕

您可以构建自己的权限和调用屏幕,然后使用SDK的API向UI添加功能。

每个Talk调用都有以下设置流程:

  1. 检查代理是否可用
  2. 检查录制音频的权限
  3. 开始通话

使用SDK的API来执行设置流程中的每个步骤。

此外,您的权限屏幕应该检查访问设备麦克风的权限,并获得用户的权限(如果尚未授予)。要了解更多信息,请参见权限概述在Android文档中。

检查代理是否可用

确定Talk数字线路是否有座席可用。建议在没有座席时隐藏呼叫按钮,以提高用户体验。

使用API的lineStatus方法,以确定是否有任何代理可用于通话数字线路。详细信息请参见检查代理的可用性在《开始》中。

检查录制音频的权限

在确定座席可用后,在开始呼叫之前,必须确保用户已授予录制音频的权限。

Talk SDK需要以下内容危险的许可

  • android.permission.RECORD_AUDIO

要验证是否授予了权限,请使用APIarePermissionsGranted方法。

Java

             
boolean permissionsgranting = talk. arepermissionsgranting ();如果(permissionsGranted) {//开始通话}其他{//请求权限

芬兰湾的科特林

             
val permissionsgranting = talk. arepermissionsgranting ()if (permissionsgranting) {//开始调用}其他{//请求权限

如果被授予权限,则可以发起呼叫。看到开始通话.否则,您的应用程序必须从用户获得权限。要了解更多信息,请参见申请应用权限在Android文档中。

开始通话

一旦您确定一个代理可用,并且您的应用程序具有所需的权限,您就可以开始对代理的调用。

  1. 创建CallData

    Java

                   
    CallData CallData = CallDataBuilder。创建("您的数字线路名称").recordingConsentAnswer(空).build ();

    芬兰湾的科特林

                   
    val callData = callData (digitalLine = "您的数字线路名称",recordingConsentAnswer = null)

    CallDataBuilder.create方法需要一个数字行昵称。RecordingConsentAnswer是可选属性。

  2. 创建调用。

    Java

                   
    TalkListenableFuture job = TalkJavaCompat。createCall(说话,callData);的工作。addListener(new TalkJavaCompatListener() {@OverrideonSuccess(@NotNull TalkCallResult result) {handleTalkCallResult(结果);@OverrideonError(@NotNull Throwable) {});

    芬兰湾的科特林

                   
    yourCoroutineScope。发射{val callResult = talk.createCall(callData)handleTalkCallResult (callResult)
  3. 处理结果。

    talk.createCall ()方法返回TalkCallResult,它是一个Kotlin密封类,包含以下状态之一:

    • TalkCallResult.Failure.DigitalLineNotFound—帐号中不存在数字线路昵称
    • TalkCallResult.Failure.Unknown—未知错误导致创建呼叫失败
    • TalkCallResult。成功—创建呼叫成功,并建立座席呼叫。看到使用自己的来电界面管理来电

    如果TalkCallResultTalkCallResult.Failure.DigitalLineNotFoundTalkCallResult.Failure.Unknown,则调用未建立,您应该将错误通知用户。

使用自己的来电界面管理来电

开始呼叫成功后(当TalkCallResultTalkCallResult。成功),您可以执行以下操作来管理呼叫:

监听呼叫状态变化

监听呼叫状态的变化statusChanges的属性TalkCallResult。成功.每次状态改变时调用它,可以是以下值之一:

  • CALL_CONNECTED—通话已接通
  • CALL_DISCONNECTED—呼叫被用户或座席中断
  • CALL_DISCONNECTED_CONNECTION_ERROR—由于连接问题导致呼叫中断
  • CALL_FAILED—呼叫连接失败
  • CALL_RECONNECTING-呼叫未连接,正在重新连接
  • CALL_RECONNECTED—呼叫断开后重新连接

例子:

Java

             
if (TalkCallResult.Success的结果实例){TalkCallResult。成功success = (TalkCallResult.Success) result;success.getStatusChanges()。观察(this, new Observer() {@OverrideonChanged(CallStatus CallStatus) {//使用callStatus做一些事情});

芬兰湾的科特林

             
if(结果是TalkCallResult.Success) {yourCoroutineScope。发射{result.statusChanges.collect {callStatus -> . result.statusChanges.collect//使用callStatus做一些事情

静音或取消静音

您可以设置来电静音或取消静音。

命令查看当前静音状态talkCall.isMuted ()方法。你可以用。改变静音状态talkCall.mute(布尔)

Java

             
boolean mute = success.getTalkCall(). ismute ();success.getTalkCall()。mute(温和);

芬兰湾的科特林

             
val静音= result. talkcall . ismute ()result.talkCall.mute(!低调)

更改呼叫的音频输出

您可以将通话的音频输出从耳机更改为设备的内置扬声器。默认情况下,检测到音频时通过无线蓝牙耳机播放,没有蓝牙耳机时通过电话耳机播放。

要更改音频输出,请使用talkCall.changeAudioOutput (AudioOutput)

AudioOutput枚举,可以是以下类型之一:

  • AudioOutput。演讲者-音频通过内置的设备扬声器路由
  • AudioOutput。耳机—音频通过设备耳机路由
  • AudioOutput。蓝牙—音频通过外接蓝牙耳机传输

在您的电话上设置所需的音频输出之前,您需要订阅支持的音频设备的更新。并不是所有的AudioOutput类型在所有设备上(设备必须支持蓝牙)或在所有场景下(蓝牙需要打开并且设备必须激活)都是支持的。

为了最大限度地减少您所需的工作,Talk SDK公开了支持的音频设备流。应用程序需要侦听此流,并根据接收到的值正确更新UI选项。

TalkCallResult。成功包含属性availableAudioDevices,这是其中一种类型流程<列表< AudioDevice > >Kotlin或者< AudioDevice LiveData <列表> >对于Java。

AudioDevice描述可用的音频设备。除了AudioOutput,它可能包含特定于给定类型的其他属性。所有的后代AudioOutput包含一个布尔标志,指示它是否是当前活动的音频设备。

AudioDevice可以是以下项目之一:

  • AudioDevice。演讲者,具有以下属性:
    • isActive:扬声器是否主动播放音频
    • audioOutput:表示该状态的Enum。用于更改活动音频输出
  • AudioDevice。耳机,具有以下属性:
    • isActive:扬声器是否主动播放音频
    • audioOutput:表示该状态的Enum。用于更改活动音频输出
  • AudioDevice。BluetoothHeadset,具有以下属性:
    • 设备名称:蓝牙设备的名称,如果无法检索到则为空
    • isActive:扬声器是否主动播放音频
    • audioOutput:表示该状态的Enum。用于更改活动音频输出

要检索音频输出的当前状态,您可以使用以下方法之一:

  1. 使用talkCall.getAudioOutput ()方法,该方法返回调用该方法时当前使用的音频输出。
  2. 使用talkCallResult.availableAudioDevices流,该流在活动时随时更新AudioDevice发生变化或蓝牙设备变为其他蓝牙设备。

亚博Zendesk建议使用第二种方法,因为它总是提供最新的数据。只有在需要同步数据时才使用第一种方法。

示例-监听可用的音频设备

Java

             
success.getAvailableAudioDevices()。观察(this, new Observer>() {@OverrideonChanged(List audioDevices) {AudioDevice activeAudioDevice = null;for (AudioDevice AudioDevice: audioDevices) {if (audioDevice.isActive()) {activeAudioDevice = audioDevice;打破;//显示可用的音频设备});

芬兰湾的科特林

             
yourCoroutineScope。发射{success.availableAudioDevices.collect {availableAudioDevices -> . properties {availableAudioDevices -> . propertiesval activeDevice =设备个数。找到{它。isActive}//显示可用的音频设备

示例-更改音频输出

Java

             
success.getTalkCall () .changeAudioOutput (AudioOutput.SPEAKERS);

芬兰湾的科特林

             
result.talkCall.changeAudioOutput (AudioOutput.SPEAKERS)

断开通话

若要断开通话,请使用talkCall.disconnect ()

Java

             
.disconnect success.getTalkCall () ();

芬兰湾的科特林

             
result.talkCall.disconnect ()

打电话后不久断开(),statusChanges属性将指定CallStatus。断开连接

只使用您自己的呼叫界面

在开始通话之前,用户必须被授予录制音频的权限。您可以使用SDK的内置权限屏幕来处理权限,并使用您自己的呼叫屏幕来启动和管理呼叫。

若要仅使用您自己的呼叫屏幕,请传递一个意图用它来talk.startCallSetupFlow而不是一个空值。你的意图必然导致活动

在检查权限并完成同意屏幕之后,SDK将运行意图而不是内置的呼叫屏幕。

  1. 创建活动在你的应用程序中注册AndroidManifest.xml

    Java

                   
    CustomCallScreenJavaActivity扩展了AppCompatActivity {@OverrideonCreate(@Nullable Bundle savedInstanceState) {super.onCreate (savedInstanceState);

    芬兰湾的科特林

                   
    类CustomCallScreenActivity: AppCompatActivity() {重写onCreate(savedInstanceState: Bundle?) {super.onCreate (savedInstanceState)
  2. onCreate,提取RecordingConsentAnswer从权限屏幕。

    Java

                   
    RecordingConsentAnswer recordingAnswer = CallSetupIntentContract.getRecordingAnswer(getIntent());

    芬兰湾的科特林

                   
    val recordingAnswer = CallSetupIntentContract.getRecordingAnswer(intent)
  3. 与收到的RecordingConsentAnswer对象,使用SDK API创建调用。看到开始通话

  4. 启动SDK的内置权限屏幕的意图活动

    Java

                   
    talk.startCallSetupFlow (this, "your digital line name", new Intent(this, CustomCallScreenJavaActivity.class));

    芬兰湾的科特林

                   
    talk.startCallSetupFlow (Context = this,digitalLine = "您的数字线路名称",successIntent =意图(这,CustomCallScreenActivity::class.java)

呼叫启动成功后,您可以在通话界面进行管理。看到使用自己的来电界面管理来电

只使用您自己的权限屏幕

您可以使用自己的权限和同意屏幕,然后使用SDK内置的呼叫屏幕。

在这种情况下,您的应用程序负责检查和请求访问麦克风以及录制音频的权限。看到检查录制音频的权限.如果在没有所需权限的情况下启动调用,SDK将抛出运行时异常。

使用talk.startCallScreen方法启动SDK调用界面。

Java

             
talk.startCallScreen (this, "your digital line name", null);

芬兰湾的科特林

             
talk.startCallScreen (Context = this,digitalLine = "您的数字线路名称",recordingConsentAnswer = null

startCallScreen方法有三个必需的参数:

  • 上下文- Android上下文,用于启动新屏幕
  • digitalLine-在您的帐户中配置的数字线路的昵称
  • recordingConsentAnswer-录音同意书。"OPTED_IN"、"OPTED_OUT"或null之一。当为空时,将使用记录的默认帐户设置

请注意:本版本系统不支持录音同意,但SDK API支持录音同意。对于Talk SDK的初始集成,我们建议设置recordingConsentAnswer为null。