Как интегрировать FCM с Ejabberd?

#android #erlang #firebase-cloud-messaging #ejabberd #smack

#Android #erlang #firebase-облако-обмен сообщениями #ejabberd #удар

Вопрос:

Окружающая среда:

Версия Ejabberd: 16.04

Smack-android-4.1.0

Я создал приложение для чата Android с XMPP-сервером. Однако из-за проблемы с разрешением Google Play мне пришлось сузить функцию приложения, которая поддерживала получение уведомлений о входящих сообщениях, когда приложение работает в фоновом режиме.

В качестве альтернативы я получил следующее предложение от группы обзора GooglePlay.

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

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

Я хочу улучшить текущее приложение, чтобы, даже если пользователь закрыл приложение, он все равно получал уведомление, когда кто-то отправлял ему сообщение (аналогично WhatsApp)

  1. Есть ли в ejabberd модуль, который интегрирует сервер с FCM и обрабатывает это?

  2. Если мы не можем достичь этого с помощью Ejabberd, есть ли сторонняя библиотека для поддержки этого?

  3. Если нет, нужно ли нам писать модуль Erlang с нуля?

Я нашел похожие вопросы в Интернете, но не смог найти никакого рабочего решения. Поскольку я не очень разбираюсь в Erlang и был бы рад услышать ваши решения / идеи по этому поводу. Заранее спасибо.

Ответ №1:

Этого можно достичь в Ejabberd с помощью offline_message_hook. Этот хук срабатывает при отправке сообщения получателю и приемнику в автономном состоянии. Итак, создайте пользовательский модуль, используя этот хук, и вы сможете отправлять push-уведомления на серверы FCM и APNs. Обратитесь к этому блогу —https://jasonrowe.com/2011/12/30/ejabberd-offline-messages

Ответ №2:

Похоже, вам нужно попробовать применить подход ниже:

  • Создайте REST API для хранения пользовательских токенов с идентификаторами пользователей
  • Создайте пользовательский хук для извлечения XML-пакетов.
  • Интегрировать в проект библиотеку epns (эта библиотека может отправлять FCM / APNS)
  • В пользовательском подключении вызывается spawn функция, которая будет получать токен пользователя из базы данных по JID и создавать полезную нагрузку с отправкой уведомления FCM / APNS