在 Openfire 服务器中使用 Smack (Android) 加载 Vcards
Load Vcards with Smack (Android) in Openfire Server
我正在 android 平台上使用 XMPP 协议和 Openfire 服务器实现消息传递应用程序。我需要保存和加载我自己的 Vcard 和其他用户的 vcard。目前,我设法将 vCard 保存在服务器上并可以再次加载它。问题出在其他用户的 Vcards 上,服务器总是 return 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的用户名正确。
有什么想法吗?
提前致谢。
您可能面临的问题是 JID 的后缀。 connection.getUser() 方法 returns JID 为 user@example.com/Smack。要获取 vCard 详细信息,您需要以 user@example.com(不带 /Smack)的身份进行查询。试试看,如果有效请告诉我。
我正在 android 平台上使用 XMPP 协议和 Openfire 服务器实现消息传递应用程序。我需要保存和加载我自己的 Vcard 和其他用户的 vcard。目前,我设法将 vCard 保存在服务器上并可以再次加载它。问题出在其他用户的 Vcards 上,服务器总是 return 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的用户名正确。
有什么想法吗?
提前致谢。
您可能面临的问题是 JID 的后缀。 connection.getUser() 方法 returns JID 为 user@example.com/Smack。要获取 vCard 详细信息,您需要以 user@example.com(不带 /Smack)的身份进行查询。试试看,如果有效请告诉我。