通过 PHP 的 Openfire 离线通知
Posted
技术标签:
【中文标题】通过 PHP 的 Openfire 离线通知【英文标题】:Openfire offline notification through PHP 【发布时间】:2015-12-25 15:34:13 【问题描述】:我已经在Ubuntu 12.04
上安装了Openfire 3.10.2
。
聊天工作正常,对于离线消息管理,我安装了CallbackOnOffline 插件。当收件人离线时,会调用一个url。
插件从plugin.callback_on_offline.url
属性加载url,添加'to'和'from'参数并执行异步GET请求。 Sample Link.
我检查了我从中获得了什么信息,我得到了“to”和“from”,但我还需要这些信息以及推送通知的消息。
重要部分:-
我想自定义openfire的CallbackOnOffline插件,我想再添加一个参数“message”。我该怎么做?
您将在此处找到代码:https://github.com/igniterealtime/Openfire/blob/master/src/plugins/callbackOnOffline/src/java/com/fotsum/CallbackOnOffline.java
现在,如何创建.jar文件,这需要在openfire中制作可安装的插件?
【问题讨论】:
试试这两个插件,github.com/xinminlabs/openfire-apns-plugin 和 github.com/meisterfuu/Openfire-GCM calvinfly :好的,让我试试,但是 openfire 将如何获取设备的设备令牌? 创建一个自定义 IQHandler,例如 this。在客户端应用程序中,将此自定义 IQ 数据包发送到 XMPP 服务器以注册令牌。 @Er.KT 我有用于编辑现有插件的最新源代码,并且我对该插件进行了更改。现在如何制作 JAR 文件? @Parthpatel1105 我在舞台上我的朋友,我有代码和更改但不知道如何构建 jar 文件。 【参考方案1】:如果您想向链接添加更多参数。您需要扩展 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
【讨论】:
感谢 Roman,我知道这些代码,但问题是如何创建需要制作可安装插件的 .jar 文件? 你需要用 ANT 构建插件。在这里寻找进一步的插件构建:igniterealtime.org/builds/openfire/docs/latest/documentation/…【参考方案2】:我也遇到了同样的问题,我通过创建一个新表“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 并且您可以在发送推送通知之前触发查询。
【讨论】:
感谢您的详细解答。您能否告诉我,当数据进入表“TblPushNotification”时,我们是否在 TRIGGER 时调用服务器端的任何 URL 或 Web 服务。实际上我们可以做 TRIGGER 操作,但是要从服务器发送推送通知,我们需要调用客户 URL 以从服务器向设备发送推送通知。【参考方案3】:触发器
--
-- 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 ;
【讨论】:
以上是关于通过 PHP 的 Openfire 离线通知的主要内容,如果未能解决你的问题,请参考以下文章
向 ios 发送推送通知以与离线用户聊天,openfire xmpp