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

分手后的思念是犯贱 2022-02-15 05:43 317阅读 0赞

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

下面就是重点了

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

首先导入Smack

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

  1. With Gradle
  2. repositories {
  3. maven {
  4. url 'https://oss.sonatype.org/content/repositories/snapshots'
  5. }
  6. mavenCentral()
  7. }

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

  1. compile "org.igniterealtime.smack:smack-android-extensions:4.3.0"
  2. 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地址格式 用户名@域/资源,一般不用到资源
在这里插入图片描述

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

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

接受消息

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

发送消息

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

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

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

接着就大功告成了~

发表评论

表情:
评论列表 (有 0 条评论,317人围观)

还没有评论,来说两句吧...

相关阅读