最近项目中集成即时聊天功能,挑来拣去,最终选择环信SDK来进行开发,选择环信的主要原因是接口方便、简洁,说明文档清晰易懂。文档有Android、iOS、和后台服务器端,还是非常全的。
本篇文章目的主要在于说明环信Demo如何实现即时通信的。我在集成环信SDK到我们自己开发的app之前,研究了一下环信demo的代码,看了两三天的样子,基本搞清楚来龙去脉,但是只是清楚来龙去脉,要说到里面的细节可能得深一步研究,但是这就够了,已经可以把demo里面的功能集成到我们自己的app中了。所以本篇文章就说明一下如何集成环信到自己的app中。
集成起来还是比较快的,最多一周时间集成就搞定了。我们是有自己的用户体系的,所以我们采用的是将环信与现有的APP用户体系集成。
集成之前,必然要到上面这个页面进行了解,如何集成,在这里说明了如何集成的方案,这个方案的选择就需要你自己根据已有的需求进行选择了。这个就不多说了,应该都明白。
我们的方案是将环信与现有的APP用户体系集成!也就是说我们的服务器需要把现有的用户在后台注册到环信服务器中,然后app登录的时候自动登录环信服务器,然后使用环信的即时通信功能。
这就意味着用户登录app的时候,需要登录两次,一次是我们的应用服务器,一次是环信服务器,只不过给用户的感觉是登录了一次,而环信服务器的登录是代码中控制的,用户看不到也感觉不到。
登录之后,就是获取好友和群组了,环信增加了聊天室的功能,有点类似于松群组的功能,只不过聊天室更加随意些。群组大家都明白,不多说,聊天室呢不同,开放的公共的聊天室,成员可以随时进入聊天随时离开,离开之后自动不再收到聊天信息。
好友体系中环信是可以进行管理的,当然也可以不使用环信的好友管理体系,而使用应用服务器来进行好友的管理工作。我们项目中使用的是环信的好友管理体系,主要是方便,不过也不见得省了多少事儿,因为应用服务器用户体系的变更,都要由服务器把该用户体系的关系的变更通知环信服务器,然环信服务器也进行更改,从而保持应用服务器和环信服务器用户体系的一致性。所以大家集成过程中需要自己考虑代价。我们项目中使用环信管理好友体系主要在于app端方便,app端也不进行用户体系的变更,复杂的操作都在服务器端实现,所以app端方便实现、开发简单。
用户昵称、头像
环信服务器采用了低浸入的方式开发即时通信,也就是说它不保存用户的信息,也不访问用户的信息,这就意味着用户的昵称、头像等等信息环信是没有保存的,开发者无法通过环信获取用户信息。所以环信专门对与用户的昵称、头像信息给出了解决方案。
方法一 从APP服务器获取昵称和头像
方法二 从消息扩展中获取昵称和头像
昵称或头像处理的方法一和方法二区别:
方法一:在发送消息时不含有任何扩展,收消息时如果本地不存在发送人的用户信息则需要从APP服务器查询发送人的昵称和头像的URL。
方法二:在发送消息时带有包含昵称和头像URL的消息扩展,收到消息时即可从消息扩展中取出,不需要再去APP服务器获取, 方法二和方法一相比
优点:收到消息立即显示昵称不用等待APP服务器返回数据后显示。
缺点:每条消息都要带有扩展,增加消息体积,每次发消息都有一些不必要的数据。
上面是环信给出的用户昵称和头像的两种解决方案。这两种解决方案大家一看就应用明白了,不多说。主要说说我们项目中的解决方案,采用第一种方案,从应用服务器获取,保存本地数据库,之后,查询操作就是本地操作,那就会有问题了,用户关系更新或者信息更新呢?这个问题主要解决方法是用户好友体系的每次更新都会同时更新用户昵称和头像,然后更新本地数据库来解决这个问题。
到此,这三个问题明白之后,基本就可以开始进行开发了,你可能会说,还没有说明即时通信呢?最主要的就是即时通信怎么没有说明呢?这个问题大家勿急,后面会有!^_^
开发过程,首先就是要研究一下环信demo的代码,里面已经进行了封装,所以把环信demo的代码看懂,利用的好的代码完全可以应用到现有的app中。
这个环信demo的代码,导入手机直接运行,注册,用着非常好,代码运行正常,功能也正常,所以研究这个代码之后,再集成到自己的app中那就so easy!!
demo里面用到了几个jar包,主要是环信的sdk、百度地图、友盟数据分析、百度地图定位、图片加载等这几个jar包,百度地图这个应该没什么说的,之前我们app里面集成过,不过有点旧,这次顺带着把百度地图也更新成最新的了,目前百度地图最新的挺好用的。也算是教训,就是实时更新所应用的第三方的jar!别的jar就没什么说的了。
下面就是demo里面的分包了,demo里面的分包比较多,不过从分包的名字可以看出每个包下面的代码是什么作用了。我主要看的是activity包下面的每个类,因为activity类就是一个个的界面,其他的都是为这个activity类服务的代码工具类,所以主要看这个就可以了。
// 加入"群聊"和"聊天室" // 把"申请与通知"添加到首位
上面联系人类中的注册的监听器使用的就是观察者模式,先看HXSDKHelper.java中的部分代码
这部分代码控制着观察者,添加、删除、通知每一个观察者,当群组、好友、黑名单 通过环信服务器同步到客户端之后,notify每个观察者,然后观察者接收到之后,刷新UI。这里就是观察者模式的经典应用!!!
联系人列表看懂之后,其他的群组界面和回话历史界面就不多说了。
这个类比较庞大,因为demo里面把单聊和群聊、聊天室都集成到这一个界面中完成,代码很庞大,但是不影响最终的集成,直接集成该类就可以实现功能。不多说。
环信官方网站已经发布IM3.0版本。目前开发的一个app采用的就是IM3.0版本。
整体界面没发生大的变化,功能也都一样。但是在官方给的demo代码上优化很多,方便很多。不过得大概看懂里面的代码。如果是高手的话,半天就应该能集成好环信的即时通信功能。
本文给出的下载链接,是IM2.0版本。所以如果想要使用IM3.0的版本的,需要到官网下载。
对于新手来说,环信官网给出的demo是可以直接使用的。人家给出的是完整的app代码。新手就疑惑,不知道该如何入手集成即时通信功能?
首先,把环信官网给出的依赖包和动态库添加到自己的工程中。目前官网给出的依赖包和动态库分为包含语音视频通话功能的和不包括语音视频通话功能的。大家根据自己的APP的功能添加。
然后,把demo里面的聊天界面直接复制到自己的功能里面,此时复制进去以后,会出现大量的错误!因为聊天界面关联了很多demo中的其他类,所以,要把其他类复制到自己的工程中。记得不要忘记布局文件、资源图片文件、字符串等等资源文件! 建议:在自己的工程中,新建一个包专门放环信的类。因为你要复制的类非常多!大概有二三十个!
最后,向即时通信代码填充数据。主要有几部分:
2)登录app界面做好登录环信服务器操作。需要登录环信的登录名和密码。这里的环信登录与登录app 不同。APP登录是应用服务器的用户,用户名和密码在应用服务器。而登录环信是环信的登录名和密码, 需要先注册到环信服务器才行。注册操作可以在应用服务器提前做好。APP登录应用服务器的时候顺带着登录环信服务器即可。
3)获取好友信息。这里要分为好友信息的维护是应用服务器维护还是环信帮助你维护。这个我就不多说 了。环信官网有说明。
4)本地维护好友列表和聊天信息里列表。聊天信息列表在环信中已经不让开发者编辑和改变了。该功能 已经集成在了依赖的环信的包中了。好友列表在demo中给出了简单的数据表。开发者可以自己根据APP 需要开发和扩展。
5)退出APP。退出APP时务必调用helper类的logout方法。这样以后,先前登录的用户就从APP上退 出了环信的服务器。开发者要注意,我这里说的退出时指APP用户手动退出,不是用户按手机返回按钮或者返回主界面按钮导致APP退出。而是APP中的退出按钮,当前登录用户退出APP。如果是用户按返回按钮或回主界面按钮,返回到手机桌面的,没必要调用helper类的logout方法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程圈。