Подтвердить что ты не робот

Ejabberd и Push Notification

У меня есть интегрированная чат-система в моем приложении iOS и Android с помощью XMPP. Я использовал ejabberd 2 на стороне сервера. Беседа sytem работает отлично. Я хочу интегрировать push-уведомление во время прослушивания с помощью APNS и GCM. Как я могу отправить push-уведомление с каждым сообщением чата? ejabberd 2 имеет какие-либо API или расширения, доступные для реализации этой функции?

Справка очень заметна,

4b9b3361

Ответ 2

Нет модуля ejabberd для apns или gcm. Я думаю, у вас есть два основных варианта:

  • Используйте модуль mod_offline_post, который отправит запрос POST на указанный URL. Затем вы можете использовать любой существующий бэкэнд-язык для обработки как apns, так и gcm (я все равно использую рельсы в качестве бэкэнда, так что это только еще одна точка доступа для обработки).

  • На основе mod_offline_post создайте свой собственный модуль, который будет отправлять push-уведомления вместо запроса POST. Есть несколько примеров и библиотек, которые реализуют apns и gcm. То есть apns4erl для apns и этот код для gcm. Но для этого, конечно, было бы хорошо знать некоторые erlang.

Ответ 3

AFAIK нет открытого модуля ejabberd, который предоставляет интерфейс для GCM или APN.

Я предлагаю вам реализовать пользовательский модуль с ejabberd_hook. Вы можете увидеть пример внутреннего модуля ejabberd и крюка присутствия здесь.

Если вы хотите пересылать сообщения автономным пользователям, я предлагаю offline_message_hook, а для общей фильтрации сообщений я предлагаю filter_packet({From, To, Packet}) и проверять тип пакета (см. this stackoverflow).

Зная получателя, вы можете извлечь из db идентификатор токена/идентификатор устройства и переслать сообщение с помощью некоторого кода erlang.

Для APN взгляните на некоторый простой код, объясняющий, как он работает или с этим erlang ex_apns. Если вам нужна дополнительная информация о APN, если вы хотите, чтобы макет сервера для APN, вы можете прочитать этот блог post.

Для примера GCM вы можете использовать ссылку примера, предоставленную @Lucas.