【问题标题】:ejabberd muc/sub and mod_push - push notificationsejabberd muc/sub 和 mod_push - 推送通知
【发布时间】:2021-03-06 06:56:40
【问题描述】:

我需要为我的移动聊天用户提供“正常”的推送通知,就像今天的任何聊天一样。

我阅读了关于 MUC/SUB 的指南并以这种方式实现了我的房间,因此我的客户订阅了房间消息。 mod_muc 房间被配置为 peristent 和 allow_subscriptions... 并且按预期工作,客户端在线时无需加入房间即可接收消息。

  • 我启用了 mod_push 来捕获发送给离线用户的消息

  • 我正在使用我自己的 XMPP 组件“AppServer”来处理离线消息(一个分支:https://git.happy-dev.fr/startinblox/prosody/xmpp-notification-component

  • 客户端订阅在我的 AppServer 上推送通知(使用 XEP-0357 中描述的 IQ-set-enable 节)

  • 我的 AppServer正确接收消息,这些消息按预期直接发送到订阅和离线用户的完整 JID。所以我想我已经大致理解了正确实现和配置了 appServer 组件。 (但我不知道为什么需要完整的 JID)

  • 我的 AppServer 但是不接收为订阅 muc 和 push 和离线的用户发送到 MUC 房间的消息。

我错过了什么?我是否正确理解 MUC/SUB 应该支持 mod_push 开箱即用? 为什么我的 MUC 消息没有推送给订阅用户? 为什么我需要带有资源的完整 JID 才能使推送通知工作?

(使用 ejabberd 20.4.0)

【问题讨论】:

    标签: push-notification xmpp ejabberd ejabberd-module


    【解决方案1】:

    我的 AppServer 按预期正确接收直接发送到订阅和离线用户的完整 JID 的消息。所以我想我已经大致理解了正确实现和配置了 appServer 组件。 (但我不知道为什么需要完整的 JID)

    我对这里的概念有疑问。

    当一个帐户被注册时,它的 JID 是裸露的:user1@localhost

    当客户端使用该帐户中的资源“tka”启动 XMPP 会话时,完整的 JID 为:user1@localhost/tka

    如果一个帐户(user1@localhost)没有任何在线会话(没有客户端连接没有资源),那么“完整jid”的概念没有意义:

    当没有客户端连接时,你将消息发送到什么资源?

    但是,对于同时订阅 muc 和 push 和离线的用户,我的 AppServer 不会收到发送到 MUC 房间的消息。

    当一个帐户使用 MUCSUB 订阅房间中的消息,并且该帐户没有会话,并且一条消息被发送到房间...然后 MUCSUB 向该用户发送一条离线消息,我想这应该触发一推。

    您能否检查离线消息是否确实为该帐户存储在数据库的“离线”表中?

    【讨论】:

    • 首先,谢谢您的回答。 - 我没有提到我正在使用 JWT 身份验证,因此用户从未真正注册过,但不应该是一个问题我理解你关于全jid 和连接的推理,但我解释的问题仍在我。发送到裸 jid 的消息不会发送到我的应用服务器,但发送到 连接的完整 jid 的消息会发送。 (原因可能与 muc 消息未传递的原因相同)我检查了“离线”假脱机表,它是空的,没有消息在那里等待,消息在存档中
    猜你喜欢
    • 2016-12-09
    • 2017-03-22
    • 2017-07-01
    • 2018-10-23
    • 2013-04-17
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多