跳到主要内容

监听连接状态

SDK 提供了 IM 连接状态变化委托协议 RCConnectionStatusChangeDelegate。通过监听 IM 连接状态的变化,App 可以进行不同业务处理,或在页面上给出提示。

连接状态变化委托协议

RCConnectionStatusChangeDelegate 协议定义如下:


@protocol RCConnectionStatusChangeDelegate <NSObject>

/*!
IMLib连接状态的监听器

@param status SDK与融云服务器的连接状态

@discussion 如果您设置了IMLib 连接监听之后,当SDK与融云服务器的连接状态发生变化时,会回调此方法。
*/
- (void)onConnectionStatusChanged:(RCConnectionStatus)status;
@end

提示

代理对象请设置给 AppDelegate 之类的单例对象,保证 APP 整个生命周期都可以监听到代理方法。

当连接状态发生变化时,SDK 会通过 - (void)onConnectionStatusChanged:(RCConnectionStatus)status; 方法,将当前的连接状态回调给开发者。RCConnectionStatus 中定义了连接过程中的可能的状态变化,下表具体说明了需要 App 处理的的状态码。

错误码说明
ConnectionStatus_KICKED_OFFLINE_BY_OTHER_CLIENT6当前用户在其他设备上登录,此设备被踢下线
ConnectionStatus_Timeout14自动连接超时,SDK 将不会继续连接,用户需要做超时处理,再自行调用 connectWithToken 接口进行连接
ConnectionStatus_TOKEN_INCORRECT15token 无效,请从 APP 服务重新获取 token。原因有两种:
一是 token 错误,请检查客户端初始化使用的 AppKey 和服务器获取 token 使用的 AppKey 是否一致;
二是 token 过期,是因为在控制台设置了 token 过期时间,需要请求开发者的服务器重新获取 token 并再次用新的 token 建立连接。
ConnectionStatus_DISCONN_EXCEPTION16与服务器的连接已断开,用户被封禁

添加或移除代理委托

设置连接状态监听器,支持设置多个监听器。

为了避免内存泄露,请在不需要监听时,将设置的代理移除。

/// 添加代理委托
[[RCCoreClient sharedCoreClient] addConnectionStatusChangeDelegate:self];


/// 移除代理委托
[[RCCoreClient sharedCoreClient] removeConnectionStatusChangeDelegate:self];