融云客户端 SDK 的连接方法返回用户 Token 无效,该如何处理?

错误原因一:项目中的 App Key 和 Token 不匹配

您当前的 token 与 SDK 中设置的 App Key 不匹配,请检查本地设置的 App Key 是否与 App Server 端获取 token 的 App Key 一致。您可以通过融云开发者后台验证 Token 是否正确。

错误原因二:Token 已过期

Token 的有效期可以在开发者后台设置。如果 token 有效期设置的是非永久,您应该在连接方法 connect
返回 Token 错误 (31004) 时,再次通过您 App 的服务器向融云申请新的 Token, 然后使用新 token 再次连接。

错误原因三:项目中的 App Key 与 App 服务端的 App Key 不一致

项目中的 App Key 与 App 服务端的 App Key 不一致,导致 App 服务端返回的 Token 与客户端的 App Key 不匹配。

错误原因四:刷新了 App Secret

在融云开发者后台刷新了 App Secret,导致之前获取的所有 Token 失效。此时每个用户均需要重新申请 Token 才能新建连接。

伪代码示例

您应该在 connect() 回调 onError() errorcodeRC_CONN_TOKEN_INCORRECT (31004) 时,再次去您的服务器获取新的 Token, 然后使用新 Token 再次 connect()。伪代码如下:

RongIMClient.connect("用户Token", new RongIMClient.ConnectCallback() {
    @Override
    public void onDatabaseOpened(RongIMClient.DatabaseOpenStatus code) {
        //消息数据库打开,可以进入到主页面
    }

    @Override
    public void onSuccess(String s) {
        //连接成功
    }

    @Override
    public void onError(RongIMClient.ConnectionErrorCode errorCode) {
        if(errorCode.equals(RongIMClient.ConnectionErrorCode.RC_CONN_TOKEN_INCORRECT)) {
            //从 APP 服务获取新 token,并重连 (伪代码)
            AppServer.getUserToken(() --> RongIMClient.connect(newToken));
        } else {
            //无法连接 IM 服务器,请根据相应的错误码作出对应处理
        }
    }
})