这是本文档旧的修订版!


Android端集成问题


APP端插入消息设置setUnread(true),为什么未读数不增加?

插入消息的时候,创建发送方向的消息不要设置from,创建接收方向的消息不要设置to,不然可能导致这个问题


如何向本地已存在的消息中插入一个扩展字段?

取到这条消息,然后给消息的ext添加内容后,更新消息到本地数据库就可以了updateMessage


1v1视频通话如何将视频画面添加到悬浮窗view中?

目前1v1不支持将画面添加到悬浮窗view中,多人会议是支持,demo中有具体示例


如何使用环信SDK兼容到8.0上系统?

环信3.5.3版本的SDK已经适配9.0了 在3.4.2版本的SDK适配了8.0


登录提示200,用户已登录怎么处理?

账号登录之后不能重复登录,需要先调用退出方法之后再去登录。


群组免打扰功能如何实现?

环信没有实现群组免打扰功能,只有屏蔽群组消息,免打扰可以自己实现,维护一个设置免打扰用户的list集合,在接收消息时遍历list集合,设置免打扰的用户不做提醒


重新打开APP为什么没有监听到离线消息?

需要注意下消息监听注册的时机,最好是在application里SDK初始化之后去注册,如果在SDK自动登录之后才注册上就会监听不到消息


接收到一条消息,消息监听为什么会执行多次?

注册消息监听是否有对应的注销代码,只有注册多次消息监听才会出现这种情况


是否可以设置公开群开放群成员邀请?

不可以,需要的话可以通过服务端调用rest去添加群组成员


可以设置消息只投递在线的吗?如果对方是离线,再上线就收不到了

cmd透传消息可以设置这个属性去发送,EMCmdMessageBody#deliverOnlineOnly(true)


怎么实现在线消息免打扰?

可以在维护一个消息免打扰的id集合,存放免打扰的id,监听到新消息之后去判断是否是需要免打扰的,是的话就不去调用消息提醒的代码


发送消息为什么不执行回调?

setMessageStatusCallback需要在sendMessage之前去设置。


会话置顶如何实现?

通过给EMConversation设置扩展来实现,给需要置顶的会话调用setExtField设置标识,在获取所有会话排序的时候,遍历拿到设置扩展标识会话单独排序,其他的会话再进行排序,然后再放在一个集合里去展示,可以参考: 会话置顶


发送语音消息附件可以是什么格式的?

格式没有限制,只要两端可以实现播放就可以


app进程被杀死后 如何唤醒APP进行音视频通话?

首先APP被杀死的情况下SDK里面任何回调都不会走的,这里我们只能借助于第三方推送,离线的情况下发送一条消息给对方,对方收到消息后点击打开应用,之后SDK的回调以及注册的广播服务才会生效,去调起音视频通话界面。 需要在通话之前设置EMClient.getInstance().callManager().getCallOptions().setIsSendPushIfOffline(true);


为什么只有在聊天界面新消息有声音提醒?

在聊天界面的消息监听方法中有调用EaseUI.getInstance().getNotifier().vibrateAndPlayTone(message)


切换账号登录,为什么会出现上个账号的会话?

切换账号需要调用logout成功之后再去登录别的账号


集成环信后打包apk,失败报错:Execution failed for task ':app:mergeExtDexRelease

出现这个异常需要排查一下自己项目中是否有和环信UI中使用冲突的库


测试环信demo音视频时 使用蓝牙耳机但声音还是手机扬声器播放

环信demo这边并没有实现切换蓝牙播放音频 这个可以自己监听到


音视频数据是否有加密 如果有的话 加密方式是什么?

环信音视频数据有加密的,AES128加密


如何开启设置外接音频数据?

调用EMClient.getInstance().callManager().getCallOptions().setExternalAudioParam(enable, sampleRate, channel)

enable 是否使用自定义音频数据 true为 使用外部音频数据功能,SDK不启动设备麦克风采集音频 false为 不使用外部音频数据功能,SDK启动设备麦克风采集音频

sampleRate 音频采样率 比如 16000 ,44100, 48000等

channel 音频采集声道 目前只支持单声道


app漏洞扫描发现包含明文存储的数字证书文件

hyphenate_root.crt这个是自签名用的,没有用到,可以忽略


音视频多人会议LiveStream模式下,成员加入为什么不执行onMemberJoined回调?

观众角色加入是不会执行onMemberJoined回调的


调用rest给APP端发送附件消息,url传的我们服务器上的地址,为什么APP端下载不了?

SDK下载会把域名替换为环信的域名,只能下载上传到我们服务器上的附件


发送cmd消息为什么监听不到?

以“em_”和“easemob::”开头的action为内部保留字段,注意不要使用


调用grantRole修改成员角色为什么提示失败General error?

grantRole里传的EMConferenceMember的第一个参数需要是{appkey}_用户id这样的格式,比如:easemob-demo#chatdemoui_user1


聊天室禁言,解除禁言有时不走回调

全员禁言和批量解禁不能混合使用,如果使用全员禁言就需要使用全员解禁。


如何解绑推送token?

调用logout,第一个参数传true。


小程序发送视频消息没有缩略图 android这边该如何处理?

android这边拿到文件后 可以去视频文件前几帧 生成bitmap 来当缩略图使用。


环信音视频时 怎么去设置视图显示的大小?

可以调整SurfaceView的大小和位置 设置setScaleMode EMCallViewScaleModeAspectFill 填充。


注册失败,看log里报错EMSessionManager::createAccount() code: 408?http response: code:208 desc:Registration failed.

这个是没加http的适配,参考文档加上: http适配


调用初始化报错空指针.

确认下是否在初始化成功之前调用 EMClient.getInstance().setDebugMode(true)方法导致的。


如何实现用户列表的头像昵称?

首先用户信息环信这边是不保存的,需要保存到app服务器端,然后根据用户id去app服务器端获取保存在显示到UI。官网提供文档说明可以看下 昵称和头像的显示与更新 也可以通过消息扩展来实现头像昵称具体可以看下文档实现昵称头像


怎么可以获取到id的昵称?

我们的昵称只是给离线推送使用的,没有提供获取的api,如果需要昵称得用户自行去维护。


当手机处于静音模式(铃声最小),但是媒体的音量是开到最大的时候 听语音消息的时候听不到,怎么处理?

因为设置的mediaPlayer.setAudioStreamType,控制音量大小的并不是媒体音量,去指定播放流媒体的类型为STREAM_RING。


多人会议屏幕共享怎么实现?

把EMStreamParam的StreamType设置为DESKTOP,然后去调用publish发布流,在onSuccess里去截取屏幕通过传入自定义视频数据EMClient.getInstance().conferenceManager().inputExternalVideoData(bitmap),这个可以参考demo的ConferenceActivity里的实现


调用System.exit退出程序卡死,怎么解决?

把清单里的EMChatService去掉再运行


退出群组可以保留聊天记录吗?

在初始化的时候去设置options.setDeleteMessagesAsExitGroup(false)


在线的消息通知怎么实现?

在消息监听里监听到新消息去调用消息提醒的代码,在application里去注册消息监听可以在后台的时候去监听新消息,然后去调用发送本地通知栏提示。


多人会议已经发布自己的流了,对方也订阅了,为什么对方听不到我说话?

看下publish传的EMStreamParam设置setAudioOff是不是传的false,是否APP获取了录音权限。


没有在其他设备登录,但是登录之后提示206,被其他设备踢下线,怎么处理?

可能是SDK重连导致的,提供appkey给我们做下配置。


easeUI里的表情可以修改吗?怎么修改?

可以修改,可以在EaseSmileUtils里去修改。


muteChatRoomMembers禁言没有回调参数吗?

需要在子线程里执行,通过try catch判断。


application和聊天界面都注册了消息监听,为什么聊天界面的不执行?

检查看看是不是application的消息监听里处理消息出错导致的。


运行报错提示apache.http.legacy.boot.jar里的类找不到

检查下是否有引入libsqlite.so文件,如果引入没有问题,检查下项目中是否引入了其他第三方带有libsqlite.so 文件导致的冲突。


测试音视频通话会有杂音,这个怎么解决?

测试的设备不能离太近,需要拿得远点,这个是正常的。


如何发送网络图片?

目前这边提供的方法只能发送本地的,如果需要发送网路图片,可以把图片的url放到消息扩展中,接收到消息之后从扩展中拿到图片的url去处理。


报错提示EMCallSurfaceView.getRenderer()空指针

EMCallSurfaceView没有初始化导致。


报错提示调用EMAChatClient里的方法空指针

没有初始化SDK就调用api方法导致。


报错提示MissingLibraryException:libhyphenate.so

so文件加载失败确认jar包和so文件是否是同一个版本里的,如果是还提示报错,删除重新导入试下。


发送图片消息是否可以设置压缩率?

只能选择压缩或者不压缩。


集成报空指针:android.content.Context.getSharedPreferences

需要去调用PreferenceManager.init(context);


集成报ClassNotFound:com.hyphenate.chat.adapter.EMACallConference

因为低版本升级到高版本so包没有替换导致报错 ,将sdk(jar包和so包)删除重新导入新版本,即可正常。


集成报UnsatisfiedLinkError

sdk没有加载成功,可以删除重新导入,


getAllMessage获取缓存中的数据过多,可能造成页面卡顿,如何解决?

用户在返回消息列表之后 可以把本地缓存中的消息删除了 然后调一次loadmessage 加载一定条数的记录 。


如何实现gif动图?

可以在通过图片或者文件类型的消息基础上扩展,在发送消息的时候,在扩展中设置标记为gif,当接收方收到消息时,自己根据扩展判断当前的消息类型,然后自己去解析显示gif图片。


集成报空指针:com.hyphenate.media.EMCallSurfaceView.getRenderer()

EMCallSurfaceView没有初始化导致。


SDK是否支持androidx?

SDK里没有使用到support库,在集成的项目可以去使用androidx,不会影响SDK的使用。如果集成了easeUI也可以去升级androidx,全部替换为androidx下的就可以。 可以使用android studio→Refactor→ Migrate to androidX 升级,也可以手动升级。


Android端推送问题


离线推送收不到,怎么排查?

参考文档: 离线推送问题排查


vivo推送配置没有问题,为什么测试收不到推送?

推送的内容不能是纯数字、纯英文、纯符号、符号加数字,包含“测试”字样、大括号、中括号


华为手机上为什么收不到华为推送?

在华为手机上如果启用了FCM推送,会优先走FCM推送,建议不启用FCM推送


离线推送角标如何设置?

可以设置华为和小米的离线角标,小米需要到小米官网找文档参考,华为角标参考 华为角标


离线推送自定义推送提示?

参考文档在消息扩展中设置对应的字段: 自定义推送提示


配置小米推送之后接收不到,是什么原因?

检查下清单文件里小米推送相关的是否都配置,EMMiMsgReceiver是否配置


集成oppo推送在oppo手机上运行,log里提示[EMPushHelper] onErrorResponse: OPPOPUSH - 900,这是什么原因?

这个提示是设备不支持oppo推送,需要ColorOS 3.1及以上系统才可以。


集成华为推送,log里显示上传推送token的notifier name=0

客户端日志中没有打印证书名称,检查下清单文件配置的证书名称格式是否正确。


离线推送是否有条数限制

第三方有限制推送消息的每日数量,具体可以咨询对应推送厂商。


Android端使用问题


APP端为什么加入会议之后监听不到流?

调用rest创建会议时,confrDelayMillis会议保留时间不建议设置过长时间,设置在60分钟以内即可,不然可能会导致这个问题


创建群组成功之后,APP端通过SDK搜索不到该群?

需要创建公开群,APP端才可以搜索到


登录提示 User dosn't exist

说明项目中使用的appkey下不存在当前登录的环信id,需要注册之后才能登录。


Android端常见报错


Program type already present: com.hyphenate.EMCallBack 异常描述

这是SDK重复报的异常 UI库里面已经包含了SDK 这里有部分用户又去单独引入了一次SDK 导致SDK冲突 去掉单独引入的SDK即可


导入easeui库后,调用相机,发送图片崩溃出现异常,这是什么原因?

大部分是因为7.0文件适配没做 需要注意authorities需要和清单文件中注册的保持一致


运行为什么提示 Appkey is invalid报错?

在确认appkey没有错误的情况下,检查下appkey值的#号是否是中文格式导致的。


运行时,logcat里会提示数据库的报错,但是不影响运行,这是怎么回事?

新版本兼容老版本提示的警告不影响正常使用


为什么注册提示208?

1、确认下初始话是否正确,使用了easeui调用easeui的初始化就行。EaseUI.getInstance().init(context, options)

2、如果在客户端注册确认console后台是否是开放注册

3、注册方法是否在子线程调用

4、如果是android 9.0手机,检查下是否有添加http配置 配置项