客户端连接融云服务器时,遇到 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:通过 onTokenIncorrect 回调方法实现重新获取 Token 的逻辑

      Android 示例代码:

RongIM.connect(token, new RongIMClient.ConnectCallback() {
    /**
     * Token 错误,在线上环境下主要是因为 Token 已经过期,您需要向 App Server 重新请求一个新的 Token
     */
    @Override
    public void onTokenIncorrect() {
        Log.d("LoginActivity", "--onTokenIncorrect");
    }            
    /**
     * 连接融云成功
     * @param userid 当前 token
     */
    @Override
    public void onSuccess(String userid) {
        Log.d("LoginActivity", "--onSuccess" + userid);
    }            
    /**
     * 连接融云失败
     * @param errorCode 错误码,可到官网 查看错误码对应的注释
     */
    @Override
    public void onError(RongIMClient.ErrorCode errorCode) {
        Log.d("LoginActivity", "--onError" + errorCode);
    }
});

      iOS 示例代码:

// 快速集成第二步,连接融云服务器
[[RCIM sharedRCIM] connectWithToken:RONGCLOUD_IM_USER_TOKEN success:^(NSString *userId) {        
    // Connect 成功
}
error:^(RCConnectErrorCode status) {        
    // Connect 失败
}
tokenIncorrect:^() {        
    // Token 错误,在线上环境下主要是因为 Token 已经过期,您需要向 App Server 重新请求一个新的 Token
}];

    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);            
       }      
   });


我对此仍有疑问!继续追问