环信即时通讯 IM Android 快速入门
更新时间:2022-02-28
本文介绍如何快速集成环信即时通讯 IM Android SDK 实现单聊。
前提条件
- Android Studio 3.0 或以上版本;
- Android SDK API 等级 19 或以上;
- Android 4.4 或以上版本的设备;
- 有效的环信即时通讯 IM 开发者账号和 App key,见 环信即时通讯云控制台。
准备开发环境
本节介绍如何创建项目,将环信即时通讯 IM Android SDK 集成到你的项目中,并添加相应的设备权限。
1. 创建 Android 项目
参考以下步骤创建一个 Android 项目。
- 打开 Android Studio,点击 Start a new Android Studio project。
- 在 Select a Project Template 界面,选择 Phone and Tablet > Empty Activity,然后点击 Next。
- 在 Configure Your Project 界面,依次填入以下内容:
- Name:你的 Android 项目名称,如 HelloWorld。
- Package name:你的项目包的名称,如 com.hyphenate.helloworld。
- Save location:项目的存储路径。
- Language:项目的编程语言,如 Java。
- Minimum API level:项目的最低 API 等级。
然后点击 Finish。根据屏幕提示,安装所需插件。
上述步骤使用 Android Studio 3.6.2 示例。你也可以直接参考 Android Studio 官网文档创建首个应用。
2. 集成 SDK
选择如下任意一种方式将环信即时通讯 IM SDK 集成到你的项目中。
注意
- 以下集成方式只需选择一种,同时使用多种集成方式可能会报错。
- 请点击查看发版说明获得最新版本号。
方法一:使用 mavenCentral 自动集成
- 在项目的
build.gradle
中添加mavenCentral()
仓库。
buildscript {
repositories {
...
mavenCentral()
}
...
}
allprojects {
repositories {
...
mavenCentral()
}
}
-
在
module
的build.gradle
中添加如下依赖:
...
dependencies {
...
// x.y.z 请填写具体版本号,如:3.8.9。
// 可通过 SDK 发版说明获得最新版本号。
implementation 'io.hyphenate:chat-sdk:x.y.z'
}
注意
该方法仅适用于 v3.8.2 或以上版本。
方法二:手动复制 SDK 文件
打开 SDK 下载页面,获取最新版的环信即时通讯 IM Android SDK,然后解压。
将 SDK 包内 libs 路径下的如下文件,拷贝到你的项目路径下:
文件或文件夹 | 项目路径 |
---|---|
easemob_xxx.jar 文件 | /app/libs/ |
arm64-v8a 文件夹 | /app/src/main/jniLibs/ |
armeabi-v7a 文件夹 | /app/src/main/jniLibs/ |
x86 文件夹 | /app/src/main/jniLibs/ |
x86_64 文件夹 | /app/src/main/jniLibs/ |
3. 添加项目权限
根据场景需要,在 /app/src/main/AndroidManifest.xml 文件中添加如下行,获取相应的设备权限:
<?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">
<!-- chat SDK required start -->
<!-- Allow the program to vibrate -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- Access to the network -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Microphone permissions -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Camera permissions -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- get operator information to support the related interfaces which provides operator information--->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- Write extended storage permissions-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- This permission is used to access GPS location (used for location messages, and can be removed if location is not required) -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- After api 21 is marked as deprecated -->
<uses-permission android:name="android.permission.GET_TASKS" />
<!-- Used to access wifi network information-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- Used to get access permission for wifi -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!-- Allow background processes to run still after the phone screen is turned off -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- Allow the program to modify the sound setting information -->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- Allow program to access phone status -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- Allow the program to run automatically after startup -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!-- Permission required to capture the screen, added permission after Q (multi-person audio and video screen sharing use) -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<!-- chat SDK required end -->
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:name="Your Application">
<!-- Declare the core functions of the service SDK required by the SDK-->
<service android:name="com.hyphenate.chat.EMChatService" android:exported="true"/>
<service android:name="com.hyphenate.chat.JobService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true"
/>
<!-- Declare the receiver required by the SDK -->
<receiver android:name="com.hyphenate.chat.EMMonitorReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package"/>
</intent-filter>
<!-- Optional filter -->
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
</application>
</manifest>
关于 App Key 对应的 value 获取,在 环信即时通讯 IM 管理后台 创建应用后,申请 App Key 并进行相关配置。
4. 防止代码混淆
在 app/proguard-rules.pro 文件中添加如下行,防止混淆 SDK 的代码:
-keep class com.hyphenate.** {*;}
-dontwarn com.hyphenate.**
实现单聊
本节介绍如何实现单聊。
1.SDK 初始化
在主进程中进行初始化:
EMOptions options = new EMOptions();
options.setAppKey("Your appkey");
......// 其他 EMOptions 配置。
EMClient.getInstance().init(context, options);
2.创建账号
可以使用如下代码创建账户:
//注册失败会抛出 HyphenateException。
EMClient.getInstance().createAccount(mAccount, mPassword);//同步方法。
注意
该注册模式为在客户端注册,主要用于测试,简单方便,但不推荐在正式环境中使用;正式环境中应使用服务器端调用 Restful API 注册,具体见:注册单个用户。
3. 登录账号
使用如下代码实现用户登录:
EMClient.getInstance().login(mAccount, mPassword, new EMCallBack() {
/**
* Sign in success callback
*/
@Override
public void onSuccess() {
// Login success
}
/**
* Sign in failed callback
* @param code failed code
* @param error failed message
*/
@Override
public void onError(final int code, final String error) {
// Login error
}
@Override
public void onProgress(int i, String s) {
}
});
4.发送一条单聊消息
// content 为要发送的文本内容,toChatUsername 为对方的账号。
EMMessage message = EMMessage.createTxtSendMessage(content, toChatUsername);
// send message
EMClient.getInstance().chatManager().sendMessage(message);