我正在开发,使用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"}],
[]}]}
Run Code Online (Sandbox Code Playgroud)
小智 5
关于ejabberd中钩子的两件事:1)回调总是按顺序调用,顺序由注册时指定的优先级定义.2)如果回调返回'stop',它会阻止事件传播到链上的其余侦听器.
发生的事情是ejabberd离线模块在offline_message_hook中监听,与您的代码相同.它处理消息,并返回'stop',因此您的代码不会被执行.
(您的代码确实收到了聊天通知的消息,因为离线模块会忽略这些消息,因此在这些情况下它不会停止链接).
您可能希望 在脱机存储模块之前运行代码.只记得不要返回'stop',以便离线模块具有存储消息的机会.
| 归档时间: |
|
| 查看次数: |
1532 次 |
| 最近记录: |