跳到主要内容

连接

应用客户端成功连接到融云服务器后,才能使用融云即时通讯 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 服务器​

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

方法​

C #
int connect(string token, int timeout);

参数说明​

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

返回值​

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

代码示例​

C #
engine.connect(token,timeout);

回调方法​

  • onDatabaseOpened

数据库打开的回调

C #
delegate void OnDatabaseOpenedDelegate(int code);

OnDatabaseOpenedDelegate onDatabaseOpened { set; internal get; }

参数说明

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

代码示例

C #
engine.onDatabaseOpened = delegate(int code)
{

};
  • onConnected

收到连接状态的回调

C #
delegate void OnConnectedDelegate(int code, string userId);

OnConnectedDelegate onConnected { set; internal get; }

参数说明

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

代码示例

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

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

token 无效(31004)排查方案

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

错误码​

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