2015-06-20 62 views
0

我創建(又一個)使用Smack和ejabberd的移動聊天應用。我試圖確定實現用戶頭像以供多用戶聊天室使用的最佳方式,當然也包括名單成員。看看可能的解決方案,我可以看到:XMPP支持多用戶聊天中的頭像

  1. XEP-0008基於IQ的頭像 - 頭像被限制爲64 x 64像素,太小。
  2. XEP-0153基於vCard的頭像 - 易於在名單和MUC房間中爲兩個用戶實現,然而(a)像this這樣的源似乎表明自己的vcard需要在每次登錄時下載(這是嚴格正確的(b)應該小於96乘96像素(仍然非常小)
  3. XEP-0084基於個人事件協議的用戶頭像 - 我不清楚我如何可以基於此協議檢索多用戶聊天室中的所有用戶的頭像。加入聊天室後,我需要訂閱所有用戶的元數據節點,以及隨後加入的用戶?當他們離開房間時也取消訂閱?我認爲這將是非常難看和笨拙的實施。

有人能指點我在正確的方向,或指出我可能誤解的地方嗎?謝謝。

+0

您是否試過XEP-0054? – souvickcse

+0

謝謝@souvickcse,我明白XEP-0153是建立在XEP-0054之上的。但是,我發現我可以在XEP-0053中使用vCard的BINVAL和EXTVAL字段來存儲圖像數據或URI到圖像。一些問題:1.對於我們可以在BINVAL中存儲的數據的大小,是否存在實際或理論上的限制?我在規範2中看不到任何內容:用戶自己的vCard是否需要在每次登錄時重新加載?這只是確保跨客戶端同步的一項要求嗎? 3.是否有一種方法可以使用現有的XMPP頭像規範之一來實現此目標(例如標準且交叉兼容)? – Dave

+0

嗨,我沒有那麼多的想法(對此感到抱歉)我已經在我的項目中使用過這個使用https://github.com/robbiehanson/XMPPFramework代碼:'NSData * photoData = [[[AppDelegate delegate ] xmppvCardAvatarModule] photoDataForJID:user.jid];' – souvickcse

回答

0

我想解決這個問題的最佳方法可能是通過HTTP服務器存儲/加載圖像帶外。圖像可以用諸如「username_imagehash.xxx」之類的文件名來存儲。對於不在名單上的用戶(例如多用戶聊天中的陌生人),我們通過從他們的vCard PHOTO字段檢索到的URI來拉他們的頭像。每次遇到陌生人時,我們都會重新加載他們的vCard,並且可以通過更改vCard中的URI來識別是否需要重新下載他們的照片。

一旦用戶被添加到自己的名單中,我們通過XEP-0084訂閱他們的頭像更新,發佈相同的URI(參見XEP-0084中的示例4.)。

我認爲這解決了所有要求,我會發現一旦我已經實施。我可以理解,在標準XMPP客戶端中不這樣做,因爲它依賴於與XMPP服務分開的HTTP服務器(並且需要處理HTTP服務器安全性 - 用戶授權/身份驗證)。

反饋歡迎!