最近,项目涉及到集成腾讯云IM,深受其害!故特记以此篇,望对各位看客能有所帮助!
关于腾讯云集成,我打算分上中下三篇文章来分析;TIM踩坑记上篇,介绍腾讯云IM的集成和实现;TIM踩坑记中篇,针对腾讯云IM的实现代码,基本逻辑等源码进行分析;TIM踩坑记下篇,对于此次集成过程中碰到的一些问题进行汇总;
demo中是将云通信需要的一些逻辑代码、sdk等分别封装到ui,sdk,presentation和tslibrary四个module中;考虑到其中有很多是不需要的,为了方便代码的管理,以及缩小项目apk大小,当然也为了避免引入四个module编译出现的一系列问题,我将module中需要的代码以及可能需要的代码模块导入了进来,然后进行修改。
于是先给大家看看项目效果
集成步骤具体如下:
注:本文仅以截图示意为主,具体资源,仍需以云通信文档以及demo为主!望见谅!!!
第一步:在腾讯云通信IM上注册应用,获取SDKAPPID;
第二步:下载ImSdk,导入相关的so库和依赖包;(关于这个so库碰到的问题,将在下篇进行讲解;)
第三步:添加相关权限
第四步:声明相关服务及广播接收器
云通信相关的服务及广播接收器
第五步:添加混淆规则(如果你的项目之前有混淆规则的话,必须添加!不然打包的时候会报错,各种文件找不到等等;)
#------------------腾讯云通信----------------------------------
-keepclass com.tencent.**{*;}
-dontwarncom.tencent.**
-keepclass tencent.**{*;}
-dontwarntencent.**
-keepclass qalsdk.**{*;}
-dontwarnqalsdk.**
第六步:终于到正题了;好嘛!开始写代码;哦,不,是导代码;首先,(一些资源文件可以先导进来)和集成其他sdk一样,初始化imsdk;
初始化imsdk之后,仍需初始化用户配置(必须得配置,并且得在登录之前进行配置----划重点啦!!!),最初我是在messageFragment中初始化过一次,天真的我原以为,只需在初始化之后再次登录即可;后来才发现,这样可能会导致一些问题;下篇将进行详细解析!
第七步:初始化完了,那当然得开始搞事情啦!将demo里的有用部分拉过来:主要包括event(实现被观察者模式的几个类)、imadapter(回话列表适配器、聊天列表适配器)、imbeans(封装的一些实体类,比较重要的就是消息的几种类型,中篇会进行详细的解析,主要针对自定义消息。腾讯云IM文档虽然写的不怎么样,但是基本的消息发送还是没问题的。所以大家主要关注下自定义消息即可)、imcontroller(消息相关的activity和fragment)、imutil(一些工具类,可以筛选优化)、imwidgets(一些腾讯云封装好的自定义控件)、presenter(ChatPresenter----聊天页面逻辑,conversationPresenter------回话列表页面逻辑)、viewfeatures(接口);
接下来就是删除和修改一些没必要的;这就需要大家根据自己需求来修改。我就不一一贴出来了。
第八步:登录
准确的讲登录是得服务器实现的,毕竟需要将我们app的账号直接使用;所以需要后台提供一个根据token或者uid之类的值来获取用户、客服,或者卖家的identity和usersig,然后,使用sharedpreferences来存储这些信息,再进行登录;大致思路是这样的,其他细节,大家可以见仁见智,自由发挥;
哦!还有一个那啥,,,需要实现离线推送的话,需要特别处理小米和华为手机(由于小米和华为ROM深度定制了安卓系统,加强了权限的控制,第三方APP默认不会在系统的自启动白名单里,APP在后台很容易被系统杀掉,或者用户手动将APP杀死, 因为没有自启动权限,APP的service无法自动重启,从而导致被杀死后无法收到消息。为了保证APP被杀后,在小米设备和华为上仍然能够收消息,可以集成小米和华为推送);具体实现步骤如下:
1、分别在小米和华为开发者平台中启用推送服务,获取appkey等参数;这里不细说,可以查阅im文档;
2、在云通信IM的个人中心中,添加证书,获取推送证书id,并记录小米推送的appid和appkey;
3、分别创建一个HwPushMessageReceiver和MiPushMessageReceiver;
4、注册推送服务
5、接下来就是清单文件中注册服务和广播接收器;
6、添加混淆规则
#------------------小米推送----------------------------------
-keepclass com.sinosoft.nanniwan.im.imutil.MiPushMessageReceiver {*;}
-dontwarncom.xiaomi.push.**
#------------------华为推送----------------------------------
-keepclass com.huawei.android.**{*;}
-dontwarncom.huawei.android.**
-keepclass com.baidu.mapapi.**{*;}
-dontwarncom.baidu.mapapi.**
详细见云通信im文档;(云通信文档中的华为的混淆规则,中间有空格,还请大家仔细!莫被坑!!!)
以上,基本上就实现了云通信IM的集成;当然,有很多细节,本文没能讲述,需要大家自行揣度!关于云通信的一些拓展和排坑,将在接下来两篇文章中讲解!