Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xmpp ejabberd MUC-SUB事件通知,直到MUC邀请被接受_Xmpp_Ejabberd_Publish Subscribe_Multiuserchat - Fatal编程技术网

Xmpp ejabberd MUC-SUB事件通知,直到MUC邀请被接受

Xmpp ejabberd MUC-SUB事件通知,直到MUC邀请被接受,xmpp,ejabberd,publish-subscribe,multiuserchat,Xmpp,Ejabberd,Publish Subscribe,Multiuserchat,我正在使用Ejabberd的MucSub方法实现一个移动群组聊天客户端。用户创建文件室并向必须是此组成员的用户发送MUC邀请。客户端配置为自动接受MUC邀请,然后为各种事件订阅文件室的pubsub节点 然而,问题在于,非在线的用户在未订阅节点之前不会收到任何已发布的事件,并且只有在用户在线一次之后才会发生,因此不可能向此类用户发送这些事件的推送通知 实现这一点的方法是什么?向给定用户发送邀请是作为直接消息发送给用户的。它还存储在脱机存储中,因此用户将在重新连接时获取它 例如: UserA为roo

我正在使用Ejabberd的MucSub方法实现一个移动群组聊天客户端。用户创建文件室并向必须是此组成员的用户发送MUC邀请。客户端配置为自动接受MUC邀请,然后为各种事件订阅文件室的pubsub节点

然而,问题在于,非在线的用户在未订阅节点之前不会收到任何已发布的事件,并且只有在用户在线一次之后才会发生,因此不可能向此类用户发送这些事件的推送通知


实现这一点的方法是什么?

向给定用户发送邀请是作为直接消息发送给用户的。它还存储在脱机存储中,因此用户将在重新连接时获取它

例如:

  • UserA为
    room@conference.localhost
    发送给用户B,用户B处于脱机状态:

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

    <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>
    
    
    userA@localhost/笔记本电脑邀请您到房间room@conference.localhost
    离线存储
    

  • 当userB在connect上接收到脱机消息时,他可以订阅MUC事件。

    向给定用户发送邀请将作为直接消息发送给用户。它还存储在脱机存储中,因此用户将在重新连接时获取它

    例如:

  • UserA为
    room@conference.localhost
    发送给用户B,用户B处于脱机状态:

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

    <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>
    
    
    userA@localhost/笔记本电脑邀请您到房间room@conference.localhost
    离线存储
    

  • 当userB在connect上收到脱机消息时,他可以订阅MUC事件。

    Yes@Mickaël Rémond,这正是我实现它的方式,唯一的问题是我希望在用户接受邀请并订阅之前为发送到房间的消息生成推送通知。我们有没有可能以某种方式实现这一点?嗯,这是一个自定义用例,所以您必须以某种方式自己实现它。大多数部署不希望在用户接受邀请之前推送聊天室中所有消息的通知。这感觉像是推送垃圾邮件。是的@Mickaël Rémond,这正是我实现它的方式,我唯一的问题是我想在用户接受邀请和订阅之前为发送到房间的消息生成推送通知。我们有没有可能以某种方式实现这一点?嗯,这是一个自定义用例,所以您必须以某种方式自己实现它。大多数部署不希望在用户接受邀请之前推送聊天室中所有消息的通知。感觉像是推送垃圾邮件。