2013-02-28 2 views
0

Я разрабатываю приложение для чата для android, используя ejabberd в качестве сервера XMPP. Я хочу отправить уведомление GCM push, когда пользователь отключен. Для этого я создаю новый модуль в ejabberd, registerd offline_message_hook, но эта функция вызывается только тогда, когда кто-то начинает печатать и заканчивает печатать. Ниже перечислены только пакеты, переданные этому крюку. Хотя, пользователь получает сообщение, когда он/она приходит в Интернет.offline_message_hook: не вызывается при отправке автономного сообщения

Packet: {xmlelement, 
     "message", 
     [{"type", 
     "chat"}, 
     {"id", 
     "purple7d4d0773"}, 
     {"to", 
     "[email protected]"}], 
     [{xmlelement, 
     "paused", 
     [{"xmlns", 
     "http://jabber.org/protocol/chatstates"}], 
     []}]} 
Packet: {xmlelement, 
     "message", 
     [{"type", 
     "chat"}, 
     {"id", 
     "purple7d4d0773"}, 
     {"to", 
     "[email protected]"}], 
     [{xmlelement, 
     "composing", 
     [{"xmlns", 
     "http://jabber.org/protocol/chatstates"}], 
     []}]} 
+0

Привет, вы можете поделиться своим модулем gcm? –

+0

Привет @TolgayToklar, у меня нет реальной реализации со мной в данный момент. Однако вы можете реализовать [GCM push] (https://www.google.co.in/search?q=gcm+implementation+in+erlang), используя [офлайн-крючок в ejabberd] (https://www.google.co .в/поиск? д = ejabberd + отсутствует + крючок). Надеюсь, это поможет! – raxith

+0

Где вы храните токен устройства Android? –

ответ

5

Две вещи о крючках в ejabberd: 1) Обратные вызовы называются всегда в порядке, порядок определяется приоритет указанный вами при регистрации его. 2) Если обратный вызов возвращает «остановить», он предотвращает распространение события для остальных слушателей в цепочке.

Происходит то, что автономный модуль ejabberd прослушивает в автономном режиме, как и ваш код. Он обрабатывает сообщение и возвращает «stop», поэтому ваш код не выполняется.

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

Возможно, вам нужен код, который должен быть запущен до автономный модуль хранения. Не забудьте не возвращать «стоп», чтобы автономный модуль имел возможность хранить сообщение.

+0

спасибо, в настоящее время порядка 50, я изменю его до 1 и дам вам знать. Кстати, какой порядок автономного модуля по умолчанию? – raxith

+1

mod_offline зарегистрировать себя и на 50. Если вы используете тот же приоритет, который вы вызываете первым, не определено (в настоящее время учитываются имя модуля и обратный вызов функции, но лучше учитывать ситуацию как неопределенную) – ppolv

+0

Спасибо за предложение, да, если заказ изменился на 1 это работает как шарм. : D –

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