← All posts tagged XMPP

на жуйке отломался постинг через xmpp, и я не буду торопиться его чинить — раз никому не надо и никто не собирается его поддерживать, значит починю как будет время, возможно в этом году :)

@zinid, я конечно понимаю что всем пофиг, но если убрать compression из фич ejabberd до авторизации, то клиенты с включённым сжатием смогут лучше подключаться, щас если начать сжатие до авторизации, то ejabberd сходит с ума — говорит что включил, но продолжает слать обычным текстом. Если же сначала авторизоваться, то работает

Модные современные мессенджеры умеют получать push-уведомления на Android/iOS-устройства о новых сообщениях, а XMPP разработчики этих убийц Whatsapp-а считают "устаревшим" и "не умеющим" реализовывать подобные фичи. На самом деле все очень просто и нужно совсем немного кода:
1) берем xmpp-сервер prosody и модуль mod_smacks из prosody-modules, реализующий XEP-0198: Stream Management
2) настраиваем ему параметр smacks_hibernation_time = 86400 — столько секунд он будет держать сессию клиента подключенной, если он(клиент) отключился.
3) немножко патчим его(модуль), добавляя туда один единственный вызов события получения сообщения — paste.org.ru
4) теперь пишем дополнительный модуль, назовем его mod_smacks_notifications, который будет слать принятые во время отсутствия клиента сообщения через Google Cloud Messaging (аналогичным образом можно работать и с Apple и Microsoft, coming soon)
paste.org.ru
5) далее нужно добавить поддержку в клиент, мной взят Android-клиент SawIM:
а) быстренько дописываем поддержку XEP-0198, очень простой XEP, нам достаточно считать полученные пакеты и по запросу сервера высылать это число, ну и естественно включать управление сессиями и продолжать разорванную сессию.
б) при получении от GCM регистрационного кода устройства, шлем нашему серверу запрос типа:
<iq type=set"><register xmlns="..." regid="[полученный-regid-от-гугла]" /></iq>
в) Создаем в Google API Console проект для нашего мессенджера, в консоли разработчика Google Play связываемся с приложением через Server API Key, в конфигурации нашего написанного модуля указываем gcm_api_key.
На все про всё ушло пара дней неспешной работы в свободное время, lua видел второй раз в жизни, ну java видел чуть побольше :) — github.com

Сборочка Spectrum2 под Шиндошс — dropbox.com
Отладочные символы + все необходимое для того чтоб написать свой плагин, например транспорт вконтактика — dropbox.com
Дополнительно требуется Шиндошс Vista/Server 2008 и выше (на икспи/2003 работать не будет) и MSVC 2012 Redist X86 — microsoft.com