====== 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设置标识,在获取所有会话排序的时候,遍历拿到设置扩展标识会话单独排序,其他的会话再进行排序,然后再放在一个集合里去展示,可以参考:[[http://baijiahao.baidu.com/s?id=1662233774152864177&wfr=spider&for=pc | 会话置顶]] ---- **发送语音消息附件可以是什么格式的?** 格式没有限制,只要两端可以实现播放就可以 ---- **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://docs-im.easemob.com/im/android/sdk/import#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB | http适配 ]]。 ---- **调用初始化报错空指针.** 确认下是否在初始化成功之前调用 EMClient.getInstance().setDebugMode(true)方法导致的。 ---- **如何实现用户列表的头像昵称?** 首先用户信息环信这边是不保存的,需要保存到app服务器端,然后根据用户id去app服务器端获取保存在显示到UI。官网提供文档说明可以看下 [[http://docs-im.easemob.com/im/other/integrationcases/nickname#%E6%98%B5%E7%A7%B0%E5%92%8C%E5%A4%B4%E5%83%8F%E7%9A%84%E6%98%BE%E7%A4%BA%E4%B8%8E%E6%9B%B4%E6%96%B0|昵称和头像的显示与更新 ]] 也可以通过消息扩展来实现头像昵称具体可以看下文档[[https://www.cnblogs.com/zhujiabin/p/9566630.html|实现昵称头像]] ---- **怎么可以获取到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端推送问题 ====== ---- **离线推送收不到,怎么排查?** 参考文档:[[http://docs-im.easemob.com/im/android/push/troubleshooting | 离线推送问题排查]] ---- **vivo推送配置没有问题,为什么测试收不到推送?** 推送的内容不能是纯数字、纯英文、纯符号、符号加数字,包含“测试”字样、大括号、中括号 ---- **华为手机上为什么收不到华为推送?** 在华为手机上如果启用了FCM推送,会优先走FCM推送,建议不启用FCM推送 ---- **离线推送角标如何设置?** 可以设置华为和小米的离线角标,小米需要到小米官网找文档参考,华为角标参考[[http://docs-im.easemob.com/im/android/push/thirdpartypush#%E5%8D%8E%E4%B8%BA%E6%8E%A8%E9%80%81%E8%A7%92%E6%A0%87 | 华为角标]] ---- **离线推送自定义推送提示?** 参考文档在消息扩展中设置对应的字段:[[http://docs-im.easemob.com/im/android/push/thirdpartypush#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8E%A8%E9%80%81%E6%8F%90%E7%A4%BA | 自定义推送提示]] ---- **配置小米推送之后接收不到,是什么原因?** 检查下清单文件里小米推送相关的是否都配置,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配置[[http://docs-im.easemob.com/im/android/sdk/import#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB| 配置项]] ----