Android實現聊天室功能,使用XMPP協議

安卓大做業要作一個聊天室,而後查到了XMPP協議,而後搭建了openfire服務器(就是安裝一下便可)
但是到了XMPP編程的時候發現了問題,Smack是一個開源的已於使用的XMPP客戶端類庫,我選擇這個類庫,不過網上的資料不少版本過老,就本身去github查了查。這也是開源好處。
首先,要把Smack導入到Android Studio,在這裏插入圖片描述
發現Smack不須要下載,能夠在AS配置便可,html

下面就是重點了

首先是Smack的文檔:https://download.igniterealtime.org/smack/docs/latest/javadoc/
編程的時候參照上面就行。java

首先導入Smack

在app文件夾下的build.gradle放入以下android

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

在文件中的dependencies範圍下加入下面字段git

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

而後Sync now就會自動下載Smackgithub

Smack編程:

主要依據:https://download.igniterealtime.org/smack/docs/latest/documentation.htmlweb

創建鏈接

首先注意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:若是想要附加信息,使用app

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

接着就大功告成了~maven

相關文章
相關標籤/搜索