1.使用背景
在搭建即時通訊的時候,一般采用Openfire+smack實現(xiàn)(如:第三方環(huán)信 )。由于Asmack已經(jīng)廢棄。所以先使用官方最新庫 : GitHub上的指導(dǎo)
2.使用大致流程
2.1新建一個工程,導(dǎo)入以下依賴
repositories {
? ? ? maven {
? ? ? ? ?url 'https://oss.sonatype.org/content/repositories/snapshots'
? ? ? ?}
? ? ? mavenCentral()
}
dependencies {
compile "org.igniterealtime.smack:smack-android-extensions:4.2.0"
compile "org.igniterealtime.smack:smack-tcp:4.2.0"
compile "org.igniterealtime.smack:smack-android:4.2.0"
}
2.2連接Openfire服務(wù)器
InetAddress address = InetAddress.getByName(Const.ip);
//配置信息
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
.setXmppDomain("192.168.100.116")//設(shè)置xmpp域名
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)//安全模式認證
.setHostAddress(address)
.setPort(Const.port)
.build();
xmpptcpConnection = new XMPPTCPConnection(config);//連接類
xmpptcpConnection.connect();
2.3 .用戶登錄
//設(shè)置是否在線狀態(tài),和狀態(tài)說明
Presence presence = new Presence(Presence.Type.unavailable);
presence.setStatus("Gone fishing");
xmpptcpConnection.sendStanza(presence);
xmpptcpConnection.login(userName, password);//關(guān)鍵代碼
2.4用戶好友獲取
? ? 兩種方式:(1)
Roster instanceFor = Roster.getInstanceFor(xmpptcpConnection);
Set entries = instanceFor.getEntries();
for (RosterEntry entry:entries) {
entry.getType();
entry.getName();//昵稱
entry.getGroups();//好友所在的組
entry.getJid().getDomain();//好友域名
entry.getJid().getLocalpartOrNull();//好友名稱
entry.getUser();//(廢棄)好友完整名稱(包括域名)
}
?(2)
Roster instanceFor = Roster.getInstanceFor(xmpptcpConnection);
Collection groups = instanceFor.getGroups();
group.getName();//獲取用戶組名
? ? ?for (RosterGroup group:groups) {
? ? ? List entries = group.getEntries();
? ? ? ? ? ? ? for (RosterEntry entry : entries) {
? ? ? ? ? ? ? ?}
? ? ? ? }
2.5接收消息和發(fā)送消息
(1) 接收消息:獲取聊天管理器,注冊獲取消息監(jiān)聽
ChatManager chatManager = ChatManager.getInstanceFor(xmpptcpConnection);
chatManager.addIncomingListener(new IncomingChatMessageListener() {
@Override
public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {
if (message.getBody() != null) {
Log.e("消息接收——", message.getBody().toString() + "");
}
}
});
(2)發(fā)送消息:獲取聊天管理器,指定消息接收人,發(fā)送消息
ChatManager chatManager = ChatManager.getInstanceFor(xmpptcpConnection);
//JidCreate.entityBareFrom("用戶名@域名");獲取用戶ID
EntityBareJid jid = JidCreate.entityBareFrom("xxx@192.168.100.116");
Chat chat = chatManager.chatWith(jid);
chat.send("woaini1");
//Add a new listener for outgoing chat messages.
chatManager.addOutgoingListener(new OutgoingChatMessageListener() {
@Override
? ? ? public void newOutgoingMessage(EntityBareJid to, Message message, Chat chat) {
? ? ? ? ? ? ? ? ?Log.e("發(fā)哦送消息", "" + message.getBody().toString());
? ? ? }
});
至于其他的相關(guān)操作可能留待以后吧。。。。第一次在簡書上寫文章,如若有不當之處,請指教