安卓大做業要作一個聊天室,而後查到了XMPP協議,而後搭建了openfire服務器(就是安裝一下便可)
但是到了XMPP編程的時候發現了問題,Smack是一個開源的已於使用的XMPP客戶端類庫,我選擇這個類庫,不過網上的資料不少版本過老,就本身去github查了查。這也是開源好處。
首先,要把Smack導入到Android Studio,
發現Smack不須要下載,能夠在AS配置便可,html
首先是Smack的文檔:https://download.igniterealtime.org/smack/docs/latest/javadoc/
編程的時候參照上面就行。java
在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
主要依據: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