1、如何修改系统通知中的头像和用户名系统通知是在主module中自己写的,demo中是AgreeMsgDelegate,InviteMsgDelegate,OtherMsgDelegate中去修改头像和用户名。
2.如何修改会话列表中系统消息的头像和消息里的环信ID?
在创建系统消息的时候,去修改设设置的username。系统消息的创建一般在好友监听和群监听中。
获取单个用户的token需要调rest接口去获取。文档中的RequestBody要修改一下使用:
{"grant_type":"password",
"username":"omg2",
"password":"123456"}
4.设置群组全员禁言后,怎么获取该群组是否是全员禁言状态调用获取群组详情的api拿到EMGroup对象,然后再调用isAllMemberMuted去获取是否全员禁言。
EMGroupgroup=EMClient.getInstance().groupManager().getGroupFromServer(groupId);
group.isAllMemberMuted();
13.如何设置是听筒模式还是扬声器?回答:easeimkit中isSpeakerOpened()回调中去设置。
在easeimkit中没有将发送成功的事件,回调到fragment中,如果用户需要在自定义view中用的话,继承EaseChatRow并重写onMessageSuccess()。22.如何实现一键已读功能?可以调用将所有消息置为已读的api:
24.如何设置在线消息免打扰?单个会话的免打扰模式您可以自己去实现,要自己去维护一个免打扰list集合,当监听到有消息时,去判断下是否是免打扰用户,如果是免打扰用户,就不去提醒。群组免打扰:可以使用rest去设置。("notification_ignore_群组id":true)
25.搜索会话列表如何根据昵称搜索(或者根据其他某个字段去搜索)。可以把会话显示的昵称(或某个字段)放在会话的扩展里,搜索的时候遍历会话扩展里的昵称。
26.群公告的长度有限制吗?
群公告不能超过512字符。
27.如何设置群扩展字段1.通过EMGroupOptions的extField设置的扩展字段。2.从服务器获取群组信息,获取getExtensionEMGroupgroup=EMClient.getInstance().groupManager().getGroupFromServer(groupId);group.getExtension();
28.oppo推送报空指针Process:com.example.is,PID:24696java.lang.NullPointerException:Attempttoinvokevirtualmethod'android.content.pm.PackageManagerandroid.content.Context.getPackageManager()'onanullobjectreferenceatcom.heytap.mcssdk.d.a(UnknownSource:7)atcom.heytap.mcssdk.d.l(UnknownSource:6)atcom.heytap.mcssdk.d.n(UnknownSource:0)atcom.heytap.msp.push.HeytapPushManager.isSupportPush(UnknownSource:4)atcom.hyphenate.push.platform.oppo.a.b(UnknownSource:0)atcom.hyphenate.push.platform.a.a(UnknownSource:6)atcom.hyphenate.push.EMPushHelper.a(UnknownSource:145)atcom.hyphenate.push.EMPushHelper.register(UnknownSource:35)atcom.hyphenate.chat.EMClient$7.run(UnknownSource:204)atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)atjava.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地址)
35、批量获取用户属性一次性最多获取100个id属性超过的可以分段获取
36、开通敏感词后发现默认词库过滤了自己想要的词汇
导致消息发送失败或者以*号展示
这种情况下可以联系环信这边配置敏感词白名单进行过滤(需要提供appkey和需要添加白名单的词汇)
这个有2种解决方式
38、关于Android第三方推送对接
比如极光厂商对接、阿里云推送厂商对接、友盟厂商对接这些目前来看都是可以实现的只不过需要客户侧做一些特殊处理,对应推送厂商的sdk可以不用在重复进行依赖,环信这边只需要在console后台上传证书信息并在端上初始化sdk的时候配置push信息、获取到第三方推送厂商返回的devicetoken并上传给环信进行绑定即可。
41、rest发送消息可以设置ip白名单
也就是说可以配置自己服务器的ip,除了该服务器可以访问环信其它ip的请求全部过滤,防止重要信息泄露后有人故意往调用发送消息接口(这个在console后台安全配置可以设置)
43、推送扩展字段结构其中e为完全用户自定义扩展
{"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"}}
49.如何添加自定义的表情(类似于demo中的兔斯基)回答:1.在聊天页面(ChatFragment)中添加://添加扩展表情chatLayout.getChatInputMenu().getEmojiconMenu().addEmojiconGroup(EmojiconExampleGroupData.getData());2.在applicaiton中注册一下Delegate。。EaseMessageTypeSetManager.getInstance().addMessageType(EaseExpressionAdapterDelegate.class)//自定义表情50.出现下图报报错
60、Android11报崩溃异常,报错如下:
java.lang.RuntimeException:Unabletostartreceivercom.hyphenate.chat.EMMonitorReceiver:java.lang.IllegalStateException:NotallowedtostartserviceIntent{cmp=com.ant.health/com.hyphenate.chat.EMChatService}:appisinbackgrounduidUidRecord{ab5b452u0a320RCVRidlechange:uncachedprocs:1seq(0,0,0)}
A:去掉以下这几个方法,这几个方法对于安卓低版本保活的,对于高版本,这个保活可以去掉。高版本对保活有限制。
61、添加回调规则添加失败。A:检查下回调规则名称是不是用的汉字,回调规则只能是数字、字母,不能用汉字。
62、对方离线了之后,发送的消息,上线后如何获取?A:对方离线,消息会进入离线队列,如果没有集成第三方厂商离线推送,用户上线后,服务器下发给客户端。
63、调用SDK方法报错:Cannotreadproperty'lookup'ofundefined?A:因为未登陆成功就调用了SDK的api,需要在onOpened链接成功回调执行后再去调用SDK的api。
64、聊天室如何获取历史消息?A:两种方式:1、环信服务器端主动推,需要联系商务开通服务,默认10条,数量可以调整。2、通过消息漫游接口自己去拉取历史消息,各端都有提供拉取漫游消息接口。
65、拉取消息漫游,conversationId是怎么获取的?A:单聊的话,conversationId就是对方用户的环信id。群聊或聊天室的话,conversationId就是groupid或者chatroomid。
66、如何实现只有好友才可以发消息?A:可以使用环信的发送前回调服务,消息先回调给配置的回调服务器,然后去判断收发双方是否是好友关系,如果是好友关系,那么下发消息,如果是非好友关系,则不下发消息,客户端ui可以根据不下发返回的code做提示。
68、调修改群信息报错如下System.Net.WebException:“远程服务器返回错误:(400)错误的请求。A:检查下请求体,看下参数格式是否正确,比如"membersonly",,"allowinvites"这两个参数的值为布尔值。
69、注册用户username是纯数字可以吗。
调restapi是可以的,serversdk的话,为了让用户使用更规范的名字,命名规则更严格一些,要求首位是字母。
自定义铃声自定义播放铃声需要携带扩展字段em_apns_ext下面携带的就是标题和内容em_android_push_ext下就是存放小米的通道id的直接调用rest接口去创建小米的通道,同时设置下铃声
71、push推送后点击通知栏后在哪里设置跳转页面?小米的在onNotificationMessageClicked里去解析MiPushMessage的content,拿到对应字段去自行跳转页面vivo的在onNotificationMessageClicked里解析UPSNotificationMessage,拿到对应字段去自行跳转页面OPPO的跟华为是一样的,在启动页的onCreate里去获取参数跳转Bundlebundle=getIntent().getExtras();if(bundle!=null){Stringf=bundle.getString(f);Stringt=bundle.getString(t);}字段对应的含义f:fromt:tom:msgidg:groupid.
72、在线push推送:在线推送的话3.8.7sdk已经封装在线push推送如果想收到推送消息的话,需要自己做cmd消息接收本地通知3.8.5的话需要自己去发一条cmd消息携带扩展字段,端上接收到以后做一个本地通知。
75、头像昵称用url获取:只需要保证你返回得easeuser对象得数据是需要展示得ui得数据即可,不需要去管会话列表。。。可以打印在setUserProvider,看下返回得username数据,加入会话列表有十个,那么就会返回这个十个会话得username,然后,你需要根据返回得username去本地数据库查询对应得头像和昵称,如果有,就返回,如果没有就从网络请求并存数据,并去刷新会话列表,刷新会话列表得原因就是因为只要刷新就会再次执行setUserProvider,就又走一边这个逻辑,从数据库取如果用环信的room数据库进行存储直接将demo中的db文件下所有类拉入自己的项目中
77、用户A给B发送自定义消息,B可以收到,后台拿用户A的账号给用户B发送,B也可以收到消息,但是用户A的聊天页面不显示发送消息的内容服务端:AsendcustommessageB,B看到自定义消息CsendcmdmessageA,携带自定义消息内容、A、B客户端:Areceivecmdmessage--->解析message--->向B的会话插入以A身份发的自定义消息
78、解决UTF-8解决问题的步骤:
步骤1、首先,在项目build.gradle文件中添加如下代码:buildscript{tasks.withType(JavaCompile){//解决编码错误:编码UTF-8的不可映射字options.encoding="UTF-8"}}
步骤2、如果导入AS后,文件代码注释出现乱码问题。将AS右下角“fileencoding”编码格式,先改为“GB2312”,弹出对话框,选择“reload”,此时注释乱码消失。接着再改为“UTF-8”,弹出对话框,选择“convert”,即可。
注意事项:(1)目前只支持华为EMUI10以上的系统。(2)华为EMUI10以上自定义推送铃声,需要设置channel_id,通过em_push_channel_id进行设置。需要注意的是,即使指定了渠道标识(channelid),消息最终能否展示在应用渠道上,受用户终端上该渠道是否创建以及渠道的开关策略控制。a、如果本地已经创建该渠道,且已设置了对应的自定义铃声,收到推送消息时会播放自定义铃声。b、如果本地没有创建指定的渠道,则华为会对消息进行智能分类,根据消息设置的级别及智能分类的结果,两者取低,根据级别下发到服务提醒,普通通知与营销通知三个中的一个通知渠道,如果该通知渠道之前没有创建且不是营销通知,则设置自定义铃声有效。(3)对于华为EMUI10以上系统,需要添加em_push_name和em_push_content参数,否则容易被华为通知智能分类分到营销通知渠道,从而不能播放自定义铃声。(4)由于铃声是通知渠道的属性,因此铃声仅在渠道创建时有效,渠道创建后,即使设置自定义铃声也不会播放,而使用创建渠道时设置的铃声。83、fcm离线push通知栏是正常显示但是EMFCMMSGService的onMessageReceived不走设置下这个data数据,onMessageReceived没有执行的原因是没有data数据。
87、怎么全局搜索?调这个接口,不传from字段,实现全局搜索,
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。