美文网首页环信
01_环信集成 app 即时通讯功能基础

01_环信集成 app 即时通讯功能基础

作者: Android_小生 | 来源:发表于2017-10-09 20:54 被阅读102次

    在 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.**
    

    文章只是作为自己记录学习使用,如果有使用不当的地方可以@我。

    参考文章:
    环信开发文档

    相关文章

      网友评论

        本文标题:01_环信集成 app 即时通讯功能基础

        本文链接:https://www.haomeiwen.com/subject/howpyxtx.html