2015-06-20 3 views
0

Я создаю (еще одно) приложение для мобильного чата, используя Smack и ejabberd. Я пытаюсь установить лучший способ реализации пользовательских аватаров для использования в многопользовательских чатах, а также, конечно же, для членов списка. Рассматривая возможные решения, я могу видеть:Поддержка XMPP для аватаров в многопользовательском чате

  1. XEP-0008 Аватары на основе IQ - аватары ограничены 64 на 64 пикселя, слишком малы.
  2. XAP-0153 vCard-based avatars - Простота реализации для пользователей в списке и в комнатах MUC, однако (а) источники, такие как this, похоже, указывают на то, что ваш собственный vcard необходимо загружать при каждом входе в систему (это строго верно ? Я не вижу этого в спецификациях), и (b) должно быть меньше 96 на 96 пикселей (все еще довольно мало)
  3. XEP-0084 Пользователь Аватар на основе Personal Eventing Protocol - Я не совсем понимаю, как я может извлекать аватары для всех пользователей в многопользовательской чат-комнате на основе этого протокола. Присоединившись к чат-комнате, мне нужно будет подписаться на узел метаданных всех пользователей и любое последующее присоединение к пользователям? А также отказаться от подписки, когда они покидают комнату? Я считаю, что это было бы довольно уродливо и неуклюже для реализации.

Может ли кто-то любезно указать мне в правильном направлении или указать, где я, возможно, неправильно понял? Благодарю.

+0

Вы пробовали XEP-0054? – souvickcse

+0

Спасибо @souvickcse, я понимаю, что XEP-0153 построен поверх XEP-0054. Однако я вижу, что я мог использовать поля BINVAL и EXTVAL vCard в XEP-0053 для хранения данных изображения или URI для изображения. Некоторые вопросы: 1. Существуют ли практические или теоретические ограничения на размер данных, которые мы можем хранить в BINVAL? Я не вижу в спецификации 2: нужно ли перезаписывать собственную визитную карточку пользователя при каждом входе в систему? Это просто требование обеспечить синхронизацию между клиентами? 3. Есть ли способ достичь этого, используя один из существующих спецификаций аватара XMPP (такой, который является стандартным и кросс-совместимым)? – Dave

+0

Привет, у меня нет такой идеи (извините за это), я использовал это в одном из моих проектов, используя https://github.com/robbiehanson/XMPPFramework Code: 'NSData * photoData = [[[AppDelegate delegate] ] xmppvCardAvatarModule] photoDataForJID: user.jid]; ' – souvickcse

ответ

0

Я думаю, что лучший способ решить эту проблему - это хранить/загружать изображения вне диапазона через HTTP-сервер. Изображения могут храниться с именем файла, например «username_imagehash.xxx». Для пользователей, не входящих в список (например, незнакомых людей в многопользовательском чате), мы вытаскиваем их аватар через URI, полученный из поля PHOTO vCard. Каждый раз, когда незнакомец снова встречается, мы перезагружаем свою визитную карточку и можем определить необходимость повторной загрузки своей фотографии с помощью изменения URI в vCard.

После того, как пользователь добавлен в свой список, мы подписываемся на их обновления с помощью XEP-0084, публикуя тот же URI (см. Пример 4. в XEP-0084).

Я думаю, что это касается всех требований, я узнаю, как только я это осуществил. Я могу понять, что это не делается таким образом в стандартных клиентах XMPP, поскольку это зависит от HTTP-сервера, отдельного от XMPP-сервиса (и ему необходимо управлять защитой HTTP-сервера - авторизацией пользователя/аутентификацией).

Отзыв добро пожаловать!

Смежные вопросы