Agora RTM服务登录失败求助(错误码-10012、服务器返回码26)
根据你提供的报错信息和代码,我梳理了几个关键的排查方向和修复建议,你可以逐一尝试:
1. 补全RTM登录的必填参数
你在初始化RTM Client时传入了uid,但调用login方法时只传递了token。按照Agora RTM SDK的要求,使用Token登录时必须明确指定uid,且这个uid必须和生成Token时使用的uid完全一致,否则会被服务器判定为无效请求。
修改前端的登录代码:
rtmClient.login({ uid: "10", token })
2. 检查Token生成逻辑与SDK版本适配
不同版本的Agora RTM Token构建工具参数可能有差异,比如部分新版本的SDK需要明确指定用户角色,或者使用buildTokenForUser而非buildToken方法。你可以对照后端使用的Agora SDK文档,调整Token生成代码:
// 示例(适配新版本SDK) const token = RtmTokenBuilder.buildTokenForUser( APP_ID, APP_CERTIFICATE, uid, privilegeExpiredTs, RtmTokenBuilder.Role.RtmUser // 明确指定RTM用户角色 );
3. 修正Token的返回与解析逻辑
后端目前直接返回Token字符串:return res.json(token);,但纯字符串直接用res.json()返回可能导致前端response.json()解析失败(因为纯字符串不是标准JSON格式)。建议后端改为返回包含Token字段的JSON对象:
// 后端修改 return res.json({ token: token });
同时前端对应调整解析逻辑:
const responseData = await response.json(); rtmClient.login({ uid: "10", token: responseData.token })
4. 排查Agora控制台的服务配置
错误码26通常和Token无效或权限不足相关,你可以去Agora控制台确认以下几点:
- 你的项目是否已经启用了RTM服务(部分新创建的项目默认未开启RTM)
- 后端使用的AppID和证书是否属于同一个项目
- 项目是否设置了区域限制,导致客户端无法连接到对应边缘节点
5. 验证服务器时间准确性
Token的有效性依赖于时间戳,如果你的后端服务器系统时间和UTC时间偏差过大,会导致Token被判定为过期或未生效。可以检查服务器的系统时间,确保和UTC时间同步。
另外,你可以先尝试使用Agora控制台生成的临时RTM Token测试登录,如果临时Token能成功登录,说明问题肯定出在后端的Token生成逻辑上,再针对性排查即可。
备注:内容来源于stack exchange,提问作者user26583655

