在 app 中需要使用到即时通讯的功能,自己在项目中使用的是环信的即时通讯平台。接下来的几篇文章都会说明和总结自己的使用过程的一些细节。
在数据的安全方面,环信的即时通讯平台只需要项目与环信服务器的消息数据的传递,并不需要涉及到自己核心业务的用户数据。在这点上感觉还是比较靠谱的。
对于只需要一些基本的即时通讯功能(用户数据、群组、消息、消息推送、状态、文件),环信平台的集成和使用还是免费的,这也是不错的选择。
Android SDK 概述
环信 SDK 开发框架包括 SDK_Core、SDK、EaseUI。
-
SDK_Core
:核心的消息同步协议实现,完成了和环信服务器之间的信息交换; -
SDK
:在核心协议的基础上实现了完整的 IM 功能,包括不同类型的消息收发、会话管理、群组、好友等功能; -
EaseUI
:一组 IM 相关的 UI 控件,把消息的发送接收等功能封装到了内部,可满足快速开发的要求。
环信 SDK 采用了模块化设计,每一个模块的功能相对独立,我们可以根据自己的需求选择合适的模块。
EMClient:EMChatManager 模块、EMContactManager 模块、EMGroupManager 模块、EMChatRoomManager 模块。
-
EMClient
:SDK 的入口,主要完成登录、退出、连接管理等功能,也是获取其他模块的入口; -
EMChatManager
:管理消息的收发,完成会话管理等功能; -
EMContactManager
:负责好友的添加删除,黑名单的管理; -
EMGroupManager
:负责群组的管理,创建、删除群组,管理群成员等功能;
Gradel 导入 SDK
android {
//use legacy for android 6.0
useLibrary 'org.apache.http.legacy'
}
dependencies {
compile 'com.android.support:appcompat-v7:23.4.0'
//Optional compile for GCM (Google Cloud Messaging).
compile 'com.google.android.gms:play-services-gcm:9.4.0'
compile 'com.hyphenate:hyphenate-sdk:3.3.0'
}
如果不需要音视频通话的 SDK,使用 compile 'com.hyphenate:hyphenate-sdk-lite:3.3.0'
,具体 SDK 版本号参考 这里。
SDK 中使用到的第三方库
-
google-play-services
:GCM 推送; -
org.apache.http.legacy
:Android6.0 中默认移除了 httpclient 的代码,用这个库兼容,不能删除,否则在 6.0 系统中,SDK 会有问题。
EaseUI 中使用到的第三方库
-
glide
:图片处理库。
实际项目中用到的第三方库
-
com.android.support:multidex:1.0.1
:APP 总方法数超过 64k 时,需要用这个库做分包处理。使用环信 SDK 肯定得分包,它占的太大了。
如果对生成的 apk 大小比较敏感,建议使用 jar 方式,并且手工拷贝 so。如果使用 lite 版,建议仅保留 armeabi;如果使用音视频版,建议仅保留 armeabi-v7a。这样虽然在对应平台执行的速度会降低,但是能有效减小 apk 的大小。
AndroidManifest 配置信息
<!-- Required -->
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
...
<!-- 设置环信应用的AppKey -->
<meta-data android:name="EASEMOB_APPKEY" android:value="Your AppKey" />
<!-- 声明SDK所需的service SDK核心功能-->
<service android:name="com.hyphenate.chat.EMChatService" android:exported="true"/>
<service android:name="com.hyphenate.chat.EMJobService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true"
/>
<!-- 声明SDK所需的receiver -->
<receiver android:name="com.hyphenate.chat.EMMonitorReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>
<!-- 可选filter -->
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
App 混淆
在 ProGuard 文件中加入以下 keep
-keep class com.hyphenate.** {*;}
-dontwarn com.hyphenate.**
文章只是作为自己记录学习使用,如果有使用不当的地方可以@我。
参考文章:
环信开发文档