以下是 OpenIM 服务器部署及安卓端集成使用的详细文档,帮助你快速搭建服务并在安卓应用中集成即时通讯及音视频功能。
一、OpenIM 服务器部署(Docker 方式,推荐)
1. 环境准备
- 服务器要求:Linux 系统(Ubuntu 20.04+/CentOS 7+),2 核 4G 以上配置,公网 IP(音视频功能需要)。
- 安装依赖:
bash
# 安装 Docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun # 安装 Docker Compose apt-get install docker-compose-plugin # Ubuntu/Debian # 或 CentOS: yum install docker-compose-plugin - 开放端口:
需在服务器防火墙和云厂商安全组中开放以下端口:- 10001-10010(IM 核心服务)
- 20000-20010(音视频媒体服务)
- 8080(管理后台)
2. 部署步骤
bash
# 1. 克隆代码仓库
git clone https://github.com/OpenIMSDK/Open-IM-Server.git
cd Open-IM-Server
# 2. 配置环境变量-- 目录下好像没这个文件,就先跳过不设置, 应该直接写在docker compose中了
cp config/config.yaml.example config/config.yaml
# 编辑配置文件,修改关键参数
vim config/config.yaml
关键配置项(必改):
ip:填写服务器公网 IP(如1.2.3.4)api_port:默认 10002(API 接口端口)ws_port:默认 10001(WebSocket 端口)- 其他参数保持默认即可(首次部署)。
打开管理后台配置---修改docker-compose.yml配置文件
bash
# 3. 启动服务
docker-compose up -d
# 4. 检查服务状态(所有服务状态为 Up 则成功)
docker-compose ps
等待安装完成
安装完成
3. 验证部署
- 访问管理后台:
http://服务器IP:11002,默认账号密码admin/admin。 - 若能登录,则服务器部署成功。
登录页面
出现问题
会出现输入用户名和密码之后点击没反应,不能登录的问题 , 原因是openim-api服务没启动
解决办法
需要下载下面的仓库
git clone https://gh-proxy.com/https://github.com/openimsdk/openim-docker.git E:\OpenIM\openim-docker
拷贝到代码仓库下
copy E:\OpenIM\openim-docker\docker-compose.yaml E:\OpenIM\Open-IM-Server\docker-compose.yml
copy E:\OpenIM\openim-docker\.env E:\OpenIM\Open-IM-Server\.env
重新启动
docker-compose up -d
等待启动成功
出现问题
解决办法
安装go环境
官网
下载对应的版本
双击安装 ,等待安装完成
打开新终端,确认能执行go命令
执行命令
cd E:\OpenIM\Open-IM-Server\tools\imctl
go run main.go user register -u admin -p admin -n admin
二、安卓端集成 OpenIM SDK
1. 环境准备
- Android Studio 4.0+
- 安卓项目最低支持 API 21(Android 5.0)
- 依赖配置:在
build.gradle中添加仓库和依赖。
2. 集成步骤
(1)添加依赖
在项目根目录的 build.gradle 中添加 Maven 仓库:
gradle
allprojects {
repositories {
// ... 其他仓库
maven { url "https://jitpack.io" }
maven { url "https://maven.aliyun.com/repository/public" }
}
}
在 app 模块的 build.gradle 中添加 SDK 依赖:
gradle
dependencies {
// OpenIM 核心 SDK(最新版本可查看官方仓库)
implementation 'io.openim:core-sdk:2.3.0'
// 音视频依赖(如需音视频通话)
implementation 'io.openim:av-sdk:2.3.0'
}
(2)初始化 SDK
在 Application 类中初始化 SDK(全局只需要初始化一次):
java
运行
import io.openim.android.sdk.OpenIMClient;
import io.openim.android.sdk.listener.OnConnectListener;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 初始化配置
OpenIMClient.getInstance().init(
this,
"http://服务器IP:10002", // API 地址(服务器公网IP+10002端口)
"ws://服务器IP:10001", // WebSocket 地址(服务器公网IP+10001端口)
new OnConnectListener() {
@Override
public void onConnecting() {
// 连接中
}
@Override
public void onConnectSuccess() {
// 连接成功
}
@Override
public void onConnectFailed(int code, String error) {
// 连接失败
}
}
);
}
}
(3)用户登录
需先通过服务器接口创建用户(可在管理后台手动创建测试用户),获取 userID 和 token 后登录:
java
运行
import io.openim.android.sdk.OpenIMClient;
import io.openim.android.sdk.listener.OnBaseListener;
// 登录
OpenIMClient.getInstance().login(
"userID", // 用户名(如 test123)
"token", // 用户令牌(从服务器获取)
new OnBaseListener<String>() {
@Override
public void onSuccess(String data) {
// 登录成功
}
@Override
public void onError(int code, String error) {
// 登录失败
}
}
);
三、安卓端实现核心功能
1. 基础聊天(文字消息)
java
运行
import io.openim.android.sdk.models.Message;
import io.openim.android.sdk.enums.MsgType;
// 发送文字消息给指定用户
String receiverID = "对方userID"; // 接收方用户ID
String content = "你好,这是一条测试消息";
OpenIMClient.getInstance().messageManager.sendSingleMessage(
receiverID,
content,
MsgType.TEXT,
new OnBaseListener<Message>() {
@Override
public void onSuccess(Message message) {
// 消息发送成功
}
@Override
public void onError(int code, String error) {
// 发送失败
}
}
);
// 监听新消息
OpenIMClient.getInstance().messageManager.addAdvancedMsgListener(
new OnAdvancedMsgListener() {
@Override
public void onRecvNewMessage(Message message) {
// 收到新消息,更新UI
}
}
);
2. 语音 / 视频通话
java
运行
import io.openim.android.sdk.OpenIMClient;
import io.openim.android.sdk.enums.CallType;
// 发起视频通话(1:语音,2:视频)
String targetUserID = "对方userID";
OpenIMClient.getInstance().callManager.startCall(
targetUserID,
CallType.VIDEO, // 视频通话
new OnBaseListener<String>() {
@Override
public void onSuccess(String callID) {
// 通话请求已发送
}
@Override
public void onError(int code, String error) {
// 发起失败
}
}
);
// 监听来电
OpenIMClient.getInstance().callManager.setCallListener(
new OnCallListener() {
@Override
public void onCallReceived(String callID, String callerID, int callType) {
// 收到来电,显示通话界面
// 接听通话
OpenIMClient.getInstance().callManager.acceptCall(callID);
}
@Override
public void onCallEnded(String callID, int reason) {
// 通话结束
}
}
);
// 挂断通话
OpenIMClient.getInstance().callManager.endCall(callID);
3. 自定义通话 UI
OpenIM 音视频通话的 UI 完全由开发者自定义,核心步骤:
- 创建通话界面布局(
activity_call.xml),包含视频容器、静音按钮、挂断按钮等。 - 在通话开始时,通过 SDK 接口获取本地 / 远程视频流,绑定到
SurfaceView或TextureView:java
运行
// 获取本地视频流并显示 SurfaceView localView = findViewById(R.id.local_video); OpenIMClient.getInstance().callManager.setLocalVideoView(localView); // 获取远程视频流并显示 SurfaceView remoteView = findViewById(R.id.remote_video); OpenIMClient.getInstance().callManager.setRemoteVideoView(remoteUserID, remoteView); - 绑定按钮事件(静音、切换摄像头等):
java
运行
// 静音 findViewById(R.id.btn_mute).setOnClickListener(v -> { OpenIMClient.getInstance().callManager.setMute(true); }); // 切换摄像头 findViewById(R.id.btn_switch_camera).setOnClickListener(v -> { OpenIMClient.getInstance().callManager.switchCamera(); });
四、常见问题
-
音视频通话失败:
- 检查服务器公网 IP 是否正确配置,端口是否开放。
- 确保客户端网络能访问服务器的 20000-20010 端口。
- 安卓 9.0+ 需在
AndroidManifest.xml中添加android:usesCleartextTraffic="true"(或配置 HTTPS)。
-
消息发送失败:
- 检查
apiAddr和wsAddr是否正确(IP + 端口是否可达)。 - 确认
userID和token有效(可在管理后台重置 token)。
- 检查
-
依赖冲突:
- 若出现
duplicate class错误,在app/build.gradle中排除冲突依赖:gradle
implementation ('io.openim:core-sdk:2.3.0') { exclude group: 'com.google.code.gson' }
- 若出现
五、参考文档
按照以上步骤,即可完成 OpenIM 服务器部署和安卓端集成,实现即时通讯及音视频通话功能,并根据需求自定义 UI 界面。