IM 即时通讯 (442)
Android (209)
- 初始化&链接 (8)
- 事件&监听处理 (7)
- 用户信息 (13)
- 会话列表 (16)
- 聊天会话 (26)
- 消息处理 (35)
- 自定义消息 (6)
- 音视频 (2)
- 推送&通知 (34)
- 扩展功能 (4)
- 第三方地图 (3)
- 依赖&配置 (9)
- 升级说明 (3)
- 其他 (43)
iOS (168)
- SDK 导入 (10)
- 连接 (8)
- 事件处理 (2)
- 用户信息 (3)
- 会话列表 (14)
- 聊天会话 (44)
- 消息处理 (26)
- 自定义消息 (8)
- 推送&通知 (19)
- 扩展功能 (5)
- 国际化 (4)
- 音视频 (3)
- 其他 (22)
Web (36)
Server (29)
Web SDK常见问题及排除方式(上)
回答:
一、引入 SDK (连接融云服务器)
参考文档:https://docs.rongcloud.cn/im/imlib/web/summary/
WebIM 集成引导:https://rongcloud.github.io/websdk-demo/integrate/guide.html
IE9 下 RequireJS 加载时 protobuf 文件报错 (不支持 websocket 内核的浏览器会报错)
(1)通过 script 直接引入的方式,SDK 有判断,IE9 下使用长链接,并且不引入 protobuf
(2)如果是 Require 方式加载,需要加个判断,在不支持 websocket 的浏览器里不引入 protobuf,只在支持的浏览器引入
(3)RequireJS 加载 SDK demo: https://rongcloud.github.io/websdk-demo/require.html
集成 electron 问题 报错:Cannot find module 'ByteBuffer'
(1)由于 Electron 集成了 Node.js,有一些额外的符号被插入到 DOM,比如 module, exports, require。这对于某些库会引发问题,因为它们可能需要插入同名的符号。
(2)在 Electron 中关闭 Node 集成
// In the main process. const {BrowserWindow} = require('electron') let win = new BrowserWindow({ webPreferences: { nodeIntegration: false } }) win.show()
(3)确定 electron 引入 SDK 是通过 RequireJS 引入,或者通过 页面 引入的
(4)如果是通过 RequireJS 引入的 SDK,参考 demo:https://rongcloud.github.io/websdk-demo/electron/requirejs-in-node.html
(5)如果是通过 页面直接引入的 SDK,如果保留使用 Node.js 和 Electron APIs 的能力,必须要在引用其它库之前在页面中重命名这些符号:
<head> <script> window.nodeRequire = require; delete window.require; delete window.exports; delete window.module; </script> <script type="text/javascript" src="jquery.js"></script> </head>
参考 demo :https://rongcloud.github.io/websdk-demo/electron/normal.html
(6)参考文档:
https://www.kancloud.cn/simon_chang/electron/227476
http://requirejs.org/docs/node.html
如何动态获取 token
(1)动态获取 token 需要在 APP server 端获取
(2)参考文档:https://docs.rongcloud.cn/im/server/user/#token
token 失效问题
Token无效一般有以下两种原因:
(1)token错误,请您检查客户端初始化使用的AppKey和您服务器获取token使用的AppKey是否一致
(2)token过期,是因为您在开发者后台设置了token过期时间,您需要请求您的服务器重新获取token并再次用新的token建立连接。
所以:
(1)请确认一下 AppKey 和 token 是否匹配。
(2)请在开发者后台确认 token 是否在有效期。
(3)请使用工具:https://rongcloud.github.io/websdk-demo/api-test.html 来测试一下能否链接成功。
连接成功后,聊天界面一直开着,过一段时间,会自动断开
(1)请确认该 token 是否有在其他端登录。判断方法:在开发者工具console里看错误信息,是否输出了 “其他端登录” 的信息
(2)断开连接时网络是否正常,请查看一下开发者工具console里的输出的断开原因,截图一下
(3)WebSDK有重链的方法,但是没有默认自动重链,请根据自己需要处理
(4)demo :https://rongcloud.github.io/websdk-demo/api-test.html
重连错误
(1)执行重连过程:融云连接状态监听器 setConnectionStatusListener 监听到 断开连接(这里的断开连接是指 连接融云服务器断开),可以执行重连方法。
(2)融云连接状态监听器 setConnectionStatusListener 监听到 网络不可用,开始检测当前网络是否已连接,当网络正常连接后,再执行重连方法。
(3)reconnect 方法是监听到连接融云服务器断开后调用的重连方法,如果是网络断开连接了,需要先进行网络嗅探,在确认网络连接成功后再进行重连。
(4)在提示 其他端登录 不要使用重连方法,会造成两个页面互踢的情况,需要同一个 userid 同时登录多个页面,需要开通 多设备消息同步 服务,此服务为增值服务,开发环境免费,生产环境付费。
(5)demo :https://rongcloud.github.io/websdk-demo/api-test.html
(6)多设备消息同步 服务参考链接:http://www.rongcloud.cn/docs/payment.html#multi_device_message_sync
Web 端获取对方在线状态
(1)不能通过消息来判断用户是否在线,需要通过应用服务器处理
(2)用户是否在线需要用 server 端的在线状态订阅,具体可以参看用户状态相关文档:http://www.rongcloud.cn/docs/server.html#online_status
二、会话列表
获取会话列表问题
(1)获取会话列表 需要开通 单群聊消息云端存储 服务,该服务在开发环境是免费的,您可以在开发者后台 - 付费功能中自行开通!
(2)确认开通服务后,在init初始化以及连接融云服务器成功后,再调用同步会话列表方法
(3)确认在开通服务后有过消息收发
(4)demo :https://rongcloud.github.io/websdk-demo/api-test.html
(5)提供 appKey 和 token / 线上的测试地址
(6)单群聊消息云端存储 服务说明连接:http://www.rongcloud.cn/docs/payment.html#history_message_cloud_storage
获取会话列表的参数问题
(1)获取会话列表应该有两个参数传入
(2)conservationType 默认为 null,具体格式设置需要补充(现在传具体会话类型不能过滤,属于 bug )
(3)limit 获取会话的数量,不传或者传 null 为获取全部,暂时不支持分页
会话列表顺序问题
(1)确定一下顺序问题是 一直有问题,还是最近出现的问题
(2)如果是一直有问题 sortConversationList() 方法可以改变顺序
(3)如果是最近出现的问题,提供 appKey 以及出现问题的 token / 提供线上的测试地址,Web 端复现问题,server 端有没有更改
会话列表和聊天页面分成两个页面
(1)Web 端默认只支持一个页面链接,属于单页面应用,单页面应用只需 init 和 connect 一次, connect 后客户端和服务器会一直保持长连接。
(2)两个页面就要分别对每个页面初始化 和 connect ,会提示其他设备登录,需要多页面链接需要开通 多设备消息同步 服务。
(3)参考链接:http://www.rongcloud.cn/docs/payment.html#multi_device_message_sync
聊天插件中删除会话列表问题
(1)聊天插件中点击删除最近联系人会话中的一个会话,没有效果,刷新页面重新登录就已经删除成功
(2)属于聊天插件的 bug ,建议修改 删除逻辑,根据 id 在本地做隐藏,或者等待 SDK 的版本更新
未读消息数量
(1)获取未读消息数必须在获取会话列表和收到实时消息之后,未读消息储存在 localstorage 中
(2)在获取会话列表后,每次有收到新的消息时会执行 获取未读消息( getUnreadCount() ) 方法,数量 count 会不断累加,执行清除未读消息 方法后,count 清零。
(3)清除未读消息( clearUnreadCount() ) 方法可以清除当前端的未读数,并不会多端同步,多端同步需要发送 SynReadStatusMessage ,同步给多端请参考 SendSynReadStatusMessage 。
(4)demo :https://rongcloud.github.io/websdk-demo/api-test.html
(5)参考文档:https://docs.rongcloud.cn/im/imlib/web/conversation/unreadcount/
三、历史消息
获取历史消息出错或者为空
(1)获取历史消息 需要开通 单群聊消息云端存储 服务,该服务在开发环境是免费的,您可以在开发者后台 - 付费功能中自行开通!
(2)确认开通服务后,在init初始化以及连接融云服务器成功后,再调用 获取历史消息 方法
(3)确认在开通服务后有过消息收发
(4)demo :https://rongcloud.github.io/websdk-demo/api-test.html
(5)参考文档:https://docs.rongcloud.cn/im/imlib/web/message-list/get-list/
(6)提供 appKey 和 token / 提供线上的测试地址
(7)单群聊消息云端存储 服务说明连接:http://www.rongcloud.cn/docs/payment.html#history_message_cloud_storage
获取历史消息方法中的参数 conversationType 可以指定多种消息会话类型
(1)消息会话类型请参考文档:https://docs.rongcloud.cn/im/imlib/web/conversation/structure/
(1)私聊 RongIMLib.ConversationType.PRIVATE, conversationType = 1 (2)讨论组 RongIMLib.ConversationType.DISCUSSION, conversationType = 2 (3)群组 RongIMLib.ConversationType.GROUP, conversationType = 3 (4)聊天室 RongIMLib.ConversationType.CHATROOM, conversationType = 4 (5)客服 RongIMLib.ConversationType.CUSTOMER_SERVICE, conversationType = 5 (6)系统消息 RongIMLib.ConversationType.SYSTEM, conversationType = 6 (7)应用内默认关注得公众账号 RongIMLib.ConversationType.APP_PUBLIC_SERVICE, conversationType = 7 (8)手动关注的公众账号 RongIMLib.ConversationType.PUBLIC_SERVICE, conversationType = 8
历史消息下载问题
(1)消息历史记录下载地址获取方法 请参考:http://rongcloud.cn/docs/server.html#history_message
获取历史消息方法中的参数 timestrap
(1)默认传 null
(2)若从头开始获取历史消息,timestrap = 0
(3)timestrap 可以为时间戳, 当 timestrap 为时间戳时,获取的是 消息发送时间(sentTime)之前的历史消息
获取历史消息循环拉取问题
(1)拉取历史消息最多一次性拉取 20 条消息。拉取顺序按时间倒序拉取,一次性拉取最少为 2 条消息。
(2)在点击会话列表第一次进入聊天界面时,获取历史消息应该是从头拉取的,此时 timestrap 设为 0,可以保证每次进入聊天界面时都是从头拉取的
(3)在获取 更多历史消息 的时候,timestrap 拉取必须为 null 才能实现循环拉取( timestrap 传 0 或着时间戳时不能循环拉取 )
离线消息
(1)获取离线消息使用获取 历史消息的方法
(2)在获取历史消息方法返回的消息体中 有 offLineMessage 属性,标识是否为离线消息,如果为 true ,则为离线消息,反之,则是普通消息
Web 端清除聊天记录
(1)RongIMClient.getInstance().clearMessages() 方法清除本地会话中的历史消息(不能清除服务器中的历史消息记录)
Web 端用户信息( 用户头像和昵称 )的获取
(1)用户数据 和 用户好友消息 保存在您的应用服务器上,用户信息(昵称、头像地址等)需要在自己的数据库进行获取以及维护,通过 targetId 和 userId 进行匹配,得到相应的用户信息
(2)参考 SDK 架构说明文档:http://www.rongcloud.cn/docs/quick_start.html
消息中显示用户信息有两种方式:
(1)通过消息中的 senderUserId 匹配自己的用户信息
(2)在消息体体中携带用户信息,请参考:http://support.rongcloud.cn/kb/NDMy
targetId 和 senderUserId 问题
(1)在发送端,targetId 和 senderUserId 不同,targetId 为 目标Id ,senderUserId 为发送者Id
(2)在接收端,targetId 和 senderUserId 相同