Agora RTM登录返回错误码9超时,RTC正常令牌有效,Swift端如何排查?
Agora RTM Swift端登录超时排查方案
你提供的实现代码如下:
self.rtmKit?.login(byToken: self.tempToken[1], user: self.userForRTM) { (error) in if error != .ok { print("Error logging in: ", error.rawValue) } else { self.rtmChannel = self.rtmKit?.createChannel(withId: self.userName, delegate: self) // 此处需正确实现AgoraRtmChannelDelegate,才能收到消息接收、成员进出频道回调 self.rtmChannel?.join(completion: { (error) in if error != .channelErrorOk { print("Error joining channel: ", error.rawValue) } }) } }
在已确认token有效、RTC功能正常的前提下,可能引发登录超时的原因如下:
- RTM实例初始化异常
调用login前先判断rtmKit是否为nil,如果实例创建失败,登录请求根本不会发出,自然会触发超时。检查初始化时填入的App ID是否和生成token用的App ID完全一致,不要填错测试/生产环境的App ID。 - 用户ID匹配错误
检查你传入的userForRTM参数,必须和生成token时填入的用户ID完全一致,大小写、特殊字符都不能有差异,否则鉴权阶段会被拦截,最终返回超时错误。同时确认用户ID符合RTM规范,不能包含非法字符,长度不超过64位。 - 网络端口限制
RTC和RTM使用的端口协议有差异:RTC主要走UDP端口,RTM默认走TCP 443、8443端口。即使RTC能正常通信,也可能是防火墙、运营商网络或者应用权限封禁了RTM对应的端口,可以切换到其他WiFi或者移动网络验证。 - 区域配置不匹配
如果初始化RTM时手动指定了区域参数,确认你选的区域和你业务使用的区域一致,若填错了区域会导致请求路由到错误的接入点,引发超时。RTC默认是就近接入,所以可能出现RTC正常、RTM超时的情况。 - SDK版本兼容性问题
若你使用的RTM SDK版本过低,和当前Agora服务端协议不兼容也会导致握手失败超时,建议升级到和当前RTC SDK版本匹配的最新稳定版RTM SDK。 - 重复登录冲突
不要在上一次登录请求还未返回结果时重复调用login接口,多次并发登录请求会被服务端拦截,最终触发超时,建议添加登录状态标记,仅在未登录状态下发起登录请求。
内容的提问来源于stack exchange,提问作者Ashton
相关产品推荐
相关产品推荐

