注册

【环信IM集成指南】Android 端常见问题整理

1、如何修改系统通知中的头像和用户名

系统通知是在主module中自己写的,demo中是AgreeMsgDelegate,InviteMsgDelegate,OtherMsgDelegate中去修改头像和用户名。



2. 如何修改会话列表中系统消息的头像和消息里的环信ID?

在创建系统消息的时候,去修改设设置的username。
系统消息的创建一般在好友监听和群监听中。



3. app端使用token登录,怎么获取单个用户的token?

获取单个用户的token需要调rest接口去获取。
文档中的Request Body要修改一下使用:

{"grant_type": "password",

"username": "omg2",

"password": "123456"}

参考文档:http://docs-im.easemob.com/im/server/ready/user#获取管理员权限


4. 设置群组全员禁言后,怎么获取该群组是否是全员禁言状态?
调用获取群组详情的api拿到EMGroup对象,然后再调用isAllMemberMuted去获取是否全员禁言。

EMGroup group = EMClient.getInstance().groupManager().getGroupFromServer(groupId);

group.isAllMemberMuted();


5. 登录成功后获取不到群组信息,后台查看用户是在群内,怎么解决?
检查下是否是从本地获取的群组信息,当用户打开app时,需要先从服务器拉取群组信息(放子线程中)。




6. 何时调用本地群组信息,何时调用从服务器获取群组信息?
打开App,从服务器拉取(从服务器拉取之后,sdk会保存在本地,再调用本地获取能拿到信息),当群成员更新的时候,从服务器获取。


7. 如何设置群组永久禁言?
将禁言时间设置为-1即可。
EMClient.getInstance().groupManager().muteGroupMembers(groupId, muteMembers, -1);


8. 获取群成员数总是来回变化?

检查看下是否使用的是获取完整的群成员列表。
参考文档:https://docs-im.easemob.com/im/android/basics/group#获取完整的群成员列表


9. 消息能发送成功,但是接收不到别人发给我的消息。
检查下注册的环信id是否含有大写字母,如果含有大写字母的话,需要在登录的时候去转换成小写,发送消息等操作都是需要使用小写字母的。


10. 创建聊天室,显示you hava no permission to do this
创建聊天室,只能使用rest接口去创建。
参考文档:https://docs-im.easemob.com/im/server/basics/chatroom#创建聊天室

11. 设置的自动同意添加好友,为什么添加之后好友列表里查找不到?

回答:用户A添加 用户 B为好友,如果用户B是离线状态的话,用户A的好友列表是里不显示用户B的,用户 B上线之后,用户A的好友列表中会出现用户B。


12. 怎么去设置头像和昵称?
EaseIMkit设置头像和昵称:
1.头像和昵称是Easeimkit处理的,我们只需要在application中调用easeimkit的setUserProvider根据环信id,将本地存储的头像和昵称封装到EaseUser中返回给Easeimkit即可(具体可参考demo)
2.getUserInfo中的处理逻辑是:根据username先去本地获取,如果本地获取不到,再从服务器获取,并保存到本地或者做一个三级缓存,然后,再刷新会话列表。(注:getuserinfo是同步的)


13. 如何设置是听筒模式还是扬声器?
回答:easeimkit中isSpeakerOpened()回调中去设置。



14. 怎么发送红包消息?
1.发送自定义消息并携带扩展字段(扩展字段用来判断是显示已领取还是未领取),设置红包的自定义布局(已领取和未领取),默认未领取。
2.当用户点击领取红包之后(修改扩展字段的为已领取状态),将未领取隐藏显示已领取。并发送cmd消息,在接收到cmd消息后 ,修改扩展字段的为已领取状态,并刷新ui。
3.当用户杀掉app进来之后,根据扩展字段来决定显示已领取还是未领取。


15. 发送文件大小超过20M怎么办?
发送视频文件(在EMOption中设置不上传不下载),先去上传到你们的服务器上保存,拿到url放在消息里发送给对方(setRemoteUrl),对方收到之后解析消息里的url去下载视频文件。(注:这种方法会导致所有的附件都不下载不上传)



16. demo中使用的是百度地图,我想使用高德地图,怎么使用?
需要重写聊天页面地图的点击事件,跳转到高德就可以。



17. 在聊天页面点击视频,没有反应?
需要去自定义一个fragment去继承EaseChatFragment,重写EaseChatFragment中的selectVideoFromLocal。(具体实现可以参考demo中的ChatFragment)



18. 拉取漫游数据后,展示的时间是乱的,没有按时间排序?
1. 先打印下漫游数据和本地缓存中的数据是否一致?
2.检查下在EMOption中是否设置
option.setSortMessageByServerTime(false)



19.EMMessage怎么区分离线消息还是在线消息?
EMMessage中没有方法可以去判断是离线消息还是在线消息。
实现方法:
可以在接收消息的监听中,获取到消息的时间戳与本地时间戳做对比,超过一定的时间就算离线消息。 但是前提需要保证本地的时间戳是对的。



20.集成了环信SDK后的安卓App,只要授予了定位权限,一启动就会访问用户的位置信息,如果启动App不访问用户位置信息?
在EMOptions中设置setEnableStatistics为false。



21. gradle的形式引入easeimkit,怎么去监听发送消息成功或者失败?

在easeimkit中没有将发送成功的事件,回调到fragment中,如果用户需要在自定义view中用的话,继承EaseChatRow并重写onMessageSuccess()。



22. 如何实现一键已读功能?
可以调用将所有消息置为已读的api:

EMClient.getInstance().chatManager().markAllConversationsAsRead();
参考文档链接:http://docs-im.easemob.com/im/android/basics/message#未读消息数清零



23. 怎么收不到oppo推送?
1.检查下是否已经安装官网的文档去集成了oppo推送,在控制台搜索
EMPushHelper,是否有[EMPushHelper] uploadTokenInternal success输出,如果没有输出 ,请检查下oppo的集成。
2.在完成第一步的情况下,还是收不到离线推送,请检查下密钥上传的是否正确,console后台上传密钥是:master secret ,在 app中上传的密钥的是app secret。如果不正确请删除重新上传并提交工单提供appkey+证书id,让环信技术支持在后台解禁。


24.如何设置在线消息免打扰?
单个会话的免打扰模式您可以自己去实现,要自己去维护一个免打扰list集合,当监听到有消息时,去判断下是否是免打扰用户,如果是免打扰用户,就不去提醒。
群组免打扰:可以使用rest去设置。("notification_ignore_群组id": true)


25.搜索会话列表如何根据昵称搜索(或者根据其他某个字段去搜索)。
可以把会话显示的昵称(或某个字段)放在会话的扩展里,搜索的时候遍历会话扩展里的昵称。





26.群公告的长度有限制吗?

群公告不能超过512 字符。


27.如何设置群扩展字段

1.通过EMGroupOptions的extField设置的扩展字段。
2.从服务器获取群组信息,获取getExtension
EMGroup group = EMClient.getInstance().groupManager().getGroupFromServer(groupId);group.getExtension();


28.oppo推送报空指针
Process: com.example.is, PID: 24696
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
at com.heytap.mcssdk.d.a(Unknown Source:7)
at com.heytap.mcssdk.d.l(Unknown Source:6)
at com.heytap.mcssdk.d.n(Unknown Source:0)
at com.heytap.msp.push.HeytapPushManager.isSupportPush(Unknown Source:4)
at com.hyphenate.push.platform.oppo.a.b(Unknown Source:0)
at com.hyphenate.push.platform.a.a(Unknown Source:6)
at com.hyphenate.push.EMPushHelper.a(Unknown Source:145)
at com.hyphenate.push.EMPushHelper.register(Unknown Source:35)
at com.hyphenate.chat.EMClient$7.run(Unknown Source:204)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)

需要在application中对oppo进行初始化(如下图)。



29、android端本地在构造图片消息时 可以设置缩略图大小

( EMImageMessageBody.setThumbnailSize()) 也可以在console后台进行设置.

30、接收方接收到图片消息后 为什么remoteUrl和thumbnailUrl是一样的

服务端只存储原图,如果需要下载缩略图得话,在header中添加thumbnail: true”,当服务器看到过来的请求的 header 中包括这个的时候,就会返回缩略图,否则返回原始大图。


31、环信即时推送一次性可以给多少用户推送消息?

回答:一次可以推100个


32、漫游功能可以配置过滤cmd、已读回执等消息 

需要联系环信工作人员进行配置


33、如果是内网环境、物联网定向流量卡等 需要配置域名白名单或者ip白名单 允许访问环信接口 

(以上需要先对接商务验证身份后会提供对应的域名或者ip地址)


34、Android端如果有使用okhttp三方网络框架,没有做特殊处理可能会遇见SSL无法获取到信任证书问题 

可以参考这篇文章解决:https://www.imgeek.org/article/825359148


35、批量获取用户属性一次性最多获取100个id属性 超过的可以分段获取


36、开通敏感词后发现默认词库过滤了自己想要的词汇 

导致消息发送失败或者以*号展示 

这种情况下可以联系环信这边配置敏感词白名单进行过滤(需要提供appkey 和 需要添加白名单的词汇)


37、某些情况下客户端只能允许https协议 

这个有2种解决方式 

1、如果是已经上线的 可以直接找环信这边修改dnsconfig配置 全部换成https协议 

2、如果是开发中的 可以在sdk初始化的时候在EMoptions里面设置onlyhttps


38、关于Android第三方推送对接 

比如极光厂商对接、阿里云推送厂商对接、友盟厂商对接 这些目前来看都是可以实现的 只不过需要客户侧做一些特殊处理,对应推送厂商的sdk可以不用在重复
进行依赖,环信这边只需要在console后台上传证书信息并在端上初始化sdk的时候配置push信息、获取到第三方推送厂商返回的devicetoken并上传给环信进行绑定即可。



41、rest 发送消息可以设置ip白名单

也就是说可以配置自己服务器的ip,除了该服务器可以访问环信其它ip的请求全部过滤,防止重要信息泄露后有人故意往调用发送消息接口(这个在console后台安全配置可以设置)


42、目前android这边发现有些情况下会出现自己只登录了一个设备却老是被其它设备踢下线

查看登录记录后发现是来自同一个设备踢下线的事件,这种情况下就得分析一下是什么原因导致的自踢:
1、集成问题多进程多次初始化sdk会出现类似现象 

2、网络问题a账号登录服务端记录了状态之后,a账号突然没网服务端没法在心跳触发之前即时更新离线状态,这时候网络又恢复进行了重连又进行了登录,这时候服务端本身记录是登录状态,再次登录会把之前的踢下线,这种现象会造成自踢(解决方案 可以联系环信人员配置不自踢)


43、推送扩展字段结构 其中e为完全用户自定义扩展

而数据来源为em_apns_ext字段和em_apns_ext.extern两者有其优先级。

{
"payload":{
"ext":{
"em_apns_ext":{
"em_push_title":"您有一条新消息",
"em_push_content":"您有一条新消息",
"test1":"1",
"test2":"2",
"extern":{
"test3":"3",
"test4":"4"
}
}
}
}
}

自定义负载支持方式为,主动构建如下结构
{
"t":"toUsename",
"f":"fromUsername",
"m":"msg_id",
"g":"group_id",
"e":{}
}


1、当extern不存在时,e内容为em_apns_ext下push服务未使用字段。具体为移除em_push_title,em_push_content,em_push_name,em_push_channel_id,em_huawei_push_badge_class字段后剩余所有。如上则为

{
"e":{"test1":"1","test2":"2"}
}


2、当extern存在时,使用extern下字段。如上则为

{
"e":{"test1":"3","test2":"4"}
}



44.发送语音消息,想要吧amr修改成wav
回答:可以在录制的时候去修改EaseVoiceRecorder


45.用户隐私协议
回答:https://www.easemob.com/protocol
方案:需要将第三方的初始化写在application的public方法中,加一个判断,判断是 第一次安装时,不初始化,当用户点击了同意协议之后,再执行application中的public的初始化。


46.聊天室异常退出2分钟才算离开聊天室,这个能缩短时间么?比如几秒钟
回答:可以设置成0,断线立刻退出聊天室(可以提工单让环信工作人员配置)


47.音视频聊天设置声音外放
protected void openSpeakerOn() {
try {
if (!audioManager.isSpeakerphoneOn())
audioManager.setSpeakerphoneOn(true);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
} catch (Exception e) {
e.printStackTrace();
}
}


48.发送图片成功后,如何获取发送的原图?

回答:1.需要在发送图片的时候设置发送原图;

2.发送图片成功后,可以获取到远程的服务器路径,获取到路径自己下载





49. 如何添加自定义的表情(类似于demo中的兔斯基)
回答:
1.在聊天页面( ChatFragment )中添加:
//添加扩展表情
chatLayout.getChatInputMenu().getEmojiconMenu().addEmojiconGroup(EmojiconExampleGroupData.getData());
2. 在applicaiton中注册一下Delegate。。
EaseMessageTypeSetManager.getInstance()
.addMessageType(EaseExpressionAdapterDelegate.class) //自定义表情


50.出现下图报报错


解决办法:升级一个根目录build.gradle 里面的classpath 'com.huawei.agconnect:agcp:1.4.1.300'



51. 在聊天页面不显示地图的图片?
回答:百度地图没有缩略图的api,如果使用高德的话,应该是可以的


52. 自定义的布局没有已读未读?
回答:需要去发送一个已读ack,参考 EaseTextViewHolder #handleReceiveMessage去写 。

53. 环信管理后台查询到replaced是什么意思?
回答:replaced在后台msync的定义就是旧连接被新连接踢掉了


54. 使用了极光的厂商推送,在环信中怎么使用?
回答:产生冲突的原因:极光和环信使用的都是厂商推送
(一)用户既使用环信的离线推送,又使用极光的厂商推送的情况下:
解决思路:
1.小米,vivo,oppo,魅族,华为需要在极光中获取到token时调用环信的api上传给环信;
2.在application中先初始化极光,再初始化环信(要保证环信的初始化是在主进程中);
3.通过EMOptions设置各个厂商的证书appId和appKey。
4.在配置清单中修改下各个厂商的service
(二)不使用环信的离线推送,可以开通实时回调功能,将离线消息都配置到客户的服务器,客户使用极光推给用户。


55. 离线推送可以跳转到指定的页面吗 ?
回答:小米的在onNotificationMessageClicked里去解析MiPushMessage的content,拿到对应字段去自行跳转页面
vivo的在onNotificationMessageClicked里解析UPSNotificationMessage,拿到对应字段去自行跳转页面
OPPO的跟华为是一样的,在启动页的onCreate里去获取参数跳转
默认点击打开应用首页,可以在客户端首页获取到。在onCreate里去调用
Bundle bundle = getIntent().getExtras();
if(bundle != null){
String f = bundle.getString("f");
String t = bundle.getString("t");
}

字段对应的含义
f:from
t:to
m:msgid
g:groupid



56. 看文档fcm集成成功了,怎么没有收到推送?
回答:fcm是唤醒应用,环信服务器会将离线消息下发给客户端,接收到消息之后,自己做本地通知 。
接收消息的监听:在application中初始化环信成功之后,注册一个接收消息的监听,自己做一个判断是否运行在后台,如果运行在后台,本地通知,https://docs-im.easemob.com/im/android/basics/message#接收消息


57、 安卓和iOS音视频不通?
回答:看下安卓的sdk版本和ios的环信sdk版本,
3.7.5之前的版本使用的是环信的音视频,3.8.0之后的版本使用的是声网的音视频,需要确保各端在相同的版本下。


58. 在聊天页面点击大图崩溃?
回答:需要在配置清单中配置下EaseShowBigImageActivity。
android:screenOrientation="portrait"/>

59、
Android端账号被踢下线,消息接收不到。

账号在其他设备上登录,将当前设备踢下线的时候,当前设备需要在监听到被踢的时候调用退出的api,并传false。




60、Android 11报崩溃异常,报错如下:

java.lang.RuntimeException:Unable to start receiver com.hyphenate.chat.EMMonitorReceiver: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.ant.health/com.hyphenate.chat.EMChatService }: app is in background uid UidRecord{ab5b452 u0a320 RCVR idle change:uncached procs:1 seq(0,0,0)}


A:去掉以下这几个方法,这几个方法对于安卓低版本保活的, 对于高版本 ,这个保活可以去掉。 高版本对保活有限制。



61、添加回调规则添加失败。
A:检查下回调规则名称是不是用的汉字,回调规则只能是数字、字母,不能用汉字。


62、对方离线了之后,发送的消息,上线后如何获取?
A:对方离线,消息会进入离线队列,如果没有集成第三方厂商离线推送,用户上线后,服务器下发给客户端。


63、调用SDK 方法报错: Cannot read property 'lookup' of undefined?
A:因为未登陆成功就调用了SDK 的api,需要在onOpened 链接成功回调执行后再去调用SDK 的api。


64、聊天室如何获取历史消息?
A:两种方式:1、环信服务器端主动推,需要联系商务开通服务,默认10条,数量可以调整。2、通过消息漫游接口自己去拉取历史消息,各端都有提供拉取漫游消息接口。


65、拉取消息漫游,conversationId是怎么获取的?
A:单聊的话,conversationId 就是对方用户的环信id。
群聊或聊天室的话,conversationId 就是groupid 或者chatroomid。


66、如何实现只有好友才可以发消息?
A:可以使用环信的发送前回调服务,消息先回调给配置的回调服务器,然后去判断收发双方是否是好友关系,如果是好友关系,那么下发消息,如果是非好友关系,则不下发消息,客户端ui可以根据不下发返回的code做提示。


67、调rest接口报401是什么原因?
A:调环信rest接口,需要管理员权限的token,确认下请求是否有token,且是在有效期,token的有效期以请求时服务器返回的时间为准。


68、调修改群信息报错如下
System.Net.WebException:“远程服务器返回错误: (400) 错误的请求。
A:检查下请求体,看下参数格式是否正确,比如"membersonly",,"allowinvites" 这两个参数的值为布尔值。


69、注册用户username是纯数字可以吗。

调restapi是可以的,serversdk的话,为了让用户使用更规范的名字,命名规则更严格一些,要求首位是字母。


70、自定义铃声只支持华为和小米
华为:
https://docs-im.e·asemob.com/im/other/integrationcases/appimnotifi#自定义推送铃声
小米:
直接调用rest接口去创建小米的通道,同时设置下铃声,https://dev.mi.com/console/doc/detail?pId=1163#_11
小米铃声 需要通道id 。。


自定义铃声
自定义播放铃声需要携带扩展字段 em_apns_ext 下面携带的就是标题和内容 em_android_push_ext 下 就是存放小米的通道id的 直接调用rest接口去创建小米的通道,同时设置下铃声


71、push推送后 点击通知栏后在哪里 设置跳转页面?
小米的在onNotificationMessageClicked里去解析MiPushMessage的content,拿到对应字段去自行跳转页面vivo的在onNotificationMessageClicked里解析UPSNotificationMessage,拿到对应字段去自行跳转页面OPPO的跟华为是一样的,在启动页的onCreate里去获取参数跳转
Bundle bundle = getIntent().getExtras();
if(bundle != null){
String f = bundle.getString(f);
String t = bundle.getString(t);}
字段对应的含义f:fromt:tom:msgidg:groupid.


72、在线push推送:
在线推送的话 3.8.7sdk已经封装在线push推送 如果想收到推送消息的话,需要自己做cmd消息 接收本地通知
3.8.5的话 需要 自己 去发一条 cmd消息 携带扩展字段, 端上接收到以后 做一个本地通知 。


73、 根据搜索框查找全局消息:
android 端调这个接口,不传from字段,实现全局搜索,EMClient.getInstance().chatManager().searchMsgFromDB
可以先拿到本地所有的会话列表 去搜索每一个会话的消息内容 , 然后存放到一个大集合,展示的话直接展示大集合里面的数据, 这个操作需要自己去实现的,


74、Dcoumentfile

自己加一个Documentfile的远程依赖,就可以了 百度连接 :https://developer.android.google.cn/jetpack/androidx/releases/documentfile?hl=zh-cn如果添加配置还是有问题的话,需要在gradle.properties中添加一下 android.enableJetifier=true


75、 头像昵称 用url获取:
只需要保证你返回得easeuser对象得数据是需要展示得ui得数据即可,不需要去管会话列表。。。可以打印在setUserProvider,看下返回得username数据,加入会话列表有十个,那么就会返回这个十个会话得username,然后,你需要根据返回得username去本地数据库查询对应得头像和昵称,如果有,就返回,如果没有就从网络请求并存数据,并去刷新会话列表,刷新会话列表得原因就是因为只要刷新就会再次执行setUserProvider,就又走一边这个逻辑,从数据库取
如果用环信的room数据库进行存储直接将demo中的db文件下所有类拉入自己的项目中



76、发送视频体积10mb:
相机是直接调用的系统的,跟随的是系统的大小,我拍摄15s视频大概18m左右。环信系统默认的是只能发送10M的视频文件,您需要在发送视频之前做下压缩 ,在调用环信发送视频方法之前去做判断,超过10m的话,压缩下再发送

 
77、用户A给B发送自定义消息,B可以收到,后台拿用户A的账号给用户B发送,B也可以收到消息,但是用户A的聊天页面不显示发送消息的内容
服务端:A send custom message B,B 看到自定义消息 C send cmd message A,携带自定义消息内容、A、B客户端:A receive cmd message ---> 解析message ---> 向B的会话插入以A身份发的自定义消息


78、 解决 UTF-8
解决问题的步骤:

步骤1、首先,在项目build.gradle文件中添加如下代码:
buildscript {
tasks.withType(JavaCompile) {//解决编码错误: 编码UTF-8的不可映射字
options.encoding = "UTF-8"}}


步骤2、如果导入AS后,文件代码注释出现乱码问题。将AS右下角 “file encoding”编码格式,先改为“GB2312”,弹出对话框,选择“reload”,此时注释乱码消失。接着再改为“UTF-8”,弹出对话框,选择“convert”,即可。


79、 用户在上线后报218
218 是指当前SDK已经登录了一个id,如果没有退出,然后再使用另外一个id 登录的话会提示这个错误
一般开启了自动登录的话,SDK 初始化后会自动登录上次的ID,可以排查一下这块的逻辑。
如果开启了自动登录,不需要再调用登录接口,如果没开启自动登录,可以在应用打开时调用登录api
这种情况其实再调用下logout 再调用login 其实也是可以的

80、 进入聊天页面后,拉取聊天页面之后,未读数+1
检查下调用conversation.getMessage(string, bool)时,传的是不是true。


81、 小米手机如何设置自定义铃声?

回答:1).需要先去小米厂商申请通道并设置添加上自定义铃声;

2) .安卓端在发送消息时,需要携带上在小米厂商申请的通道名称。


82、 华为手机如果设置自定义铃声?
在发送消息之前去设置扩展字段,
"em_android_push_ext":{
//指定自定义渠道
"em_push_channel_id":"Channel id",
"em_push_sound":"/raw/appsound"
}


注意事项:
(1)目前只支持华为EMUI 10以上的系统。
(2)华为EMUI 10以上自定义推送铃声,需要设置channel_id,通过em_push_channel_id进行设置。
需要注意的是,即使指定了渠道标识(channel id),消息最终能否展示在应用渠道上,受用户终端上该渠道是否创建以及渠道的开关策略控制。
a、如果本地已经创建该渠道,且已设置了对应的自定义铃声,收到推送消息时会播放自定义铃声。
b、如果本地没有创建指定的渠道,则华为会对消息进行智能分类,根据消息设置的级别及智能分类的结果,两者取低,根据级别下发到服务提醒,普通通知与营销通知三个中的一个通知渠道,如果该通知渠道之前没有创建且不是营销通知,则设置自定义铃声有效。
(3)对于华为EMUI 10以上系统,需要添加em_push_name和em_push_content参数,否则容易被华为通知智能分类分到营销通知渠道,从而不能播放自定义铃声。
(4)由于铃声是通知渠道的属性,因此铃声仅在渠道创建时有效,渠道创建后,即使设置自定义铃声也不会播放,而使用创建渠道时设置的铃声。



83、fcm离线push 通知栏是正常显示 但是 EMFCMMSGService 的onMessageReceived 不走?
设置下这个data数据,onMessageReceived没有执行的原因是没有data数据。




84、撤回消息提示,自己撤回的本地能加载出来,对方撤回的消息,杀了app再打开这条提示就没了。

在插入消息时,先设置to,再设置from




85、从服务器端获取会话列表,没有获取到rest发过来的消息?
联系下环信工作人员,或者提交工单,让工作人员配置下。



86、push推送消息成功了,但是在环信后台管理界面查不到?
把single改成list;




87、 怎么全局搜索?
调这个接口,不传from字段,实现全局搜索,

EMClient.getInstance().chatManager().searchMsgFromDB


88、 地图能正常显示,怎么显示缩略图?
百度地图没有缩略图的api,如果使用高德的话,是可以的。


89、EMMessage怎么区分离线消息还是在线消息?

EMMessage中没有方法可以去判断是离线消息还是在线消息。
实现方法:
可以在接收消息的监听中,获取到消息的时间戳与本地时间戳做对比,超过一定的时间就算离线消息。 但是前提需要保证本地的时间戳是对的。


90、在使用环信时,偶尔发送消息会出现500,是什么原因?
1.检查下用户是否登录?
2.检查下网络是否正常?


91、如何删除和某个用户的所有聊天记录?
可以直接调用api去删除EMClient.getInstance().chatManager().getConversation("环信id").clearAllMessages();


92、何时调本地取群组信息,何时调从服务器取群组信息?
回答:打开app,从服务器拉取(从服务器拉取之后,sdk会保存在本地,再调用本地获取能拿到信息),当群成员更新的时候,从服务器获取


93、如何设置群扩展字段?
1.通过EMGroupOptions的extField设置的扩展字段。
2.从服务器获取群组信息,获取getExtension
EMGroup group = EMClient.getInstance().groupManager().getGroupFromServer(groupId);group.getExtension();


94、Android 百度地图怎么替换为高德地图?
1.将easeimkit中关于百度地图的集成去掉,改成高德地图;
2.在chatfragment中重写位置的点击事件方法startMapLocation或者是直接在EaseChatFragment中直接修改点击事件startMapLocation跳转到高德地图;
3.在调用环信api去发送地理位置消息时,传入高德获取到的经纬度。


95、Rest发消息会话列表为什么获取不到?
默认rest 消息不写会话列表,如果需要的话,可以联系对接商务开通该项服务。



96、appkey获取会话列表服务是开通状态,但获取不到会话列表?
检查下用户id是不是大小写混写了,大小写混写会导致获取不到会话列表,如果自己应用有区分大小,登陆环信时建议全部转为小写。


97、拉黑与被拉黑发送消息返回什么错误码?
A 拉黑B,A可以给B正常发消息,B给A发消息会提示报错,3.6.3的返回604错误码,Android返回210错误码


98、不注册环信id可以收发消息吗?业务场景支持游客模式,不需要注册的。
使用环信必须要注册环信id,对于环信来说,收发消息的双方是环信id,环信并不关心该用户是客户业务系统里的哪个用户,游客也是客户业务的定义,环信本身不存在游客的说法,任何身份的用户对于环信来说就是一个环信id。


99、不登录可以发消息吗?业务场景不需要登录,只是授权。
发消息是必须要登录环信的,客户自己的应用可以实现为不用登录就可以发消息,但在进入自己应用的时候或者其他时机,比如点击发消息、咨询等icon时,底层需要去调用环信的登录方法,去登录环信,对于客户的用户来说是没有登录这个操作。


100、聊天室支持全员禁言吗?
A:支持,群组、聊天室全局禁言都是支持,调以下api去设置。
聊天室:
全员禁言:POST 'http://{url}/{org}/{app}/chatrooms/{chatroomId}/ban'
解除全员禁言:DETELE 'http://{url}/{org}/{app}/chatrooms/{chatroomId}/ban'
群组:
全员禁言:POST 'http://{url}/{org}/{app}/chatgroups/{chatgroupId}/ban'
解除全员禁言:DETELE 'http://{url}/{org}/{app}/ chatgroups/{ chatgroupId}/ban






11 个评论

占坑,欢迎安卓宝宝留言点菜
写的太好,解决了我的问题!
写的太好了,不愧是你,阿花君
怎样获取用户属性呀,就是那个EMetadata对象,我用了官网上的api来获取 但是报错
集成后接收消息延迟严重,30s左右才接收到,请问一下是什么原因呢?
你可以去官网提工单,让环信的技术帮你查下原因
你说的没有见过,是不是你用的是很早的版本?环信有提供设置用户属性的方法:https://docs-im.easemob.com/im/android/basics/profile#%E7%94%A8%E6%88%B7%E5%B1%9E%E6%80%A7
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jstxapp/com.example.jstxapp.activity.CusMesActivity}: android.view.InflateException: Binary XML file line #6 in com.example.jstxapp:layout/activity_cus_mes: Binary XML file line #6 in com.example.jstxapp:layout/activity_cus_mes: Error inflating class com.hyphenate.easeui.widget.EaseTitleBar有大佬遇到过相关问题吗
看你的这个报错就是xml文件的问题,根据报错,检查下xml
登录和注册闪退怎么办
(android)不懂怎么去拉取历史聊天记录

要回复文章请先登录注册