【环信IM集成指南】Web端常见问题整理
1. 掉线之后,会有回调或通知吗?
sdk有提供连接状态的回调监听
https://docs-im.easemob.com/im/web/intro/basic#%E6%B7%BB%E5%8A%A0%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0
2. 怎么转发多条聊天记录?
挑选你要转发的消息内容然后以自定义消息 或者ext扩展字段携带过去实现
3. 客户端创建聊天室提示you have no permission to do this.
客户端需要赋予超级管理员后才能创建聊天室,否则只能通过rest服务端创建
4. 消息发出多长时间可以撤回?
消息撤回时限默认为2分钟,可根据开发者需求以AppKey为单位进行单独设置
5. 漫游消息的拉取除了按条数,能否支持按时间段?
目前漫游都是分页获取,无法按照时间段来获取
6. 历史图片消息为什么看不到了?
历史附件类的消息,在环信服务器默认只保存7天,后续就会自动清理,拉取失败。如果有历史功能需求,建议将记录保存到自己服务器,
7. web有删除会话的api吗?
有
8.会话列表是默认已经排序好的 还是需要我这边来排序?
已经排好序的,约新的会话 数组的下标约靠前。
9. 发出去的图片还是会有?em-redirect=true
可以直接在 WebIMConfig 中设置useOwnUploadFun: true,
然后初始化时引入下,就不会在返回 em-redirect=true
10. 如何监听好友在线、离线状态?
这个有api 和实时回调,可以查询和 监听用户状态
https://docs-im.easemob.com/im/server/ready/user#在线与离线
https://docs-im.easemob.com/im/extensions/value/presencecallback#用户在线状态回调
11.小程序 真机调试可以正常聊天,但是发到体验版,要打开调试工具才能正常聊天
看一下小程序后台有没有配置域名
文档:
https://docs-im.easemob.com/im/applet/wechat#微信小程序集成介绍
12. web im是否支持发送订单消息?
支持的 需要通过自定义消息或通过ext扩展消息发送
13.为什么调用rest api接口获取不到历史记录?
服务器聊天历史记录默认只保存3天,确认下获取记录的时间是否是三天之内,如果时间没有问题确认下获取的这个时间是否有记录产生,rest接口获取历史记录还有一个小时的延迟
14.token的过期时间是多久?
这个token有效期没有具体的时间 接口返回的有效期是60天 这个最终以请求接口返回的为准 正常情况下token没有那么快就过期
15. 创建群组或者添加群组提示 user xxxx as joined too many groups!
单个用户ID只能加入500个群,可以调用接口获取用户已添加的群组数,如果超出不能继续添加,也可以联系商务上调。
16. 调用rest 上传文件为什么没有返回share-secret?
header里需要传restrict-access:true
17. web im发送文本消息报错,type 为503
可以检查一下发送消息的body 体,看一下是否有参数为 undefined
18.web im发送消息604 inter-app communication is not allowed
是需要在初始化的地方加上: appKey:WebIM.config.appkey
19. 撤回消息的时候,id 和mid 和撤回回调的不一样,怎么才能知道我撤回的是哪一条信息呢?
发消息本地生成的id 只是本地的 消息发出之后 在onReceivedMessage 这个回调里会回调出这条消息的服务端 mid 撤回的时候用这个mid 这个和接收端的消息id 是一样的
20. 小程序音视频 如果多次调用推流的方法,SDK这边是会把旧的流移除,重新订阅新流吗,这块儿的实现机制是什么样的
小程序调推流返回的是一个推流地址,地址是一个就只存在于一个流地址剩下的就是小程序本身的机制,多次调用也不存在重新给你创建新的流。
21. 小程序视频会议,为什么看不到自己和对方的图像呢?
需要在小程序后台申请livr-pusher 和 live-player 权限,并且是真机调试
22.web小程序小程序加入音视频会议不显示图像
原因一:后端返回的域名变化,没有在小程序白名单注册的域名是不可用的。
解决办法:让客户把新域名加入小程序白名单:mprtc.easecdn.com
原因二:小程序后台并未开通live-push live-player等标签权限。
解决方法:走小程序平台流程进行开通。
23.WEBIM能否查询到(群组/聊天室)当前在线人数?
web的 可以通过调rest 服务端接口 获取群组人数以及 群成员的id
然后调rest 服务端接口 查看群成员id 是否在线
24.群组聊天室的区别:
聊天室: 随进随出 在线可以收到聊天室消息,如果离线了,那么两分钟后自动退出聊天室,不会再接收消息。
群组: 有owner群主 和管理员 可分为私有群 公有群 加入后只要不被踢出去 就会一直在群里 在线情况下正常接收消息,离线之后会产生离线消息,在线之后接收到离线时的离线消息推送。
25.web端下载日志的方法是:WebIM.logger.download()
26.环信日活统计说明:
通过IM长连接登录、退出以及重连,通过IM长连接收发消息以及请求,均会产生日活计数,环信会按照用户ID进行排重(一个用户无论当日产生多少日活行为,排重后只统计为1)
27.关于环信console后台的强制推送与图片缩略图设置的作用:
①强制推送就是设置了离线推送免打扰也会接收到离线推送,
②缩略图就是设置APP端接收到图片消息自动下载的缩略图宽高
28.Rest请求注册用户报错405:
解决方案:是检查请求时的method,例如post的请求写成的是put。通常405是method错误。
29.关闭SDK log的方式:
WebIM.logger.disableAll()
30.WebSDK不支持IE9以下的原因
是因为用到了protobuf,并且IE9以下不支持websocket如图:
31.Windows 环境下cmd启动HTTPS=true npm start 启动方式:
因为此命令为Linux命令 用git bash 启动。
32.头像昵称的处理方式:
头像昵称则需要使用用户属性接口将自定义的昵称、头像URL地址、电话等一些列自己定义的参数set传入,后续在需要调用的时候通过获取用户属性接口拿到。
33.如何查看消息投递的状态?
进入console管理后台查看即时通讯->服务质量监控 查看IM消息投递查询。
34.如何将获取token这一步放在服务端,前端只负责token登录?
首先服务端则可以通过拿到该用户的环信id以及密码,调用http://a1.easemob.com/easemob-demo/easeim/token接口并且请求体内传入
获取拿到token,并且返回给前端即可。
35.漫游消息拉取接口返回过慢:
原因:漫游消息接口默认会返回一些非展示类型的消息,比如reacdack,channelack等,非展示在页面上,例如拉取十条展示消息,但会有一些非展示消息返回导致接口需要调用多次拉取展示消息,因此会返回过慢。
解决方式:可以配置漫游过滤,不漫游非展示类型的消息。
36、删除消息
没有删除消息的接口,可以去开通消息撤回,去撤回消息
37、服务器为什么不能删聊天记录
删了环信id,聊天记录是不会删除的,这么设计的逻辑是因为每个客户的业务场景不同,如果客户误删了环信id,需要重新注册回来,并且需要看到历史聊天记录。如果你这边的业务,是不希望这种场景,你可以去定义注册环信IM的id规则,你用户注册你自己应用的username时,按你定义的规则去注册IM的id,也就是说你这边的username和环信的id不是同一个,环信这边是根据环信id保存历史记录的
38、会话列表
您好,会话列表默认是保存7天的,可以延长至跟消息漫游一致的时间(3个月或者6个月),具体时间可以参考消息漫游时间,消息漫游服务联系建议您联系商务经理咨询。
默认拉取10条,最多拉取100条
获取会话列表有两种方式,
1.您可以将会话存到本地,然后去展示
1.您可以从环信服务器去拉取会话列表,会话列表功能需要联系您的商务经理去开通,可参考文档https://docs-im.easemob.com/im/web/basics/message#会话列表
39、聊天室和群组的区别
群组:无论用户有没有打开群都会接收到在线消息和离线消息
聊天室:离开后不再接收消息
40、关闭sdk自动打印日志
这个日志是sdk自动打印的,没有影响的,打印日志功能是可以关闭的,如果您的sdk版本在3.6.0及以上可以在页面加载完成时通过WebIM.logger.disableAll()关闭;sdk版本在3.6.0以下时,在webim.config.js文件中将isDebug改成false就可以了。
41、console后台client获取失败
清除缓存重新登录,若还是获取失败,则需要查看该appkey是不是被禁用了
42、发送消息报503
一般是消息体的问题,排查一下消息体的参数有没有undefined或者不是字符串类型
43、关联账号
没有这种关联效果
不过您可以开通实时回调, 消息到达环信服务器后,会同步回调到您服务器
到时您可以自己实现给其他的个人身份账号通知
44、注册的时候填了昵称,为什么还要设置用户属性
在注册的时候填写的昵称只是用于apns推送的,并不是用户属性,要先设置用户属性,才可以去获取用户属性的。
设置用户属性可参考文档:https://docs-im.easemob.com/im/web/basics/profile#设置用户属性(客户端)
https://docs-im.easemob.com/im/server/ready/usermetadata#设置用户属性(服务端)
获取用户属性可参考文档:https://docs-im.easemob.com/im/web/basics/profile#获取用户属性(客户端)
https://docs-im.easemob.com/im/server/ready/usermetadata#获取用户属性(服务端)
45、为什么appkey、用户id、用户密码都正确,还会报跨域问题、type:16、websocket断链
检查是否是本地启动项目,需要线上启动
46、声网报错 device not found
没有开摄像头或者麦克风
47、建群404
检查群成员的id要是环信id,不能为汉字
48、websocket断链
导致websocket断链有以下两种原因
1.断网,如果是因为断网导致的websocket断链,环信这边会自动重连,不用您做任何操作,
2.刷新页面或者其他操作导致退出使websocket断链,则需要重新登录
在您进行收发消息及调用环信sdk时,请您确保您登陆成功且onOpened回调已经触发,只有onOpened回调触发才代表与环信链接成功,才可以进行后续的操作。
49、uniapp写的同一套代码,在安卓机运行正常,在iOS发送消息报this.isZero is not a function
在官方demo中并没有复现这个问题,让客户提供了可以复现的demo,发现客户在配置文件和初始化sdk时将isDebug写成了true,将isDebug改成false之后问题解决
50、如何在第一次登录成功之后,刷新页面重新登录成功
您好,您可以在第一次登录成功之后,将用户名和密码及登录成功的token保存下来,之后在页面加载完成前使用token登录的方式实现登录。token登录的参考文档:https://docs-im.easemob.com/im/web/intro/basic#使用_token_登录 您可以参考一下这个方法去实现。或者您也可以参考一下我们demo的处理。
51、web端发消息报错503是什么问题?
A:检查下消息体,消息的body体里面包含undefined。
52、web端消息已读未读如何处理?
web端支持消息回执,接收方接收到消息,发送已读回执给对方,对方监听到onreadmassage回调后,将消息置为已读,ui展示已读状态。
53、web端报错type28是什么原因?
A:type 28通常就是没有登陆就调用了功能性接口导致的问题,需要检查登陆状态,在onOpened 触发之后再调用功能性接口。
54、web登陆成功,能发送消息,但是接收不到消息?
A:打印下msg.body,看下发送方、接收方是不是string 类型。
55、添加回调规则添加失败。
A:检查下回调规则名称是不是用的汉字,回调规则只能是数字、字母,不能用汉字。
56、对方离线了之后,发送的消息,上线后如何获取?
A:对方离线,消息会进入离线队列,如果没有集成第三方厂商离线推送,用户上线后,服务器下发给客户端。
57、调用SDK 方法报错: Cannot read property 'lookup' of undefined?
A:因为未登陆成功就调用了SDK 的api,需要在onOpened 链接成功回调执行后再去调用SDK 的api。
58、聊天室如何获取历史消息?
A:两种方式:1、环信服务器端主动推,需要联系商务开通服务,默认10条,数量可以调整。2、通过消息漫游接口自己去拉取历史消息,各端都有提供拉取漫游消息接口。
59、拉取消息漫游,conversationId是怎么获取的?
A:单聊的话,conversationId 就是对方用户的环信id。
群聊或聊天室的话,conversationId 就是groupid 或者chatroomid。
60、如何实现只有好友才可以发消息?
A:可以使用环信的发送前回调服务,消息先回调给配置的回调服务器,然后去判断收发双方是否是好友关系,如果是好友关系,那么下发消息,如果是非好友关系,则不下发消息,客户端ui可以根据不下发返回的code做提示。
61、调rest接口报401是什么原因?
A:调环信rest接口,需要管理员权限的token,确认下请求是否有token,且是在有效期,token的有效期以请求时服务器返回的时间为准。
62、调修改群信息报错如下
System.Net.WebException:“远程服务器返回错误: (400) 错误的请求。
A:检查下请求体,看下参数格式是否正确,比如"membersonly",,"allowinvites" 这两个参数的值为布尔值。
63、注册用户username是纯数字可以吗。
调restapi是可以的,serversdk的话,为了让用户使用更规范的名字,命名规则更严格一些,要求首位是字母。
64. web端怎么关掉日志?
3.6.0以上的 设置WebIM.logger.disableAll();
3.6.0之前的版本 配置isDebug false
65. 注册用户名的时候是大写,为什么这里用户名会转成了小写,导致两位聊天列表里同一个人出来了两条记录。
登录的用户环信这边会默认使用小写登录的,这里您可以都用小写,来避免这个问题
66.web聊天提示用户未登录?
所有的操作必须都在登录的情况下,刷新页面,跳转页面,都是需要重新登陆的。
67. 提示Cannot read property '_msgHash' of undefind
检查下是否登录成功,或者检查下接口调用次序,看看有么有在onOpened执行之前就有一些接口调用的情况。
68. 在demo测试群组聊天时,群成员消息上显示的是用户名,可以显示昵称吗?
可以在拿到这个ID的时候,去调获取用户属性的api,拿到用户对应的昵称等信息,再去展示。
69. A用户向B用户发送消息,为什么收不到呢?
1). 检查A用户是否发送成功
2). 如果发送成功,看下B用户是否有多设备登录,有可能在其它设备登录接收了这条消息,所以该设备不会再接收
3). 消息如果发送成功 看下监听回调onTextMessage是否收到消息 如果收到消息,看下ui层面是否有渲染
70. 已经删除好友,在环信管理后台已经相互看不到两个人的好友关系了,但还是能互相收到消息
环信默认是支持陌生人通讯的,只要知道对方ID 即可
demo中是做了好友验证,做了不是好友消息不渲染,但是能收到,会执行监听
71. 文字内容消息的长度上限是多少?
sdk目前没有限制 rest api限制 了40k
72. 聊天记录发送的url怎么变成可跳转的?
可以通过a标签,发送消息的时候可以判断是否是http连接,然后用a标签包裹上。
73. web端和移动端发送消息需要通过服务端集成,才能互相发送消息吗?
这个不要通过服务端集成,使用同一个appkey就可以互相发送消息。
74.uniapp和vue的demo,收到消息时,有提示声音吗?
这个demo中没有实现,收到消息有对应的监听回调,可以在回调触发时,实现自己的业务逻辑。
75. web端这边发送消息时没有自带时间戳吗?
目前在发送的时候没有自动传入发送的时间戳,可以在发消息的ext自行传入时间戳即可。
76. 如何设置在线消息免打扰?
单个会话的免打扰模式您可以自己去实现,要自己去维护一个免打扰list集合,当监听到有消息时,去判断下是否是免打扰用户,如果是免打扰用户,就不去提醒。
群组免打扰:可以使用rest去设置。("notification_ignore_群组id": true)
77.群组和聊天室区别
聊天室: 随进随出 在线可以收到聊天室消息,如果离线了,那么两分钟后自动退出聊天室,不会在接收消息。
群组:有owner群主 和管理员 可分为私有群 公有群 加入后只要不被踢出去 就就会一直在群里 在线情况下正常接收消息,离线之后会产生离线消息,在线之后接收到离线时的离线消息推送。
78. 设置全局禁言后,移除单个用户禁言为什么不生效?
全局禁言 和 把id单独添加到禁言列表 这虽然是同一个功能 但是是2种不同的实现方式 全局禁言是后台开关控制 所以开启全员禁言后 再去单独把某个id移除禁言列表 实际上是不生效的 在开启全员禁言时只有添加到白名单列表中才会生效
79、查到用户在群里,为什么发消息提示602 not in group or chatroom
需要查询该用户加入的群组中是否有这个群,可能会是脏数据导致的假象。需要用户重新加入群组
80、为什么设置了敏感词还能发送成功
需要排查是否将敏感词通过ext扩展发出,ext里面的内容不过敏感词
81、发送消息报错604 blocked by mod_antispam
反垃圾导致的,需要排查是否多次发送同一条消息,有没有收到反垃圾邮件
82、环信音视频报错conn.sendMSync is not a function
sdk4.0导致的问题,回退到3.6.3可正常使用
83、rest发送的消息不走发送前回调
84、为什么发送的消息,拉取会话列表拉取不到
需要排查是客户端发送的消息还是rest发送的消息,rest发消息写会话列表需要单独开通
85、在群组中,只有最后一个进入群的人可以接收到群里面其余人发送的信息,在这时如果有另一个人加入群,那么这个加入群的人可以接收其他人的信息,剩下的人接收不到,
sdk版本的问题,替换为最新的sdk即可解决
86、上传到环信的视频无法在safari浏览器播放的问题
url?xxx=true&origin-file=true 拼接这个后缀
87、vue项目打包上线,报跨域问题
检查项目是否是线上启动,有可能只启动了本地文件
88、设置某个群组推送免打扰
curl -X PUT {{url}}/{{org}}/{{app}}/users/{{username}}' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: {{Authorization}}' \
--data-raw '{
"notification_ignore_{{groupId}}": true,
"notification_ignore_{{groupId2}}": false
}'
89、web端如何变更群主?
web需要调rest方法,web客户端去调客户自己服务器,然后客户服务器再去调环信服务器,调这个转让群组的方法。
https://docs-im.easemob.com/im/server/basics/group#%E8%BD%AC%E8%AE%A9%E7%BE%A4%E7%BB%84
90、添加群管理员,返回结果是404,是什么情况呢?
首先需要确认下群组是否还是存在的,另外确认下用户是否加入了群组,添加管理员权限的成员一定要是该群的成员。