使用Agora RTM Web SDK搭建网站时遇错误码5登录失败求助
Agora RTM SDK登录失败(错误码5)解决指南
问题场景
我正在用Agora Web SDK搭建网站,已将SDK放入js文件夹,并在index.html中通过<script src="js/agora-rtm-sdk-1.5.0.js"></script>引入。我的room.js代码如下:
let appID = StringAppId let token= StringToken let uid = String(Math.floor(Math.random() * 232)) let room = 'default' let initiate = async () => { let rtmClient = await AgoraRTM.createInstance(appID) await rtmClient.login({ uid, token }) const channel = await rtmClient.createChannel(room) await channel.join() channel.on('ChannelMessage', (messageData, memberId) => { let data = JSON.stringify(messageData.text) console.log('Data: ', data) }) let sendMessage = async (e) => { e.preventDefault() let message = e.target.message.value channel.sendMessage({ text: JSON.stringify({ 'message': message }) }) e.target.reset() } let messageForm = document.getElementById('message__form') messageForm.addEventListener('submit', sendMessage) } initiate()
运行时出现错误:agora-rtm-sdk-1.5.0.js:8 RTM:ERROR Error Code 5: login failed with args,需要解决登录失败问题。
错误原因分析
错误码5对应Agora RTM的INVALID_ARGUMENT,即登录参数不合法,以下是具体排查和解决步骤:
验证AppID有效性
确保StringAppId是你在Agora控制台创建项目时获取的真实32位字符串,不能直接保留占位符。例如替换为:let appID = "your-actual-32-digit-app-id"。处理Token参数
- 如果你的项目未设置App证书,可直接将
token设为null或省略该参数,登录代码改为await rtmClient.login({ uid })。 - 如果项目已设置App证书,
StringToken必须替换为通过Agora Token生成工具/服务端代码生成的有效Token,不能用占位符。
- 如果你的项目未设置App证书,可直接将
规范UID格式
当前生成UID的方式String(Math.floor(Math.random() * 232))可能存在重复风险,建议生成更唯一的字符串类型UID,比如:let uid = String(Date.now() + Math.floor(Math.random() * 1000)),同时确保UID为数字字符串且长度不超过64位。优化代码细节
原代码存在两处冗余/风险点:- 接收消息时,
messageData.text已经是发送时转好的字符串,无需再次JSON.stringify,应改为JSON.parse(messageData.text)解析为对象。 sendMessage中的channel.sendMessage是异步操作,建议添加await并捕获错误,避免未处理的Promise异常。
- 接收消息时,
修正后示例代码
// 替换为你的真实AppID let appID = "your-actual-app-id"; // 无证书时设为null,有证书则替换为有效Token let token = null; // 生成唯一UID let uid = String(Date.now() + Math.floor(Math.random() * 1000)); let room = 'default'; let initiate = async () => { let rtmClient = await AgoraRTM.createInstance(appID); await rtmClient.login({ uid, token }); const channel = await rtmClient.createChannel(room); await channel.join(); channel.on('ChannelMessage', (messageData, memberId) => { let data = JSON.parse(messageData.text); console.log('收到消息:', data, '来自用户:', memberId); }); let sendMessage = async (e) => { e.preventDefault(); let message = e.target.message.value; try { await channel.sendMessage({ text: JSON.stringify({ 'message': message }) }); e.target.reset(); } catch (err) { console.error('发送消息失败:', err); } }; let messageForm = document.getElementById('message__form'); messageForm.addEventListener('submit', sendMessage); }; // 捕获全局初始化错误 initiate().catch(err => { console.error('初始化失败:', err); });
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

