【快速搞定】教你如何快速集成环信(android端EaseUI),跳过我踩过的坑

一、前言

最近,公司准备集成一个即时通讯的功能,于是我找到了环信,于是我就这样被坑了,于是就有了本文来教大家如何跳出我踩过的坑,于是……

说环信比较坑并不是它们的产品不好,相反它们的功能做得还不错(本人承诺绝对不是托),而是它们写的文档真的是太乱了,一不小心你就会入坑(还好环信的技术客服还算给力,很多问题都能详细的给你回答)。

主要体现在EaseUI的使用和文档写的有差距(你可以看看),但是文档并没有标明,还有就是某些方法的调用写得不是很清楚。官方demo居然还是用Eclipse写的,用AS导入也是各种麻烦,加之官方demo里面有些功能我用不上,于是就想到自己写demo。

二、效果图

下面就是我写的demo的效果图(PS:由于赶时间给老大看效果,没有时间去美化页面,还有就是模拟器中使用位置会报错,所有就没有演示发送位置信息了),你可以在这里下载安装包APK文件去运行看看。

三、有哪一些坑

  1. 导包(跟着文档来的话就麻烦了);
  2. 初始化(一不注意就出错);
  3. 减小apk大小(导入EaseUI之后安装包大小接近18M);
  4. 发送图片之后,查看大图崩溃(文档不完整);
  5. 获取联系人(你会发现根本没有这个方法,要自己写,并且必须要在子线程中执行);
  6. 设置默认加载一条消息—-无效(options.setNumberOfMessagesLoaded(1));
  7. 你会发现发送不了位置信息(这个文档里面真没找到);
  8. 添加/删除好友之后没反应(文档里面并没有给出解决方案);
  9. 有时候,明明已经按文档配置了,但是很多效果出不来;
  10. 最狗血的就是EaseUI没有适配到Android6.0(下面解决方案给出);
  11. 环信,陌生人之间是可以聊天的。

看到这么多坑你就知道我是怎么过来的了!希望在弄环信的“同胞们”能看到这些,少走一些弯路吧。

四、解决方案

4.1、导包

整个项目只用导入EaseUI就可以了,不要再在你的项目中导入SDK中的libs里面的jar包和jin文件了,因为EaseUI里面已经包含得有了。具体方式为:先下好EaseUI,在创建好的项目中File->New->import Module->你的EaseUI路径->finished

4.2、初始化

初始化的方法确实是按文档的方法来初始化的(放到MyApplication中),比较坑的就是,如果你要使用EaseUI就必须要用下面的方法来初始化方法,而不是文档一开始的那种方式:

EMOptions options = new EMOptions();options.setMipushConfig("2882303761517500800", "5371750035800");//小米推送的// 默认添加好友时,是不需要验证的,改成需要验证,true:自动验证,false,手动验证options.setAcceptInvitationAlways(true);//初始化EaseUI.getInstance().init(this, options);//在做打包混淆时,关闭debug模式,避免消耗不必要的资源------***注意这个不要加,要了会报错***
//        EMClient.getInstance().setDebugMode(true);

4.3、减小APK大小

这个确实就得看你的业务需求来了,如果需要实时通话(包含视频)的请忽略本条。方法:到EaseUI文件夹下(项目中选中easeui右键–>Show in Explorer),找到所有包含得有“av”的文件删除,还有不需要小米推送,谷歌支付,谷歌推送,华为推送的可以将相应的jar包删除。这样下来生成的安装包就变为6M多点(基本在能接受的范围了)。

4.4、查看大图崩溃

之所有会崩溃是因为没有在清单文件(AndroidManifest.xml)中配置查看图片的Activity,具体配置如下:

<activity
            android:name="com.hyphenate.easeui.ui.EaseShowBigImageActivity"android:screenOrientation="portrait"android:theme="@style/horizontal_slide" />

4.5、获取联系人

1)、获取联系人:

 contactListFragment = new EaseContactListFragment();new Thread() {//需要在子线程中调用@Overridepublic void run() {//需要设置联系人列表才能启动fragmentcontactListFragment.setContactsMap(getContact());}}.start();

2)、getContact方法:

 /*** 获取联系人* @return*/private Map<String, EaseUser> getContact() {Map<String, EaseUser> map = new HashMap<>();try {List<String> userNames =                     EMClient.getInstance().contactManager().getAllContactsFromServer();
//            KLog.e("......有几个好友:" + userNames.size());for (String userId : userNames) {
//                KLog.e("好友列表中有 : " + userId);map.put(userId, new EaseUser(userId));}} catch (HyphenateException e) {e.printStackTrace();}return map;}

4.6、设置默认加载一条消息—无效

options.setNumberOfMessagesLoaded(1);此方法设置无效

额额额,这个真的很想吐槽一下,3.X版本已经弃用这个功能了,但是文档里面居然还有

4.7、不能发送位置信息

好吧,其实想想也知道,它们也是集成的第三方的百度地图,所以是需要去百度地图开发者中心申请appkey的,申请很简单、也很快,最后在清单文件中配置已一下就可以了。

 <!-- //key:开发者申请的key --><service
            android:name="com.baidu.location.f"android:enabled="true"android:process=":remote" /><meta-data
            android:name="com.baidu.lbsapi.API_KEY"android:value="这个就是你申请的appkey了" />

4.8、添加/删除好友之后没反应

首先,需要在管理通讯录ContactListFragment的那个activity中监听好友状态。其次,在状态回调方法中刷新contactListFragment.refresh(),还没完最后还要在子线程中调用一下获取好友列表的方法,不多说看代码:

4.9、有时候,明明已经按文档配置了,但是很多效果出不来

这个应该不算环信的坑了,大多数用as的都可能出现。终极解决办法就是重构项目Builde->Rebuilde Project

4.10、适配Android6.0的手机

要知道,demo运行到Android6.0的手机是各种报错,这主要是由于Google出于安全考虑在6.0之后加入动态权限,即敏感操作需要获得用户的授权;这个错误只在官方的demo里面有解决方案(没时间去研究它们demo的有福了),

看步骤:先下载官方demo,在里面找到runtimepermissions文件夹,将这个文件夹拷贝到你的项目中,当然你要是嫌麻烦可以点击这里下载;然后在你的项目的MainActivity中加入下面的代码就可以了。

       /*** 请求所有必要的权限----原理就是获取清单文件中申请的权限*/PermissionsManager.getInstance().requestAllManifestPermissionsIfNecessary(this, new PermissionsResultAction() {@Overridepublic void onGranted() {
//              Toast.makeText(MainActivity.this, "All permissions have been granted", Toast.LENGTH_SHORT).show();}@Overridepublic void onDenied(String permission) {//Toast.makeText(MainActivity.this, "Permission " + permission + " has been denied", Toast.LENGTH_SHORT).show();}});

4.11、实现陌生人之间聊天

其实,环信是允许陌生人之间聊天的。具体实现很多,原理就是要给一个username作为入口。

下面提供一种解决方案:从服务器传递一个陌生人的列表(只要有用户名名都可以),然后点击的这个列表的时候,跳转到聊天页面就可以了

五、总结

总算是写完,希望给还没有入坑的同胞们一些启示。虽然说环信的坑比较多(我归咎于它们的文档写得不好,希望有所改进吧),但是它们的功能还是可以的,听说已经加入了红包功能了,有时间的时候去看看。

六、Demo下载

这里是Demo的下载地址

有什么问题可以留言、评论。

【快速搞定】教你如何快速集成环信(android端EaseUI),跳过我踩过的坑相关推荐

  1. Android Studio 4.0 集成环信sdk EaseUI全纪录

    因为B站尚硅谷Android视频教程<硅谷社交_项目实战>BV1cW411V7yd中的聊天室项目产生兴趣,所以想跟着写一下,但是众多观众在P6:集成环信sdk及EaseUI时遭遇挫折 网上 ...

  2. 计算机设计图片教程,电脑如何抠图?教你一招快速搞定

    电脑抠图是使用软件进行图片处理,去除照片背景得到一张透明背景的图片,便于进行设计创作,抠图对于ps大神是非常简单的事情,可对于一窍不通的新手小白来说用电脑抠图是很困难的事情,但小编今天给大家分享一个抠 ...

  3. 教你一招超级简单的方法快速搞定grub.conf文件的丢失及损坏

    教你一招超级简单的方法快速搞定grub.conf文件的丢失及损坏 实验环境: GRUB是大多数Linux系统默认使用的引导程序,当"/boot/grub/grub.conf"配置文 ...

  4. 手把手教你制作微信小程序,开源、免费、快速搞定

    最近做了个"罗孚传车"的小程序 一时兴起,做了一个小程序,将个人收集的同汽车相关的行业资讯和学习资料,分享到小程序中,既作为历史资料保存,又提供给更多的人学习和了解,还能装一下:) ...

  5. 计算机故障维修要遵循什么原则,超级实用的六条法则教你快速搞定电脑故障维修!...

    超级实用的六条法则教你快速搞定电脑故障维修! 发布时间:2015-06-03 14:31:39   作者:佚名   我要评论 今天小编给大家推荐的电脑故障维修通用法则,是很实用的哦,大家可以收藏起来好 ...

  6. 手把手教你快速搞定4个职场写作场景

    " [写作能力提升]系列文章: 为什么建议你一定要学会写作? 手把手教你快速搞定 4 个职场写作场景 5 种搭建⽂章架构的⽅法"免费赠送! " 一.前言 Hello,我是 ...

  7. 水墨特效怎么做?两种方法快速搞定!大神都在用的超美视频画面效果

    想在视频里用高大上的水墨特效,却不知道怎么做?一般做这种唯美好看的效果,在一些特效软件里需要自己去设计.渲染,这一步就难倒了很多新手.那像视频大神一样的水墨特效就没办法制作了吗? 今天就教大家快速搞定 ...

  8. 怎么把横版视频剪成竖版?两种方法快速搞定!画面满屏,没有黑边

    现在很多手机社交媒体上,都比较流行竖版视频.那么横版视频如何变成竖版?今天教大家两种方法快速搞定!横版改成竖屏,并且做到画面满屏,无黑边.顺便还会分享现在抖音.朋友圈.影视圈最流行的竖版视频排版方式的 ...

  9. android 电视 竖屏 黑边 -平板,怎么把横版视频剪成竖版?两种方法快速搞定!画面满屏,没有黑边2018-11-12...

    现在很多手机社交媒体上,都比较流行竖版视频.那么横版视频如何变成竖版?今天教大家两种方法快速搞定!横版改成竖屏,并且做到画面满屏,无黑边.顺便还会分享现在抖音.朋友圈.影视圈最流行的竖版视频排版方式的 ...

最新文章

  1. CVPR | 让合成图像更真实,上交大提出基于域验证的图像和谐化
  2. Science:产前母体感染促进后代的组织特异性免疫和炎症
  3. GitHub趋势榜第一的开源低代码项目:mometa
  4. python安装numpy-如何为python安装numpy和scipy?
  5. Windows Server 2008 R2 之二十一远程桌面服务RD之二
  6. php实现文件留言,PHP文件操作及实例:留言板
  7. java writeint_Java DataOutputStream.writeInt(int v)类型
  8. 微信jssdk遇到的一些问题汇总
  9. 魔方阵(奇数,单偶,双偶)
  10. Docker原理之Namespaces
  11. flutter bloc_如何使用BLoC模式处理Flutter中的状态
  12. H265 SAO 技术
  13. 微信小程序地图生态概述
  14. 基于matlab仿真实例,基于MATLAB的新能源汽车仿真实例
  15. MATLAB全局变量
  16. 基于mysql的淘宝用户、商品、平台价值分析
  17. Access 2016 - 学习笔记1 - Access中写SQL创建一个table
  18. 温湿度压力传感器——BME280,硬件开发与程序设计
  19. Java岗大厂面试百日冲刺【Day52】— 数据库8 (日积月累,每日三题)
  20. apk私钥_Android应用apk的程序签名详解

热门文章

  1. 独家 | 利用孪生网络,Keras,Tensorflow比较图片相似度
  2. 三维动画提供建筑设计的便利性
  3. 亿美软通出席硬核桃5G开发者社区周年庆,喜获“金核桃奖”
  4. android电脑文件列表不刷新,Android 利用RecyclerView.Adapter刷新列表中的单个view问题...
  5. 谷歌推Mac和Linux版本Chrome浏览器(每日关注2009.12.09)
  6. iOS越狱后导入照片
  7. php 菜单目录树,css实现的目录树型导航菜单
  8. 如何搭建php虚拟主机环境,在本地如何搭建虚拟主机环境?
  9. 老机型MacAir安装win10踩坑填坑记录
  10. B站java秒杀系统xyx小可爱qwq