【问题标题】:XMPP support for avatars in multi-user chatXMPP 支持多用户聊天中的头像
【发布时间】:2015-09-06 06:37:29
【问题描述】:

我正在使用 Smack 和 ejabberd 创建(又一个)移动聊天应用程序。我正在尝试确定实现用于多用户聊天室的用户头像的最佳方式,当然也适用于名册成员。查看可能的解决方案,我可以看到:

  1. XEP-0008 基于 IQ 的头像 - 头像被限制为 64 x 64 像素,太小了。
  2. XEP-0153 基于 vCard 的化身 - 易于为花名册和 MUC 房间中的用户实现,但是 (a) 诸如 this 之类的来源似乎表明每次登录时都需要下载自己的 vcard(这是绝对正确?我在规格中看不到这一点),并且 (b) 应该小于 96 x 96 像素(仍然很小)
  3. XEP-0084 基于个人事件协议的用户头像 - 我不清楚如何在基于此协议的多用户聊天室中检索所有用户的头像。加入聊天室后,我需要订阅所有用户的元数据节点,还有后续加入的用户吗?当他们离开房间时也取消订阅?我认为这将很难实现且笨拙。

谁能指出我正确的方向,或者指出我可能误解了哪里?谢谢。

【问题讨论】:

  • 你试过 XEP-0054 吗?
  • 谢谢@souvickcse,我知道 XEP-0153 是建立在 XEP-0054 之上的。但是,我发现我可以利用 XEP-0053 中 vCard 的 BINVAL 和 EXTVAL 字段来存储图像数据或图像的 URI。一些问题: 1.我们可以存储在 BINVAL 中的数据大小是否存在实际或理论上的限制?我在规范 2 中看不到任何内容:是否需要在每次登录时重新加载用户自己的 vCard?这只是确保跨客户端同步的要求吗? 3. 有没有办法使用现有的 XMPP 头像规范之一来实现这一点(例如标准和交叉兼容)?
  • 嗨,我没有太多想法(对此感到抱歉)我在我的一个项目中使用了这个,使用 github.com/robbiehanson/XMPPFramework 代码:NSData *photoData = [[[AppDelegate delegate] xmppvCardAvatarModule] photoDataForJID:user.jid];

标签: xmpp ejabberd smack


【解决方案1】:

我想解决此问题的最佳方法可能是通过 HTTP 服务器带外存储/加载图像。图像可以使用诸如“username_imagehash.xxx”之类的文件名存储。对于不在一个人名册中的用户(例如,多用户聊天中的陌生人),我们通过从他们的 vCard PHOTO 字段中检索到的 URI 来提取他们的头像。每次重新/遇到陌生人时,我们都会重新加载他们的 vCard,并且可以通过更改 vCard 中的 URI 来确定是否需要重新下载他们的照片。

一旦用户被添加到一个人的名单中,我们就会通过 XEP-0084 订阅他们的头像更新,发布相同的 URI(参见 XEP-0084 中的示例 4)。

我认为这满足了所有要求,我会在实施后发现。我可以理解,在标准 XMPP 客户端中并没有这样做,因为它依赖于独立于 XMPP 服务的 HTTP 服务器(并且需要处理 HTTP 服务器安全 - 用户授权/身份验证)。

欢迎反馈!

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 2014-06-10
    • 2012-01-14
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多