2015-09-28 69 views
9

我已在Ubuntu 12.04上安装Openfire 3.10.2Openfire通过PHP离线通知

聊天工作正常,用于离线消息管理我已经安装了CallbackOnOffline插件。收件人处于脱机状态时,会调用一个URL。

该插件从plugin.callback_on_offline.url属性加载url,将'to'和'from'参数相加,并执行异步GET请求。 Sample Link

我检查了我从那里得到的信息,并得到了“to”和“from”,但我还需要这些信息以及推送通知的消息。


重要部分: -


我想自定义的Openfire的CallbackOnOffline插件,我想添加一个参数 “消息”。我怎样才能做到这一点?

你会发现这里的代码:https://github.com/igniterealtime/Openfire/blob/master/src/plugins/callbackOnOffline/src/java/com/fotsum/CallbackOnOffline.java

现在,如何创建.jar文件,需要使安装的插件中​​的Openfire?

+0

试试这两个插件,https://github.com/xinminlabs/openfire-apns-plugin和https ://github.com/meisterfuu/Openfire-GCM – calvinfly

+0

calvinfly:好的,让我试试看,但openfire将如何获得设备令牌o f设备? –

+0

创建一个类似[this]的自定义IQHandler(https://github.com/xinminlabs/openfire-apns-plugin/blob/master/src/main/java/com/wecapslabs/openfire/plugin/apns/ApnsIQHandler.java) 。在客户端应用程序中,将此自定义IQ数据包发送到XMPP服务器以注册令牌。 – calvinfly

回答

4

如果你想添加更多的参数到链接。您需要扩展CallbackOnOffline插件。你会在这里找到代码:https://github.com/igniterealtime/Openfire/blob/master/src/plugins/callbackOnOffline/src/java/com/fotsum/CallbackOnOffline.java

如果你看看java类,你会发现在109和110行的“to”和“from”参数将被发回(回调)。只需在那里添加您需要的值即可。

更新: 之后,您需要再次使用ANT构建插件。看看如何建立一个插件:https://www.igniterealtime.org/builds/openfire/docs/latest/documentation/plugin-dev-guide.html

+0

感谢罗马尼亚,我有关于代码的想法,但问题是如何创建.jar文件,这需要制作可安装的插件? –

+1

你需要用ANT buld插件。在这里寻找进一步的插件建设:https://www.igniterealtime.org/builds/openfire/docs/latest/documentation/plugin-dev-guide.html –

+0

感谢罗马为您提供帮助和指导 –

4

我也有同样的问题,我解决了它通过创建一个新的表“TblPushNotification”。名为'ofOffline'的表格用于存储离线消息,因此我将触发器添加到数据库的“ofOffline”表中。触发器将提取XML并将所有属性添加到“TblPushNotification”,以便您可以直接检查该表以发送推送通知。

请找我的表的详细信息如下

CREATE TABLE IF NOT EXISTS `TblPushNotification` (
`id` int(11) NOT NULL, 
    `message_id` int(11) NOT NULL, 
    `from_user_id` text NOT NULL, 
    `to_user_id` text NOT NULL, 
    `message` text NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; 

ALTER TABLE `TblPushNotification` 
ADD PRIMARY KEY (`id`), ADD KEY `message_id` (`message_id`); 
ALTER TABLE `TblPushNotification` 
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; 

对于触发使用下面的查询。

CREATE TRIGGER `PushNotification` AFTER INSERT ON `ofOffline` 
FOR EACH ROW BEGIN 

    DECLARE strMessageText VARCHAR(500) DEFAULT ''; 
    DECLARE strSenderId VARCHAR(500) DEFAULT '';  
    DECLARE strReceiverId VARCHAR(500) DEFAULT '';   
    DECLARE intMessageId INT DEFAULT 1; 

    SET strMessageText = ExtractValue(NEW.stanza, 'message/body[1]'); 
    SET strSenderId = ExtractValue(NEW.stanza, 'message/@from[1]'); 
    SET strReceiverId = ExtractValue(NEW.stanza, 'message/@to[1]'); 
    SET intMessageId = NEW.messageID;  
    INSERT INTO TblPushNotification (message_id,from_user_id,to_user_id,message) VALUES (intMessageId,strSenderId,strReceiverId,strMessageText); 

现在它将会随时提取ofOffline平板电脑的XML来TblPushNotification并可以发送推送通知之前触发查询。

+0

感谢您的详细解答。如果我们在数据输入表格'TblPushNotification'时在TRIGGER时间服务器端调用任何URL或Web服务,您能否告诉我。 其实我们可以做TRIGGER操作,但是发送来自服务器的推送通知,我们需要调用客户URL来从服务器发送推送通知给设备。 – Parthpatel1105

2

触发

-- 
-- Triggers `ofOffline` 
-- 
DELIMITER // 
CREATE TRIGGER `PushNotification` AFTER INSERT ON `ofOffline` 
FOR EACH ROW BEGIN 

    DECLARE strMessageText VARCHAR(500) DEFAULT ''; 
    DECLARE strSenderId VARCHAR(500) DEFAULT '';  
    DECLARE strReceiverId VARCHAR(500) DEFAULT '';   
    DECLARE intMessageId INT DEFAULT 1; 

    SET strMessageText = ExtractValue(NEW.stanza, 'message/body[1]'); 
    SET strSenderId = ExtractValue(NEW.stanza, 'message/@from[1]'); 
    SET strReceiverId = ExtractValue(NEW.stanza, 'message/@to[1]'); 
    SET intMessageId = NEW.messageID;  
    INSERT INTO push_notification (message_id,from_user_id,to_user_id,message) VALUES (intMessageId,strSenderId,strReceiverId,strMessageText); 


END 
// 
DELIMITER ; 

表:

CREATE TABLE IF NOT EXISTS `push_notification` (
`id` int(11) NOT NULL, 
    `message_id` int(11) NOT NULL, 
    `from_user_id` text NOT NULL, 
    `to_user_id` text NOT NULL, 
    `message` text NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;