iOS

# 快速搭建Plugin

可以查看 JCCGuestManager.md(接口说明文档) 和 JCCGuestCallBack.md(接口回调说明文档)了解支持的接口和回调函数,便于快速实现插件的搭建。

# 1. 初始化销毁

在开始业务前,需要初始化对象,设置回调函数。使用静态 shared 方法获取对象。

/**
 * 单例
 */
static shared(): JCCCommonManager<T>

/**
* 添加回调
*
* @param callback 回调接口对象,用于接收 JCCCommonManager 相关通知
*/
addCallback(callback: JCCCommonManager): void;

/**
* 删除回调
*
* @param callback 回调接口对象,用于接收 JCCCommonManager 相关通知
*/
removeCallback(callback: JCCCommonManager): void;

示例代码

// 添加回调
JCCGuestManager.shared().addCallback(this);

// 登录
JCCGuestManager.shared().login({userName:userId, appKey: appKey, server:server});

...

// 删除回调
JCCGuestManager.shared().removeCallback(this);

# 2. 登录

登录菊风账号,调用 login ,登录过程中进行初始化登录配置。

注意:登录成功以后需要关注session的创建销毁回调,如果收到 onSessionDestroy 回调表示session被销毁,需要重新登录。

/**
* 登录 Juphoon RTC 平台,只有登录成功后才能进行平台上的各种业务
*
* 登录结果通过 onLogin 回调通知
* @param param  登录参数
* @returns 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
* @note 目前只支持免鉴权模式,服务器不校验账号密码,免鉴权模式下当账号不存在时会自动去创建该账号
* @note 用户名为英文数字和'+' '-' '_' '.',长度不要超过64字符,'-' '_' '.'不能作为第一个字符
*/
public login(param: JCCClientLoginParam): boolean;

回调函数

/**
 * 登录结果回调
 *
 * @param result true 表示登录成功,false 表示登录失败
 * @param reason 登录失败原因,当 result 为 false 时该值有效
 */
onLogin(result: boolean, reason: JCCReasonCode): void;

/**
 * 登录状态变化通知
 *
 * @param state    当前状态值
 * @param oldState 之前状态值
 */
onClientStateChanged(state: JCCClientState, oldState: JCCClientState): void;

/**
 * session 创建结果回调
 *
 * @param result 创建结果
 * - true: 成功
 * - false: 失败
 * 
 * @param reason 原因
 */
onSessionCreate(result: boolean, reason: string): void;

/**
 * session 销毁回调
 * 须重新登录,再进行业务
 * @param reason 原因
 */
onSessionDestroy(reason: string): void;

示例代码:

console.log('login user', user);
const userId = user.userName;
const appKey = user.appKey;
const server = user.server;
const ret = JCCGuestManager.shared().login({userName:userId, appKey: appKey, server:server});

/**-------------------------- 回调处理 --------------------------------*/

// 登录结果回调
onLogin(result, reason) {
    console.log('onLogin result: ', result, ' reason: ', reason);
}

// 录状态变化通知
onClientStateChanged(state, oldState) {
  console.log('onClientStateChanged state: ', state);
  // 处理被异常登出情况
}

# 3. 呼叫实现通话

使用 JCCGuestPlugin 组件,放入到应用层的通话页面中。

img

调用 call 方法,实现呼叫坐席,进行通话。呼叫过程中可以配置呼叫参数。呼叫成功的时候,跳转到通话页面。

/**
* @brief 发起呼叫
* @param number 组号或坐席用户ID
* @param callParam 呼叫参数
* @param oneToOne 是否为点对点呼叫,当为点对点呼叫时,number 参数需传入坐席用户ID;反之则传入业务组号
* @return 接口调用结果
* - YES 表示调用成功,呼叫结果通过 onCallStateChanged 回调通知
* - NO 表示调用异常
*/
call(number: string, callParam: JCCCallCenterCallParam, oneToOne: boolean): boolean;

回调函数

/**
 * 通话状态改变回调
 *
 * @param type 访客通话状态改变类型,即以下情况会收到此回调:
 * - {@link JCCCallStateChangeType.CALLING CALLING} 访客呼叫成功
 * - {@link JCCCallStateChangeType.WAITING WAITING} 访客呼叫成功后等待座席接听
 * - {@link JCCCallStateChangeType.INCOMING INCOMING} 作为第三方访客收到通话邀请
 * - {@link JCCCallStateChangeType.TALKING TALKING} 通话接通(第三方访客)或被接通(主访客)
 * - {@link JCCCallStateChangeType.TERMED TERMED} 通话挂断或被挂断
 * @param incomingType 来电类型,当 type == {@link JCCCallStateChangeType.INCOMING INCOMING} 时有效
 * @param inviter 邀请成员对象,当 type == {@link JCCCallStateChangeType.INCOMING INCOMING} 时有效
 * @param reason 挂断原因,只在 type 为 {@link JCCCallStateChangeType.TERMED TERMED} 时需要关注
 */
onCallStateChanged(type: JCCCallStateChangeType, incomingType: JCCCallIncomingType, inviter: JCCInviter | undefined, reason: JCCCallTermReason): void;

示例代码

let callParam = new JCCCallCenterCallParam();
callParam.autoRecord = true; // 服务器录制

callParam.captureResolution = 1; // 采集分辨率
callParam.captureFrameRate = 24; // 采集帧率
callParam.extraInfo = ''; // 额外参数

const result = JCCGuestManager.shared().call(number, callParam, false);
if (result) {
  // 跳转到通话页面
}

/**-------------------------- 回调处理 --------------------------------*/

// 通话状态改变回调
onCallStateChanged(type, incomingType, inviter, reason) {
    console.log('onCallStateChanged ', type);
    if (type == JCCCallStateChangeType.TALKING) { // 通话中
        
    } else if (type == JCCCallStateChangeType.TERMED) { // 通话结束
        
    }
}

# 4. 结束通话

插件中已经包含了离开通话的按钮,如果想要应用层结束通话,可以调用 term 结束通话。根据onCallStateChanged 回调结果,判断当前通话状态。

/**
* 挂断
* @returns 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
term(): boolean;

示例代码

JCCGuestManager.shared().term();

/**-------------------------- 回调处理 --------------------------------*/

// 通话状态改变回调
onCallStateChanged(type, incomingType, inviter, reason) {
    console.log('onCallStateChanged ', type);
    if (type == JCCCallStateChangeType.TERMED) { // 通话结束
        // 离开通话页面
    }
}
/**
 * 在线消息发送结果回调
 *
 * @param result     发送结果是否成功
 *                   - true:发送成功
 *                   - false:发送失败
 * @param operatorId 操作id,对应 sendOnlineMessage 的返回值
 */
onOnlineMessageSendResult(result: boolean, operatorId: number): void;

在线消息接收者会收到 onOnlineMessageReceived 回调通知。

/**
 * 收到在线消息回调
 *
 * @param message 消息内容
 * @param userId  对方用户ID
 */
onOnlineMessageReceived(message: string, userId: string): void;

示例代码:

// 给成员 agent1 发送在线消息
JCCCallManager.shared().sendOnlineMessage("content", "agent1");

/**-------------------------- 回调处理 --------------------------------*/

// 在线消息发送结果回调
onOnlineMessageSendResult(result,operatorId) {
  
}

// 收到消息
onMessageReceived(content, fromUserId) {
  // 收到消息,消息内容为 content,消息来自 fromUserId
}

# 5. 登出

调用 logout 登出账号。

/**
* 登出 Juphoon RTC 平台,登出后不能进行平台上的各种业务
*
* 登出结果通过 onLogout 回调通知
* @returns 接口调用结果
* - true: 接口调用成功
* - false: 接口调用异常
*/
logout(): boolean;

回调函数

/**
 * 登出回调
 *
 * @param reason 登出原因
 */
onLogout(reason: JCCReasonCode): void;

示例代码

JCCCallManager.shared().logout();

/**-------------------------- 回调处理 --------------------------------*/

onLogout: (reason) => {
    console.log('onLogout reason: ', reason);
    // 账号登出,销毁处理
},