跳到主要内容

连接

应用客户端成功连接到融云服务器后,才能使用融云即时通讯 SDK 的收发消息功能。

融云服务端在收到客户端发起的连接请求后,会根据连接请求里携带的用户身份验证令牌(Token 参数),判断是否允许用户连接。

前置条件

  • 通过服务端 API 注册用户(获取 Token)。融云客户端 SDK 不提供获取 Token 方法。应用程序可以调用自身服务端,从融云服务端获取 Token。
    • 取得 Token 后,客户端可以按需保存 Token,供后续连接时使用。具体保存位置取决于应用程序客户端设计。如果 Token 未失效,就不必再向融云请求 Token。
    • Token 有效期可在控制台进行配置,默认为永久有效。即使重新生成了一个新 Token,未过期的旧 Token 仍然有效。Token 失效后,需要重新获取 Token。如有需要,可以主动调用服务端 API 作废 Token
  • 建议应用程序在连接之前设置连接状态监听
  • SDK 已完成初始化。
提示

请不要在客户端直接调用服务端 API 获取 Token。获取 Token 需要提供应用的 App Key 和 App Secret。客户端如果保存这些凭证,一旦被反编译,会导致应用的 App Key 和 App Secret 泄露。所以,请务必确保在应用服务端获取 Token。

连接 IM 服务器

请根据应用的业务需求与设计,自行决定合适的时机(登陆、注册、或其他时机以免无法进入应用主页),向融云聊天服务器发起连接请求。

方法

int connect(string token, int timeout);

参数说明

参数类型说明
tokenstring需要您的 Server 调用 融云服务获取 Token
timeoutint连接超时时间,单位:秒。
timeLimit 小于等于 0,则 IM 将一直连接,直到连接成功或者无法连接(如 token 非法)
timeLimit > 0,则 IM 将最多连接 timeLimit 秒,如果在 timeLimit 秒内连接成功,后面再发生了网络变化或前后台切换,SDK 会自动重连;
如果在 timeLimit 秒无法连接成功则不再进行重连,通过 onConnected 告知连接超时,您需要再自行调用 connect 接口

返回值

返回值描述
int当次接口操作状态码,并不代表最终操作结果,状态码详细信息

代码示例

engine.connect(token,timeout);

回调方法

  • onDatabaseOpened

数据库打开的回调

delegate void OnDatabaseOpenedDelegate(int code);

OnDatabaseOpenedDelegate onDatabaseOpened { set; internal get; }

参数说明

参数名参数类型描述
codeint数据库打开的状态码

代码示例

engine.onDatabaseOpened = delegate(int code)
{

};
  • onConnected

收到连接状态的回调

delegate void OnConnectedDelegate(int code, string userId);

OnConnectedDelegate onConnected { set; internal get; }

参数说明

参数名参数类型描述
codeint接口回调的状态码,0 代表成功,非 0 代表出现异常
userIdstring链接成功的用户 ID,当链接出现错误时,值为空

代码示例

engine.onConnected = delegate(int code, string userId)
{

};
提示
  1. SDK 本身有重连机制,在一个应用生命周期内不须多次调用connect() 。否则可能触发多个回调,触发导致回调被清除。
  2. code31004 的情况下,您需要请求您的服务器重新获取 Token 并建立连接,但是注意避免无限循环,以免影响 App 用户体验。

token 无效(31004)排查方案

原因排查方案
token 错误检查客户端初始化使用的 AppKey 和您服务器获取 Token 使用的 AppKey 是否一致
token 过期检查开发者是否在 控制台 设置了 Token 过期时间,过期之后需要请求您的服务器重新获取 Token 并再次用新的 Token 建立连接

错误码

连接错误码参见原生平台错误码定义 Android 错误码iOS 错误码