Android实现聊天室功能,使用XMPP协议

版权声明:如需转载注明出处 https://blog.csdn.net/u011463794/article/details/89482734

安卓大作业要做一个聊天室,然后查到了XMPP协议,然后搭建了openfire服务器(就是安装一下即可)
可是到了XMPP编程的时候发现了问题,Smack是一个开源的已于使用的XMPP客户端类库,我选择这个类库,不过网上的资料很多版本过老,就自己去github查了查。这也是开源好处。
首先,要把Smack导入到Android Studio,在这里插入图片描述
发现Smack不需要下载,可以在AS配置即可,

下面就是重点了

首先是Smack的文档:https://download.igniterealtime.org/smack/docs/latest/javadoc/
编程的时候参照上面就行。

首先导入Smack

在app文件夹下的build.gradle放入如下

With Gradle
repositories {
  maven {
    url 'https://oss.sonatype.org/content/repositories/snapshots'
  }
  mavenCentral()
}

在文件中的dependencies范围下加入下面字段

    compile "org.igniterealtime.smack:smack-android-extensions:4.3.0"
    compile "org.igniterealtime.smack:smack-tcp:4.3.0"

然后Sync now就会自动下载Smack

Smack编程:

主要依据:https://download.igniterealtime.org/smack/docs/latest/documentation.html

建立连接

首先注意openfire服务器中加入一个用户,比如我加入的ace,密码ace
下面这幅图是XMPP地址格式 用户名@域/资源,一般不用到资源
在这里插入图片描述

// 建立连接配置
XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
//设置用户名密码
configBuilder.setUsernameAndPassword("ace", "ace");
//设置XMPP域名,也就是XMPP协议后的@后的东西(在实际操作的时候发现参数写什么都可以正常运行,但是不能没有这句话,我的代码中,参数是localhost
configBuilder.setXmppDomain("jabber.org");
//设置主机位置,也就是服务器ip
configBuilder.setHostAddress(InetAddress.getByName("xxx.xxx.xxx.xxx"));
//等同于上面那句话builder.setHost("xxx.xxx.xxx.xxx");
//设置端口号,默认5222
configBuilder.setPort(5222);
//设置不验证,否则需要TLS验证
configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
//设置可以更改用户当前状态(在线、离线等等)
configBuilder.setSendPresence(true);
//设置在线
Presence presence = new Presence(Presence.Type.available);
//通知在线
xmpptcpConnection.sendStanza(presence);
//通过配置建立连接
AbstractXMPPConnection connection = new XMPPTCPConnection(configBuilder.build());
// 连接到服务器
connection.connect();
// Log into the server
connection.login();

...

// 断开连接
connection.disconnect();

下面是用户状态所有取值
在这里插入图片描述

接受消息

// 假设我们已经创建了连接connection
获取connection回话管理器实例
ChatManager chatManager = ChatManager.getInstanceFor(connection);
//添加监听器
chatManager.addIncomingListener(new IncomingChatMessageListener() {
  @Override
  void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {
    System.out.println("New message from " + from + ": " + message.getBody());
  }
});

发送消息

// 假设我们已经创建了连接connection
获取connection回话管理器实例
ChatManager chatManager = ChatManager.getInstanceFor(connection);
//这里就是Xmpp地址,用户名@域名,可以在openfire中查询
EntityBareJid jid = JidCreate.entityBareFrom("ace@localhost");
Chat chat = chatManager.chatWith(jid);
chat.send("Howdy!");

plus:如果想要附加信息,使用

Message newMessage = new Message();
newMessage.setBody("Howdy!");
// 添加附加信息
JivePropertiesManager.addProperty(newMessage, "favoriteColor", "red");
chat.send(newMessage);

接着就大功告成了~

猜你喜欢

转载自blog.csdn.net/u011463794/article/details/89482734