【问题标题】:Load Vcards with Smack (Android) in Openfire Server在 Openfire Server 中使用 Smack (Android) 加载 Vcard
【发布时间】:2015-08-20 15:42:45
【问题描述】:

我正在 Android 平台上使用 XMPP 协议和 Openfire 服务器实现消息传递应用程序。我需要保存并加载我自己的 Vcard 和其他用户的 Vcard。目前,我设法将我的 vCard 保存在服务器上,并且可以再次加载它。问题出在其他用户的 Vcard 上,服务器总是返回 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 是 example@anotherxmpp.com,没有 Smack 扩展名。你知道为什么它不起作用吗?
  • mmm 我用没有 /Smack 的用户的 jid 解决了我的问题。您在应用程序中使用的是什么版本?
  • 感谢回复...我使用的是 Smack 4.1.6 API,但昨天我阅读了一些错误报告,似乎它与服务器有关。我的 jid 是正确的,所以这不是问题。还有一个问题,您的连接,您是刚刚使用您的 jid 登录,还是在调用另一个用户的 vcard 之前我需要对 Connection 进行一些更改?
  • 没有必要进行更多更改。我使用我的 JID 登录,从那里我可以咨询其他用户的 vCard。但是,我使用 vCard 的经验是它们有点不稳定。如果你只用来管理头像就可以了,如果你输入很多信息效果就更差了。
  • 奇怪....好的,但再次感谢您的回复.....

标签: android xmpp openfire smack asmack


【解决方案1】:

您可能面临的问题是 JID 的后缀。 connection.getUser() 方法将 JID 作为 user@example.com/Smack 返回。要获取 vCard 详细信息,您需要以 user@example.com 的形式查询它(不带 /Smack)。试试看,让我知道它是否有效。

【讨论】:

  • 太棒了!!。在 connection.getUser() 中,我会收到 usuario@jabber/Smack。我只尝试使用 usuario@jabber,它工作正常。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2010-12-05
  • 2018-04-27
相关资源
最近更新 更多