ejabberd muc/sub и mod_push — push-уведомления

Мне нужны нормальные push-уведомления для пользователей моего мобильного чата, как и ожидается от любого чата сегодня.

Я прочитал руководство по MUC/SUB и реализовал свои комнаты таким образом, поэтому мои клиенты подписаны на сообщения комнаты. Комнаты mod_muc настроены как peristent и allow_subscriptions... и работают как положено, клиенты получают сообщения, когда находятся в сети, без необходимости присоединяться к комнате.

  • Я включил mod_push для перехвата сообщений, предназначенных для офлайн-пользователей.

  • Я использую свой собственный компонент XMPP AppServer для обработки офлайн-сообщений (форк: https://git.happy-dev.fr/startinblox/prosody/xmpp-notification-component)

  • Клиенты подписываются на push-уведомления на моем AppServer (используя раздел IQ-set-enable, как описано в XEP-0357)

  • Мой AppServer правильно получает сообщения, которые отправляются непосредственно на полный JID подписанного и отключенного пользователя, как и ожидалось. Итак, я думаю, что в целом правильно реализовал и настроил компонент appServer. (однако я не знаю, зачем нужен полный JID)

  • Однако мой AppServer не получает сообщения, которые отправляются в комнаты MUC для пользователей, которые подписаны как на muc, так и на push и в автономном режиме.

Что мне не хватает? Я правильно понимаю, что MUC/SUB должен поддерживать mod_push из коробки? Почему мои сообщения MUC не отправляются подписавшимся пользователям? Зачем мне нужен полный JID с ресурсом для работы push-уведомлений?

(Используя ejabberd 20.4.0)


person Panter4    schedule 23.11.2020    source источник


Ответы (1)


Мой AppServer правильно получает сообщения, которые отправляются непосредственно на полный JID подписанного и автономного пользователя, как и ожидалось. Итак, я думаю, что в целом правильно реализовал и настроил компонент appServer. (однако я не знаю, зачем нужен полный JID)

У меня есть сомнения относительно концепций здесь.

Когда учетная запись зарегистрирована, она имеет простой JID: user1@localhost.

Когда клиент запускает сеанс XMPP с ресурсом tka в этой учетной записи, полный JID будет следующим: user1@localhost/tka.

Если у учетной записи (user1@localhost) нет онлайн-сессии (ни один клиент не подключен к ресурсу), то концепция полного jid не имеет смысла:

Когда ни один клиент не подключен, на какой ресурс вы отправляете сообщение?

Однако мой AppServer не получает сообщения, которые отправляются в комнаты MUC для пользователей, которые подписаны как на muc, так и на push и в автономном режиме.

Когда учетная запись подписывается с помощью MUCSUB на сообщения в комнате, и эта учетная запись не имеет сеансов, и сообщение отправляется в комнату... тогда MUCSUB отправляет автономное сообщение этому пользователю, и я полагаю, что это должно вызвать Push.

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

person Badlop    schedule 25.11.2020
comment
во-первых, спасибо за ответ. - Я не упомянул, что использую JWT-аутентификацию, поэтому пользователь никогда не регистрируется, но это не должно быть проблемой. Я понимаю ваши рассуждения относительно полного jid и соединений, но проблема, которую я объяснил, все еще происходит с меня. Сообщения, отправленные на чистый jid, не доставляются на мой сервер приложений, но сообщения, отправленные на полный jid, который был подключен, доставляются. (причина этого может быть той же, что и для сообщений muc, которые не доставляются) Я проверил автономную таблицу спула, она пуста, там нет ожидающих сообщений, сообщения находятся в архиве. - person Panter4; 26.11.2020