客户端连接融云服务器时,遇到 TOKEN 错误逻辑处理

刷新 Secret 后,原 Secret 下生成的 Token 将失效无法连接服务器,这时,客户端连接融云服务器时,将会遇到 TOKEN 错误,代码中需要实现重新通过 App Server 向融云服务器请求新的 Token 的逻辑。
发布时间: 2017-11-21 11:58

回答:

刷新 Secret 后,原 Secret 下生成的 Token 将失效无法连接服务器,这时,客户端连接融云服务器时,将会遇到 TOKEN 错误,代码中需要实现重新通过 App Server 向融云服务器请求新的 Token 的逻辑,如下

      SDK 1.0:通过判断  TOKEN_INCORRECT 错误码,重新获取 Token 的逻辑

      SDK 2.0:通过 ERROR 回调方法判断是否是Token无效,实现重新获取 Token 的逻辑

      Android 示例代码:

RongIM.connect(token, new RongIMClient.ConnectCallback() {
    @Override
    public void onSuccess(String t) {
        
    }

    @Override
    public void onError(RongIMClient.ConnectionErrorCode e) {
        if(e.equals(RongIMClient.ConnectionErrorCode.RC_CONN_TOKEN_INCORRECT)){//Token 无效
            
        }

    }

    @Override
    public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus code) {

    }
});

      iOS 示例代码:

// 快速集成第二步,连接融云服务器
[[RCIM sharedRCIM] connectWithToken:@"开发者的 server 通过请求 server api 获取到的 token 值" timeLimit:5
    dbOpened:^(RCDBErrorCode code) {
        //消息数据库打开,可以进入到主页面
    } success:^(NSString *userId) {
        //连接成功
    } error:^(RCConnectErrorCode status) {
        if (status == RC_CONN_TOKEN_INCORRECT) {
            //token 非法,从 APP 服务获取新 token,并重连
        } else if(status == RC_CONNECT_TIMEOUT) {
            //连接超时,弹出提示,可以引导用户等待网络正常的时候再次点击进行连接
        } else {
            //无法连接 IM 服务器,请根据相应的错误码作出对应处理
        }
    }];

    Web 代码示例:

  RongIMClient.connect(token, {        
      onSuccess: function(userId) {          
              console.log("Connect successfully." + userId);        
          },        
      onTokenIncorrect: function() {          
              console.log('token无效'); // Token 错误,在线上环境下主要是因为 Token 已经过期,您需要向 App Server 重新请求一个新的 Token       
          },        
      onError:function(errorCode){              
          var info = '';              
          switch (errorCode) {                
              case RongIMLib.ErrorCode.TIMEOUT:                  
              info = '超时';                  
              break;                
          case RongIMLib.ErrorCode.UNKNOWN_ERROR:                  
              info = '未知错误';                  
              break;                
          case RongIMLib.ErrorCode.UNACCEPTABLE_PaROTOCOL_VERSION:                  
              info = '不可接受的协议版本';                  
              break;                
          case RongIMLib.ErrorCode.IDENTIFIER_REJECTED:                  
              info = 'appkey不正确';                  
              break;                
          case RongIMLib.ErrorCode.SERVER_UNAVAILABLE:                  
              info = '服务器不可用';                  
              break;              
          }              
          console.log(errorCode);            
       }      
   });