offline_message_hook:当发送离线消息时不会被调用

时间:2013-02-28 10:04:28

标签: ejabberd

我正在开发,使用ejabberd作为XMPP服务器的android聊天应用程序。我希望在用户离线时发送GCM推送通知。为此,我在ejabberd中创建了新模块,注册了offline_message_hook,但只有当有人开始输入并完成输入时才会调用此函数。下面是传递给这个钩子的唯一包。虽然,用户在他/她上线时会收到消息。

Packet: {xmlelement,
      "message",
      [{"type",
       "chat"},
      {"id",
       "purple7d4d0773"},
      {"to",
       "xxx@rakshith"}],
      [{xmlelement,
       "paused",
       [{"xmlns",
         "http://jabber.org/protocol/chatstates"}],
       []}]}
Packet: {xmlelement,
      "message",
      [{"type",
       "chat"},
      {"id",
       "purple7d4d0773"},
      {"to",
       "xxx@rakshith"}],
      [{xmlelement,
       "composing",
       [{"xmlns",
         "http://jabber.org/protocol/chatstates"}],
       []}]}

1 个答案:

答案 0 :(得分:5)

关于ejabberd中钩子的两件事: 1)始终按顺序调用回调,顺序由注册时指定的优先级定义。 2)如果回调返回'stop',它会阻止事件传播到链上的其余侦听器。

正在发生的事情是ejabberd离线模块正在使用offline_message_hook进行侦听,与您的代码相同。它处理消息,并返回'stop',因此不执行代码。

(您的代码确实会收到聊天通知的消息,因为离线模块会忽略这些消息,因此在这些情况下它不会停止链接。)

您可能希望在离线存储模块之前运行代码。请记住不要返回'stop',以便离线模块有机会存储消息。