【问题标题】:ejabberd MUC-SUB Event Notification till the MUC invite is acceptedejabberd MUC-SUB 事件通知,直到 MUC 邀请被接受
【发布时间】:2017-03-22 22:15:21
【问题描述】:

我正在使用 Ejabberd 的 MucSub 方法来实现移动群聊客户端。用户创建房间并向必须是该组成员的用户发送 MUC 邀请。客户端被配置为自动接受 MUC 邀请,然后订阅房间的 pubsub 节点以进行各种事件。

但是问题在于,一个不在线的用户在没有订阅节点之前不会收到任何发布的事件,这在用户上线一次之前不会发生,因此无法针对这些事件向此类用户发送推送通知。

应该采用什么方法来实现这一目标?

【问题讨论】:

    标签: xmpp ejabberd publish-subscribe multiuserchat


    【解决方案1】:

    向给定用户发送邀请会作为直接消息发送给该用户。它也存储在离线存储中,因此用户将在重新连接时获取它。

    例如:

    1. 用户A向用户B发送room@conference.localhost的MUC邀请,用户B离线:

      <message to='room@conference.localhost'>
        <x xmlns='http://jabber.org/protocol/muc#user'>
          <invite to='userB@localhost'/>
        </x>
      </message>
      
    2. 当用户B连接时,他会收到邀请:

      <message from="room@conference.localhost" type="normal" to="userB@localhost">
       <x xmlns="http://jabber.org/protocol/muc#user">
        <invite from="userA@localhost/laptop">
         <reason/>
        </invite>
       </x>
       <x xmlns="jabber:x:conference" jid="room@conference.localhost"/>
       <body>userA@localhost/laptop invites you to the room room@conference.localhost</body>
       <delay xmlns="urn:xmpp:delay" from="localhost" stamp="2016-11-09T08:10:58.063Z">Offline Storage</delay>
      </message>
      

    当用户B在connect上收到离线消息时,他可以订阅MUC事件。

    【讨论】:

    • 是的@MickaëlRémond,这正是我实现它的方式,我唯一的问题是我想在用户接受邀请和订阅之前为发送到房间的消息生成推送通知。我们有没有可能以某种方式实现这一目标?
    • 嗯,这是一个自定义用例,所以你必须以某种方式自己实现它。大多数部署不希望在用户接受邀请之前推送聊天室中所有消息的通知。感觉就像推送垃圾邮件。
    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 2018-10-07
    • 2021-03-06
    • 2018-10-23
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多