// 创建实例和设置事件回调
TCCCCloud mTCCCCloud = TCCCCloud.sharedInstance(getApplicationContext());
mTCCCCloud.setListener(new TCCCCloudListener() {});
/// 判断SDK是否已登录
boolean isLogin = mTCCCCloud.isLogin();
if(isLogin){
// 发起呼叫
}else{
/// SDK 登录
TCCCCloudDef.TCCCLoginParams loginParams = new TCCCCloudDef.TCCCLoginParams();
// 你联络中心 14xxx 开头的应用ID
loginParams.sdkAppId= 0;
loginParams.clientUserId = "UserId";
// 正确的 UserSig 签发方式是将 UserSig 的计算代码集成到您的服务端,并提供面向 App 的接口,在需要 UserSig 时由您的 App 向业务服务器发起请求获取动态 UserSig。
// 更多详情请参见 [创建用户数据签名](https://cloud.tencent.com/document/product/679/58260)
loginParams.clientUserSig = "xxx"; // 替换为自己服务端获取的 UserSig。
mTCCCCloud.login(loginParams, new TXCallback() {
@Override
public void onSuccess() {
// 登录成功
// 发起呼叫
}
@Override
public void onError(int i, String s) {
// 登录失败
}
});
}
// 发起视频呼叫
TCCCCloudDef.TCCCStartCallParams callParams = new TCCCCloudDef.TCCCStartCallParams();
callParams.channelId = ""; // 视频客服应用配置入口的 APP ID
callParams.callType = TCCCCloudDef.TCCCCallType.Video; // 指定为视频客服
mTCCCCloud.startCall(callParams);
// 用户主动结束呼叫或者结束通话
mTCCCCloud.endCall();
// 发起音频呼叫
TCCCCloudDef.TCCCStartCallParams callParams = new TCCCCloudDef.TCCCStartCallParams();
callParams.channelId = ""; // 音频客服应用配置入口的 APP ID
callParams.callType = TCCCCloudDef.TCCCCallType.VOIP; // 指定为音频客服
mTCCCCloud.startCall(callParams);
// 开启前置摄像头预览,其中 txvMainVideoView 为视频画面控件
mTCCCCloud.startLocalPreview(true, txvMainVideoView);
// 显示坐席端画面,其中 txvMainVideoView 为视频画面控件
mTCCCCloud.startRemoteView(TCCCCloudDef.TCCC_VIDEO_STREAM_TYPE_BIG,txvMainVideoView);
// 开启本地音频采集
mTCCCCloud.startLocalAudio(TCCCCloudDef.TCCC_AUDIO_QUALITY_SPEECH);
// 暂停发布本地音频流
mTCCCCloud.muteLocalAudio(false);
// 获取SDK 版本号
TCCCCloud.getSDKVersion();
mTCCCCloud.setListener(new TCCCCloudListener() {
/**
* 错误事件回调
* 错误事件,表示 SDK 抛出的不可恢复的错误,比如进入房间失败或设备开启失败等。
* @param errCode 错误码
* @param errMsg 错误信息
* @param extraInfo 扩展信息字段,个别错误码可能会带额外的信息帮助定位问题
*/
@Override
public void onError(int errCode, String errMsg, Bundle extraInfo) {
super.onError(errCode, errMsg, extraInfo);
}
/**
* 警告事件回调
* 警告事件,表示 SDK 抛出的提示性问题,比如视频出现卡顿或 CPU 使用率太高等。
* @param warningCode 警告码
* @param warningMsg 警告信息
* @param extraInfo 扩展信息字段,个别警告码可能会带额外的信息帮助定位问题
*/
@Override
public void onWarning(int warningCode, String warningMsg, Bundle extraInfo) {
super.onWarning(warningCode, warningMsg, extraInfo);
}
});
mTCCCCloud.setListener(new TCCCCloudListener() {
/**
* 发起通话成功与否的事件回调
* 调用 TCCCCloud 中的 startCall() 接口执行呼叫操作后,会收到来自 TCCCCloudListener 的 onStartCall(result) 回调:
* 如果发起视频通话成功,回调 result 会是一个正数(result > 0),代表发起视频通话所消耗的时间,单位是毫秒(ms)。
* 如果发起视频通话失败,回调 result 会是一个负数(result < 0),代表失败原因的错误码。 发起视频通话失败的错误码含义请参见错误码表。
* @param result result > 0 时为发起视频通话耗时(ms),result < 0 时为发起视频通话错误码。
*/
@Override
public void onStartCall(long result) {
super.onStartCall(result);
if(result >0){
// 发起通话成功
}else{
// 发起通话失败
}
}
/**
* 坐席端接听回调,默认不播放视频,需要播放画面调用 startRemoteView
*/
@Override
public void onAccepted() {
super.onAccepted();
}
/**
* 通话结束回调
* 收到该回调说明本次通话结束了。
*
* @param reason 结束原因
* @param message 结束原因描述
*/
@Override
public void onCallEnd(int reason, String message) {
super.onCallEnd(reason, message);
if (TCCCCloudDef.TCCC_CALL_END_USER_HANG_UP == reason) {
// "挂断成功"
}else if(TCCCCloudDef.TCCC_CALL_END_NO_SEAT_ONLINE == reason){
// "坐席无人接听"
}else if(TCCCCloudDef.TCCC_CALL_END_SEAT_HAND_UP == reason){
// "坐席已挂断"
}else if(TCCCCloudDef.TCCC_CALL_END_TIME_OUT == reason){
// "坐席接听超时"
}else if(TCCCCloudDef.TCCC_CALL_END_SEAT_UNKNOWN == reason) {
// "系统异常挂断"
}
}
mTCCCCloud.stopLocalPreview();
mTCCCCloud.stopRemoteView(TCCCCloudDef.TCCC_VIDEO_STREAM_TYPE_SMALL);
}
});
mTCCCCloud.setListener(new TCCCCloudListener() {
/**
* 坐席端用户发布/取消了自己的视频
* 当您收到 onSeatVideoAvailable(true) 通知时,表示坐席端用户发布了自己的声音
* @param available 远端用户是否发布(或取消发布)了主路视频画面,true: 发布;false:取消发布。
*/
@Override
public void onRemoteVideoAvailable(boolean available) {
super.onRemoteVideoAvailable(available);
if(available) {
mRemoteView.setVisibility(View.VISIBLE);
mTCCCCloud.startRemoteView(TCCCCloudDef.TCCC_VIDEO_STREAM_TYPE_SMALL,mRemoteView);
}else{
mRemoteView.setVisibility(View.GONE);
}
}
});
mTCCCCloud.setListener(new TCCCCloudListener() {
/**
* SDK 与云端的连接已经断开
* SDK 会在跟云端的连接断开时抛出此事件回调,导致断开的原因大多是网络不可用或者网络切换所致,
* 比如用户在通话中走进电梯时就可能会遇到此事件。 在抛出此事件之后,SDK 会努力跟云端重新建立连接,
* 重连过程中会抛出 onTryToReconnect,连接恢复后会抛出 onConnectionRecovery 。
* 所以,SDK 会在如下三个连接相关的事件中按如下规律切换:
*/
@Override
public void onConnectionLost() {
super.onConnectionLost();
}
/**
* SDK 正在尝试重新连接到云端
* SDK 会在跟云端的连接断开时抛出 onConnectionLost,之后会努力跟云端重新建立连接并抛出本事件,
* 连接恢复后会抛出 onConnectionRecovery。
*/
@Override
public void onTryToReconnect() {
super.onTryToReconnect();
}
/**
* SDK 与云端的连接已经恢复
* SDK 会在跟云端的连接断开时抛出 onConnectionLost,之后会努力跟云端重新建立连接并抛出onTryToReconnect,
* 连接恢复后会抛出本事件回调。
*/
@Override
public void onConnectionRecovery() {
super.onConnectionRecovery();
}
});
符号 |
值 |
含义 |
TCCC_ERR_NULL |
0 |
无错误 |
TCCC_SYSTEM_ERROR |
-1002 |
TCCC 系统错误 |
TCCC_SYSTEM_PARAMETER_ERROR |
-1001 |
参数错误 |
符号 |
值 |
含义 |
TCCC_USER_NO_LOGIN |
-2019 |
用户未登录 |
TCCC_SYSTEM_REGISTRATION_FAILED |
-2013 |
消息系统注册失败 |
TCCC_LOGIN_TICKET_ERROR |
-2014 |
登录态异常,签名校验失败 |
TCCC_LOGIN_TICKET_EXPIRED |
-2015 |
登录态过期 |
符号 |
值 |
含义 |
TCCC_TIM_INIT_FAIL |
-3001 |
TIM 初始化失败 |
TCCC_START_SESSION_FAIL |
-3002 |
开始会话失败 |