Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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
Ejabberd 脱机消息\u钩子:当发送脱机消息时不会调用_Ejabberd - Fatal编程技术网

Ejabberd 脱机消息\u钩子:当发送脱机消息时不会调用

Ejabberd 脱机消息\u钩子:当发送脱机消息时不会调用,ejabberd,Ejabberd,我正在开发android聊天应用程序,使用ejabberd作为XMPP服务器。我想在用户脱机时发送GCM推送通知。为此,我在ejabberd、registerd offline_message_hook中创建了一个新模块,但这个函数只有在有人开始键入并完成键入时才被调用。下面是传递到此挂钩的唯一数据包。不过,用户在线时会收到消息 Packet: {xmlelement, "message", [{"type", "chat"}, {"id",

我正在开发android聊天应用程序,使用ejabberd作为XMPP服务器。我想在用户脱机时发送GCM推送通知。为此,我在ejabberd、registerd 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"}],
       []}]}

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

发生的情况是ejabberd脱机模块正在脱机_消息_钩子中侦听,与您的代码相同。它处理消息并返回“stop”,因此不会执行代码

(您的代码确实会收到ChatState通知的消息,因为脱机模块会忽略这些通知,因此在这些情况下不会停止链)


您可能希望代码在脱机存储模块之前运行。请记住不要返回“stop”,这样脱机模块就有机会存储消息。

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

发生的情况是ejabberd脱机模块正在脱机_消息_钩子中侦听,与您的代码相同。它处理消息并返回“stop”,因此不会执行代码

(您的代码确实会收到ChatState通知的消息,因为脱机模块会忽略这些通知,因此在这些情况下不会停止链)


您可能希望代码在脱机存储模块之前运行。请记住不要返回“停止”,这样脱机模块就有机会存储消息。

谢谢,目前订单为50,我会将其更改为1,并通知您。顺便问一下,离线模块的默认顺序是什么?mod_离线模块本身也注册为50。如果使用相同的优先级,首先调用哪个优先级(未定义)(当前考虑到模块和函数回调的名称,但最好考虑未定义的情况)谢谢该建议,是的,如果订单更改为1,它工作起来像魅力。汉克斯,目前订单是50,我会把它改成1,然后告诉你。顺便问一下,离线模块的默认顺序是什么?mod_离线模块本身也注册为50。如果使用相同的优先级,首先调用哪个优先级(未定义)(当前考虑到模块和函数回调的名称,但最好考虑未定义的情况)谢谢该建议,是的,如果订单更改为1,它工作起来像魅力。DHi你能分享你的gcm模块吗?嗨@TolgayToklar,我现在没有实际的实现。但是,您可以使用。希望有帮助!你在哪里存储android设备令牌?@TolgayToklar使用ejabberd归档模块一个可以归档所有消息,你可能需要扩展模块,或者你可以编写自己的模块。在任何情况下,归档模块都能让您更深入地了解如何使用数据库。您好,您能分享您的gcm模块吗?您好@TolgayToklar,我目前没有实际的实现。但是,您可以使用。希望有帮助!你在哪里存储android设备令牌?@TolgayToklar使用ejabberd归档模块一个可以归档所有消息,你可能需要扩展模块,或者你可以编写自己的模块。在任何情况下,归档模块都可以让您更深入地了解如何使用数据库。