механизм синхронизации xmpp для клиента iOS

Я использую клиент iOS https://github.com/robbiehanson/XMPPFramework
успешно установить ejabberd на стороне клиента и включите режим архива на сервере, чтобы можно было отправлять и получать сообщения.

Моя проблема заключается в том, как получить старые сообщения и синхронизировать их с моими локальными основными данными. Я прочитал поддержку фреймворка, и он частично поддерживает XEP-0136.

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

Если у кого-то есть идеи о синхронизации. пожалуйста, дайте мне знать.


person Manish Agrawal    schedule 02.04.2014    source источник


Ответы (2)


привет, я многое сделал в xmpp из (http://xmpp.org/xmpp-protocols/xmpp-extensions/), вы можете получить пример из приведенных ниже ссылок github, вы можете получить много помощи от этого

(демонстрационные ссылки: ) https://github.com/sesharim/ios-jabber-client

https://github.com/funkyboy/Building-a-Jabber-client-for-iOS

(Ссылка на демонстрацию проекта xmmp :)

https://github.com/chrisballinger/ChatSecure-iOS

Я надеюсь, что это поможет вам полностью ..

вы можете узнать, как получить старые сообщения, список пользователей и другие подробности из приведенных выше демонстрационных программ.

person Mitul Bhadeshiya    schedule 02.04.2014
comment
я пробовал все три демонстрационных проекта, но никто не предоставляет историю последних сообщений, когда клиент выходит из системы и входит в систему. - person Manish Agrawal; 03.04.2014
comment
@mayank-baddi, вы можете получить этот код из ChatSecure-iOS, чтобы узнать, как сохранить сообщение в основные данные, что имя класса XMPPMessageArchivingCoreDataStorage, вы можете найти этот код в вышеприведенном проекте, чем сохранить ваши основные данные, и после того, как вы можете получить из данных кода. .. нет возможности резервного копирования при резервном копировании сообщений на стороне сервера в xmpp. - person Mitul Bhadeshiya; 03.04.2014
comment
Я включил режим архива сообщений на сервере, когда пользователь удалил приложение и установил его снова, я хочу получить последние сообщения с сервера и синхронизировать их с локальным, может ли приведенный выше код это обеспечить? - person Manish Agrawal; 03.04.2014
comment
нет, этот код недоступен в этом... извини, чувак. - person Mitul Bhadeshiya; 03.04.2014
comment
Здравствуйте, mitul, я получаю xmpppmessagearchivingstorage как nil, поэтому я не могу сохранить сообщение в coredata. не могли бы вы направить меня - person Moin Shirazi; 23.06.2016

Внимательно прочтите XEP-0136 — в нем описывается, как получить существующий архив. На самом деле XMPPFramework уже реализует хранение всех простых входящих сообщений — вам просто нужно инициализировать XMPPMessageArchiving с помощью XMPPMessageArchivingCoreDataStorage и активировать модуль на вашем XMPPStream. Затем вы можете выполнять запросы на получение основных данных на [XMPPMessageArchiving mainThreadManagedObjectContext]. Если вы хотите получить ранее заархивированные сообщения, вам следует немного расширить XMPPFramework:

  • отправить ‹list ... /› запрос, необязательно ограниченный Управление набором результатов (которые также поддерживаются XMPPFramework)
  • обработать результат (который дает вам заархивированные коллекции с пользовательским jid и отметкой времени) и запросить интересующую коллекцию с помощью ‹получить ... /› запрос
  • обрабатывать результат и отправлять [XMPPMessageArchiving archiveMessage:] с каждым сообщением в результирующем наборе, а XMPPFramework сделает остальную работу — вставит в основное хранилище данных — за вас.
person vitalyster    schedule 02.04.2014
comment
Запрос «список» работает нормально, но запрос «извлечь» не работает, он всегда возвращает код ошибки-503, служба не реализована. Дайте мне знать, если у вас есть какие-либо идеи или демо-код. - person Manish Agrawal; 03.04.2014
comment
Насколько я помню, модуль mod_archive ejabberd устарел и не поддерживается, возможно, есть ошибки. Попробуйте openfire и/или просодию, возможно, есть лучшие реализации - person vitalyster; 03.04.2014