作为项目经理的要求,我们需要使用https://github.com/igniterealtime/Smack进行xmpp连接,而不是旧的aSmack库。 但正如我发现的那样,新的xmpp库igniterealtime对于android studio IDE用户来说并不友好,在我的项目中使用这个库后,我无法将它连接到我们的xmpp服务器。
问题1:如何使这个新图书馆有效?
问题2:如何向xmpp服务器发送信息查询包,换句话说,如何向服务器发送“<iq>...</iq>
”查询一些信息?
答案 0 :(得分:0)
关注问题1: 首先,更改应用程序级别build.gradle:
在依赖关系细分中添加以下内容:
compile ("org.igniterealtime.smack:smack-android:4.1.0") {
exclude group: 'xpp3', module: 'xpp3'
}
// Optional for XMPPTCPConnection
compile ("org.igniterealtime.smack:smack-tcp:4.1.0") {
exclude group: 'xpp3', module: 'xpp3'
}
// Optional for XMPP-IM (RFC 6121) support (Roster, Threaded Chats, …)
compile ("org.igniterealtime.smack:smack-im:4.1.0") {
exclude group: 'xpp3', module: 'xpp3'
}
将以下内容添加到您的存储库细分:
maven {
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
mavenCentral()
已经将igniterealtime xmpp库包含到项目中,我们现在可以使用它。
XMPPTCPConnectionConfiguration cfg = XMPPTCPConnectionConfiguration.builder()
.setServiceName("online.yourdomain.com")
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.setCompressionEnabled(false)
.setDebuggerEnabled(true)
.build();
XMPPTCPConnection xmppConnection = new XMPPTCPConnection(cfg);
xmppConnection.connect();
if (!xmppConnection.isAuthenticated()) {
try {
xmppConnection.login(jabberId, yourSessionStr, resourceID);
} catch (SmackException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
关注问题2:
String XMPP_NAMESPACE = "myapp:notification";
SimpleIQ iq = new SimpleIQ("query", XMPP_NAMESPACE) {
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
xml.attribute("action", "list");
xml.rightAngleBracket();
xml.element("from", lastDisconnectedTime + "");
return xml;
}
};
iq.setType(IQ.Type.get);
try {
xmppConnection.sendPacket(iq);
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
}
ps:我发现发送IQ数据包不如使用asmack那么方便。这是发送IQ数据包的旧方法。
IQ iq = new IQ() {
@Override
public String getChildElementXML() {
String query = "<query xmlns=\'" + XMPP_NAMESPACE + "\' action=\'list\'>";
query += "<from>" + lastDisconnectedTime + "</from>";
query += "</query>";
return query;
}
};
iq.setType(Type.GET);
xmppConnection.sendPacket(iq);
注意:我必须在创建XMPPTCPConnectionConfiguration时禁用安全模式,否则无法建立xmpp连接。如果你想让这个xmpp连接安全,你必须先创建自己的bks认证文件,然后在你的xmpp连接中使用它。