环信

作者: 夜沐下的星雨 | 来源:发表于2020-06-10 22:12 被阅读0次
1.注册登录

注册即时通讯云
https://www.easemob.com/
登录即时通讯云

2.创建应用
环信.PNG
3.配置
环信官网.PNG

下载Android SDK
http://www.easemob.com/download/im
文档查看
http://docs-im.easemob.com/im/android/sdk/import

SDK 目录讲解:


文件s.PNG

在这里主要介绍以上四个文件夹内容:

doc 文件夹:SDK 相关 API 文档
examples 文件夹:ChatDemoUI3.0(Demo,依赖 EaseUI 库)、EaseUI
libs.av 文件夹:包含IM和实时音视频功能所需要的 jar 和 so 文件
libs.lite 文件夹:无实时语音、实时视频功能的 SDK 包,如果项目中只用到聊天功能,可以把项目里的 jar 和 so 文件替换成此文件夹里的文件

导入so 和jar:
手动导入jar包 和so

so.PNG

加载so库(在build.gradle添加)

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
项目配置:

项目根目录build.gradle文件的allprojects→repositories属性下加入远程库地址

repositories {
        jcenter()
        maven { url 'http://developer.huawei.com/repo'} //如果需要使用华为推送HMS,则需要加上此句
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }

module的build.gradle里加入以下代码:

android {
    //use legacy for android 6.0
    //org.apache.http.legacy.jar:Android6.0 中默认移除了 httpclient 的代码,
    //用这个库兼容,建议不要删除,否则在 6.0 系统中,SDK 会有问题
    useLibrary 'org.apache.http.legacy'
    
    //自3.6.0开始需要java8的支持
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
dependencies {
   
    // Google firebase cloud messaging
    implementation 'com.google.android.gms:play-services-base:11.4.0'
    implementation 'com.google.firebase:firebase-messaging:11.4.0'
  

配置清单文件AndroidManifest.xml
配置appKey

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="Your Package"
    android:versionCode="100"
    android:versionName="1.0.0">
  
    <!-- 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" />
 
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:name="Your Application">
  
    <!-- 设置环信应用的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>
    </application>
</manifest>

初始化项目
要求在 application 的oncreate方法中做初始化

  private void initIM() {
        EMOptions options = new EMOptions();
// 默认添加好友时,是不需要验证的,改成需要验证
        options.setAcceptInvitationAlways(false);
// 是否自动将消息附件上传到环信服务器,默认为True是使用环信服务器上传下载,如果设为 false,需要开发者自己处理附件消息的上传和下载
        options.setAutoTransferMessageAttachments(true);
// 是否自动下载附件类消息的缩略图等,默认为 true 这里和上边这个参数相关联
        options.setAutoDownloadThumbnail(true);

        int pid = android.os.Process.myPid();
        String processAppName = getAppName(pid);
// 如果APP启用了远程的service,此application:onCreate会被调用2次
// 为了防止环信SDK被初始化2次,加此判断会保证SDK被初始化1次
// 默认的APP会在以包名为默认的process name下运行,如果查到的process name不是APP的process name就立即返回

        if (processAppName == null ||!processAppName.equalsIgnoreCase(this.getPackageName())) {
            Log.e(TAG, "enter the service process!");

            // 则此application::onCreate 是被service 调用的,直接返回
            return;
        }
//初始化
        EMClient.getInstance().init(this, options);
//在做打包混淆时,关闭debug模式,避免消耗不必要的资源
        EMClient.getInstance().setDebugMode(true);
    }


    private String getAppName(int pID) {
        String processName = null;
        ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
        List l = am.getRunningAppProcesses();
        Iterator i = l.iterator();
        PackageManager pm = this.getPackageManager();
        while (i.hasNext()) {
            ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
            try {
                if (info.pid == pID) {
                    processName = info.processName;
                    return processName;
                }
            } catch (Exception e) {
                // Log.d("Process", "Error>> :"+ e.toString());
            }
        }
        return processName;
    }

登录:
EMClient.getInstance().login(userName,password,new EMCallBack() {//回调
    @Override
    public void onSuccess() {
        EMClient.getInstance().groupManager().loadAllGroups();
        EMClient.getInstance().chatManager().loadAllConversations();
            Log.d("main", "登录聊天服务器成功!");        
    }

    @Override
    public void onProgress(int progress, String status) {

    }

    @Override
    public void onError(int code, String message) {
        Log.d("main", "登录聊天服务器失败!");
    }
});
退出:
EMClient.getInstance().logout(true, new EMCallBack() {
            
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        
    }
    
    @Override
    public void onProgress(int progress, String status) {
        // TODO Auto-generated method stub
        
    }
    
    @Override
    public void onError(int code, String message) {
        // TODO Auto-generated method stub
        
    }
});

发送消息,聊天,群聊:(知识太多,根据自己需要选择)

相关文章

  • 环信公有云

    环信-官网环信-价格 iOS环信SDK1.1头像昵称问题 环信console iOS环信SDK 消息 调试手机:i...

  • 03-即时通讯 环信集成

    环信 环信是在XMPP的基础上进行的二次开发 环信在网络上传输的数据是XML环信 是否使用过环信,简单说一下环信的...

  • 环信聊天特点及面试总结

    环信特点 环信面试总结

  • APP如何快速实现实时音视频功能?

    环信的小伙伴们,还记得那天夕阳下的奔跑吗?“环信直播课堂”回来了!久别半年,环信直播课堂已经升级完成,更名为“环信...

  • 环信

    环信EaseUI 导入环信SDK和EaseUI使用cocoapods集成 集成视频:http://www.imge...

  • 环信

    iOS 集成环信(四) 群聊iOS 环信集成(五) 加载会话列表

  • 环信

    -------------------AppDelegate.m------------------- -----...

  • 环信

    首先,关于环信SDK的下载和一些依赖库的添加,在此我就不做详细介绍,(http://www.easemob.com...

  • 环信

    环信环信是一个第三方平台,提供即时通讯服务环信是在XMPP的基础上进行的二次开发环信在网络上传输的是xml使用环信...

  • 环信

    Socket XMPP

网友评论

    本文标题:环信

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