在Openfire Server

时间:2015-06-05 15:52:19

标签: android xmpp openfire smack asmack

我正在Android平台上使用XMPP协议和Openfire服务器实现消息传递应用程序。我需要保存并加载自己的Vcard和其他用户vcard。目前,我设法将我的vCard保留在服务器上并可以再次加载它。问题出在其他用户的Vcards上,服务器总是返回XMPPError:feature-not-implemented - cancel。

我使用这个库:

compile 'org.igniterealtime.smack:smack-android:4.1.2-SNAPSHOT'
compile 'org.igniterealtime.smack:smack-tcp:4.1.2-SNAPSHOT'
compile 'org.igniterealtime.smack:smack-extensions:4.1.2-SNAPSHOT'

显示代码:

保存我自己的Vcard(工作正常)。

VCardManager vCardManager = VCardManager.getInstanceFor(connection);
VCard vCard;
vCard = vCardManager.loadVCard();
vCard.setNickName("User name");
URL urldefault = new URL("Avatar URL");
InputStream stream = urldefault.openStream();
byte[] avatar1 = readBytes(stream);
vCard.setAvatar(avatar1, "avatar1/jpg");
vCard.setEmailHome("user email");
vCard.setPhoneHome("mobile", "888888888");
vCardManager.saveVCard(vCard);

加载我自己的Vcard(工作正常)

VCard vCard = null;
VCardManager vCardManager = VCardManager.getInstanceFor(connection);
vCard = vCardManager.loadVCard();

问题出在这里。加载其他用户Vcard:

VCardManager vCardManager = VCardManager.getInstanceFor(connection);
boolean isSupported = vCardManager.isSupported(user);
if (isSupported)  // return true
    vCard = vCardManager.loadVCard(user);

加载Vcard的用户名是正确的。

有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:8)

您可能遇到的问题是JID的后缀。 connection.getUser()方法将JID返回为user@example.com/Smack。要获取vCard详细信息,您需要将其查询为user@example.com(不带/ Smack)。尝试一下,让我知道它是否有效。