使用SDK和您自己的UI
使用SDK和您自己的UI
虽然Talk SDK包含内置UI,但如果您愿意,您可以构建和使用自己的UI。SDK还包括封装其所有功能的API。
本节介绍如何在您自己的UI中使用SDK API。要自定义SDK内置UI的外观,请参见自定义外观.
您需要创建一个SDK实例来访问API。看到创建SDK实例在《开始》中。
主题:
开始呼叫与您自己的权限和呼叫屏幕
您可以构建自己的权限和调用屏幕,然后使用SDK的API向UI添加功能。
每个Talk调用都有以下设置流程:
使用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文档中。
开始通话
一旦您确定一个代理可用,并且您的应用程序具有所需的权限,您就可以开始对代理的调用。
创建
CallData
.Java
CallData CallData = CallDataBuilder。创建("您的数字线路名称")
.recordingConsentAnswer(空)
.build ();
芬兰湾的科特林
val callData = callData (digitalLine = "您的数字线路名称",recordingConsentAnswer = null)
的
CallDataBuilder.create
方法需要一个数字行昵称。RecordingConsentAnswer
是可选属性。创建调用。
Java
TalkListenableFuture
job = TalkJavaCompat。createCall(说话,callData); 的工作。addListener(new TalkJavaCompatListener
() { @Override
onSuccess(@NotNull TalkCallResult result) {
handleTalkCallResult(结果);
}
@Override
onError(@NotNull Throwable) {
}
});
芬兰湾的科特林
yourCoroutineScope。发射{
val callResult = talk.createCall(callData)
handleTalkCallResult (callResult)
}
处理结果。
的
talk.createCall ()
方法返回TalkCallResult
,它是一个Kotlin密封类,包含以下状态之一:TalkCallResult.Failure.DigitalLineNotFound
—帐号中不存在数字线路昵称TalkCallResult.Failure.Unknown
—未知错误导致创建呼叫失败TalkCallResult。成功
—创建呼叫成功,并建立座席呼叫。看到使用自己的来电界面管理来电
如果
TalkCallResult
是TalkCallResult.Failure.DigitalLineNotFound
或TalkCallResult.Failure.Unknown
,则调用未建立,您应该将错误通知用户。
使用自己的来电界面管理来电
开始呼叫成功后(当TalkCallResult
是TalkCallResult。成功
),您可以执行以下操作来管理呼叫:
监听呼叫状态变化
监听呼叫状态的变化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
() { @Override
onChanged(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。用于更改活动音频输出
要检索音频输出的当前状态,您可以使用以下方法之一:
- 使用
talkCall.getAudioOutput ()
方法,该方法返回调用该方法时当前使用的音频输出。 - 使用
talkCallResult.availableAudioDevices
流,该流在活动时随时更新AudioDevice
发生变化或蓝牙设备变为其他蓝牙设备。
亚博Zendesk建议使用第二种方法,因为它总是提供最新的数据。只有在需要同步数据时才使用第一种方法。
示例-监听可用的音频设备
Java
success.getAvailableAudioDevices()。观察(this, new Observer
>() {
@Override
onChanged(List
audioDevices) { AudioDevice activeAudioDevice = null;
for (AudioDevice AudioDevice: audioDevices) {
if (audioDevice.isActive()) {
activeAudioDevice = audioDevice;
打破;
}
}
//显示可用的音频设备
}
});
芬兰湾的科特林
yourCoroutineScope。发射{
success.availableAudioDevices.collect {availableAudioDevices -> . properties {availableAudioDevices -> . properties
val 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将运行意图
而不是内置的呼叫屏幕。
创建
活动
在你的应用程序中注册AndroidManifest.xml.Java
CustomCallScreenJavaActivity扩展了AppCompatActivity {
@Override
onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
}
}
芬兰湾的科特林
类CustomCallScreenActivity: AppCompatActivity() {
重写onCreate(savedInstanceState: Bundle?) {
super.onCreate (savedInstanceState)
}
}
在
onCreate
,提取RecordingConsentAnswer
从权限屏幕。Java
RecordingConsentAnswer recordingAnswer = CallSetupIntentContract.getRecordingAnswer(getIntent());
芬兰湾的科特林
val recordingAnswer = CallSetupIntentContract.getRecordingAnswer(intent)
与收到的
RecordingConsentAnswer
对象,使用SDK API创建调用。看到开始通话.启动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。