2013-02-28 84 views
0

我正在開發,使用ejabberd作爲XMPP服務器的android聊天應用程序。我想在用戶離線時發送GCM推送通知。爲此,我在ejabberd中創建了一個新模塊,註冊offline_message_hook,但只有當某人開始輸入並完成輸入時纔會調用該函數。以下是傳遞給該鉤子的唯一數據包。雖然用戶在上線時會收到消息。offline_message_hook:在發送離線消息時不會被調用

Packet: {xmlelement, 
     "message", 
     [{"type", 
     "chat"}, 
     {"id", 
     "purple7d4d0773"}, 
     {"to", 
     "[email protected]"}], 
     [{xmlelement, 
     "paused", 
     [{"xmlns", 
     "http://jabber.org/protocol/chatstates"}], 
     []}]} 
Packet: {xmlelement, 
     "message", 
     [{"type", 
     "chat"}, 
     {"id", 
     "purple7d4d0773"}, 
     {"to", 
     "[email protected]"}], 
     [{xmlelement, 
     "composing", 
     [{"xmlns", 
     "http://jabber.org/protocol/chatstates"}], 
     []}]} 
+0

嗨,你可以分享你的gcm模塊嗎? – 2014-12-22 19:13:01

+0

您好@TolgayToklar,目前我沒有與我一起實際執行。不過,您可以使用[ejabberd]中的[offline offline](https://www.google.co)實施[GCM推送](https://www.google.co.in/search?q=gcm+implementation+in+erlang) 。在/搜索q = ejabberd +離線+鉤)。希望有所幫助! – raxith 2014-12-23 12:35:27

+0

你在哪裏存儲android設備令牌? – 2014-12-24 21:52:08

回答

5

兩人在ejabberd約掛鉤的事情: 1)回調是爲了總是叫,順序由您在註冊時指定優先級定義。 2)如果回調返回'停止',它會阻止事件傳播給鏈上的其他監聽器。

發生什麼事是ejabberd脫機模塊在offline_message_hook中偵聽,與您的代碼相同。它處理消息並返回'stop',所以你的代碼不會被執行。

(您的代碼確實收到聊天狀態通知的消息,因爲這些消息被脫機模塊忽略,因此在這種情況下它不會停止鏈接)。

您可能希望您的代碼在之前運行脫機存儲模塊。請記住,不要返回「停止」,以便脫機模塊具有存儲消息的機會。

+0

謝謝,目前訂單是50,我會將其更改爲1並讓您知道。順便說一句,脫機模塊的默認順序是什麼? – raxith 2013-03-01 08:37:09

+1

mod_offline也將自己註冊爲50。如果您使用相同的優先級,哪一個首先被調用是未定義的(當前模塊和函數回調的名稱會被考慮在內,但更好地考慮未定義的情況) – ppolv 2013-03-04 18:04:32

+0

感謝您的建議,如果訂單更改爲1它像魅力一樣工作。 :d – 2014-10-11 07:50:41

相關問題