登录连接
应用客户端成功连接到服务器后,才能使用协作中台相关功能,包括即时通讯 SDK 的收发消息、文档、工作台等服务。服务端在收到客户端发起的连接请求后,会根据连接请求里携带的激活状态判断是否允许用户连接。
SSO登录
SSO授权码登录需要用户完成账号SSO认证配置,完成配置后,通过授权码登录接口传入授权码及应用ID进行登录会话的建立。
接口定义
fun login(appId: String, authCode: String, callback: KIMCore.ActiveCallback)
参数说明
参数 | 类型 | 说明 |
---|---|---|
authCode | String | 登录授权码,用户从自身业务服务接口中获取授权码 AUTH_CODE。注意 AUTH_CODE 通常具有时效性。 |
appId | String | 应用 Id,开发者需在企业后台完成 SSO 认证配置,获取得到 APP_ID。配置流程详见SSO 登录。 |
callback | KIMCore.ActiveCallback | 结果回调 |
代码示例
KIM.getControl().login(APP_ID, AUTH_CODE, callBack)
自动登录
自动登录一般用于账号已经登录过,下次重新启动APP后无需重新输入账号密码即可完成登录的场景。调用自动登录接口后,内部自动完成IM连接操作。如遇到上次未登录或账号失效,可通过注册addOnUserLogoutListener
,见「退登监听」。
接口定义
fun autoLogin()
代码示例
KIM.getControl().autoLogin()
退出登录
调用退出登录接口进行账号退登操作,断开服务连接。当请求服务端成功后会清理登录会话缓存信息并执行成功回调,设备不再收到IM消息离线推送;请求失败时不会清理登录会话缓存信息,设备依然可以收到IM消息离线推送。
接口定义
fun logout(callback: IOperationCallback?)
参数说明
参数 | 类型 | 说明 |
---|---|---|
callback | IOperationCallback? | 回调 |
代码示例
KIM.getControl().logout(object : IOperationCallback {
override fun onSuccess() {
log("logout success")
}
override fun onError(err: ErrorCode?) {
log("logout, error = $err")
}
})
强制退登
跟退登KIM.getControl().logout
接口的区别是无论请求服务器是否成功都会清除本地登录会话缓存信息。多用于退登后是否请求成功都弹出登录页面重新登录的场景,不足是如果遇到无网络情况下退登失败,仍然会收到IM消息离线推送。
接口定义
fun forceLogout(callback: IOperationCallback?)
参数说明
参数 | 类型 | 说明 |
---|---|---|
callback | IOperationCallback? | 回调 |
代码示例
KIM.getControl().forceLogout(object : IOperationCallback {
override fun onSuccess() {
log("logout success")
}
override fun onError(err: ErrorCode?) {
log("logout, error = $err")
}
})
监听退出状态
可通过注册代理及实现代理方法来监听自动登录时遇到上次未登录回调或账号异常退登回调。当监听到账号失效时,通常的操作是弹出登录页面重新登录。实现登录监听需要注册OnUserLogoutListener
接口定义
fun addOnUserLogoutListener(owner: LifecycleOwner?, listener: OnUserLogoutListener)
参数说明
参数 | 类型 | 说明 |
---|---|---|
owner | LifecycleOwner? | 生命周期 |
listener | OnUserLogoutListener | 回调 |
OnUserLogoutListener
方法 | 参数 | 返回值 | 说明 |
---|---|---|---|
onLogout | context: Contextreason: ErrorCode | 无 | 自动登录时遇到上次未登录或使用过程中发现账号失效时 会调用该回调方法。 |
代码示例
KIM.getControl().addOnUserLogoutListener(null, object : Control.OnUserLogoutListener {
override fun onLogout(context: Context, reason: ErrorCode) {
log("onLogout")
//清除缓存等
}
})
错误码说明
错误码(reason) | 描述 |
---|---|
CloseUserBlock | 用户被封禁 |
CloseUserKicked | 用户被踢下线 |
CloseUserLogout | 用户主动登出 |
监听登录状态
如果有监听连接状态的需求,可以通过接口实现监听。
建议在应用生命周期内设置,sdk 会自动维护回调。否则在不需要监听时,将设置的监听器移除。
添加登录监听器
接口定义
fun addOnWebSocketStatusChangedListener(
owner: LifecycleOwner?,
listener: OnWebSocketStatusChangedListener
)
参数说明
参数 | 类型 | 说明 |
---|---|---|
lifecyclerOwner | LifecycleOwner | 生命周期Owner,可空 |
listener | OnWebSocketStatusChangedListener | 监听器 |
代码示例
KIM.getControl().addOnWebSocketStatusChangedListener(null, object : Control.OnWebSocketStatusChangedListener {
override fun onConnecting() {
WLog.log("[KIM], onWebSocketStatusChanged, onConnecting")
}
override fun onConnected() {
WLog.log("[KIM], onWebSocketStatusChanged, onConnected")
}
override fun onReconnected() {
WLog.log("[KIM], onWebSocketStatusChanged, onReconnected")
}
override fun onDisconnected(reason: String?) {
WLog.log("[KIM], onWebSocketStatusChanged, onDisconnected, reason = $reason")
}
})
移除登录监听器
主动移除 web socket状态变化监听,可以避免内存泄露,如果初始化监听器的时候未绑定生命周期owner,需要主动移除监听器。
接口定义
fun removeOnWebSocketStatusChangedListener(listener: OnWebSocketStatusChangedListener)
参数说明
参数 | 类型 | 说明 |
---|---|---|
listener | OnWebSocketStatusChangedListener | 监听器 |
附录:状态说明
当连接状态发生变化时,将当前的连接状态回调给开发者。各状态的具体说明请参考下表。状态名称定义在 com.kingsoft.kim.core.Constant 中
状态名称 | 状态值 | 说明 |
---|---|---|
CONNECTING | 0 | 连接中 |
DIS_CONNECT | 1 | 断开连接 |
CONNECTED | 2 | 连接成功 |
附录:连接错误码说明
部分错误码说明:
错误码(reason) | 描述 |
---|---|
CloseUserBlock | 用户被封禁 |
CloseTokenInvalid | token 无效 |
CloseAppKeyInvalid | APP_KEY 无效 |
CloseUserIdInvalid | 用户 id 无效 |
WPS+ConnectError | WPS+服务连接失败 |