Android IM 即时通讯应用开发实战:基于 Smack 与 Openfire
1. 开发环境准备
- IDE: Android Studio
- 前端语言: Java (基于开源的 Smack 库)
- 服务端语言: Java (基于开源的 Openfire 服务器)
2. 服务端搭建
2.1 服务器环境
准备一台 Linux 或 Windows 服务器,或在本地运行 Docker/虚拟机。
2.2 安装 Openfire
Openfire 是一个基于 XMPP 协议的即时通讯服务器。虽然可以通过宝塔面板等工具管理 Tomcat,但 Openfire 通常作为独立服务运行。
- 下载 Openfire 安装包(支持 Windows/Linux/Mac)。
- 解压并启动服务。
- 通过浏览器访问
http://<服务器 IP>:9090进行初始配置。 - 在管理后台创建域(Domain),例如
im.example.com。 - 记录服务器 IP、端口(默认 5222)及域名信息。
注意:确保服务器防火墙开放 5222 (XMPP Client)、7070 (Admin Console) 等端口。
3. Android 客户端配置
3.1 添加依赖
在项目的 build.gradle (Module: app) 中添加 Smack 相关依赖:
// 即时通讯客户端 smack
implementation 'org.igniterealtime.smack:smack-android-extensions:4.4.4'
implementation 'org.igniterealtime.smack:smack-tcp:4.4.4'
implementation 'org.igniterealtime.smack:smack-core:4.4.4'
3.2 权限配置
在 AndroidManifest.xml 中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
4. 连接与登录实现
4.1 配置连接参数
使用 XMPPTCPConnectionConfiguration 构建连接配置。
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
import java.net.InetAddress;
{
XMPPTCPConnection Exception {
XMPPTCPConnectionConfiguration.builder()
.setXmppDomain(domain)
.setHostAddress(InetAddress.getByName(host))
.setHost(domain)
.setPort()
.setConnectTimeout()
.setSecurityMode(XMPPTCPConnectionConfiguration.SecurityMode.disabled)
.setCompressionEnabled()
.setSendPresence()
.allowEmptyOrNullUsernames()
.build();
(config);
connection.setUseStreamManagement();
connection.setUseStreamManagementResumption();
connection;
}
}


