2015-09-28 17 views
9

Zainstalowałem Openfire 3.10.2 na Ubuntu 12.04.Powiadomienie offline o trybie Openfire za pośrednictwem PHP

Czat działa poprawnie, a do zarządzania wiadomościami w trybie offline Zainstalowałem wtyczkę CallbackOnOffline. Gdy adresat jest offline, wywoływany jest adres URL.

Wtyczka ładuje adres URL z właściwości plugin.callback_on_offline.url, dodaje parametry "do" i "od" i wykonuje asynchroniczne żądanie GET. Sample Link.

Sprawdziłem, jakie informacje otrzymuję od tego i mam "do" i "od", ale potrzebuję również tych wraz z wiadomością dla powiadomień wypychanych.


ważny element: -


Chcę dostosować CallbackOnOffline wtyczki z Openfire i chcę dodać jeszcze jeden parametr "wiadomość". Jak mogę to zrobić?

Znajdziesz tutaj kod: https://github.com/igniterealtime/Openfire/blob/master/src/plugins/callbackOnOffline/src/java/com/fotsum/CallbackOnOffline.java

Teraz, jak utworzyć plik .jar, które wymagają, aby wtyczki instalowalnego w Openfire?

+0

próby tych dwóch wtyczek https://github.com/xinminlabs/openfire-apns-plugin HTTPS : //github.com/meisterfuu/Openfire-GCM – calvinfly

+0

calvinfly: ok, pozwól mi spróbować, ale jak openfire dostanie tokeny urządzenia o f urządzenie? –

+0

utwórz niestandardowy IQHandler, taki jak [this] (https://github.com/xinminlabs/openfire-apns-plugin/blob/master/src/main/java/com/wecapslabs/openfire/plugin/apns/ApnsIQHandler.java) . W aplikacji klienckiej wyślij ten niestandardowy pakiet IQ do serwera XMPP, aby zarejestrować token. – calvinfly

Odpowiedz

4

Jeśli chcesz dodać więcej parametrów do linku. Musisz rozszerzyć wtyczkę CallbackOnOffline. Znajdziesz kod tutaj: https://github.com/igniterealtime/Openfire/blob/master/src/plugins/callbackOnOffline/src/java/com/fotsum/CallbackOnOffline.java

Jeśli zajrzysz do klasy java, znajdziesz w linii 109 i 110 parametry "to" i "od", które zostaną odesłane (wywołanie zwrotne). Po prostu dodaj tam swój parametr o wymaganej wartości.

Aktualizacja: Po tym trzeba ponownie zbudować wtyczkę z ANT. Zobacz, jak zbudować wtyczkę: https://www.igniterealtime.org/builds/openfire/docs/latest/documentation/plugin-dev-guide.html

+0

Dzięki Roman, mam pomysł na temat tych kodów, ale problem polega na tym, jak utworzyć plik .jar, który wymaga zainstalowania wtyczki? –

+1

Musisz buld wtyczki z ANT. Zajrzyj tutaj, aby dowiedzieć się więcej o budowaniu wtyczek: https://www.igniterealtime.org/builds/openfire/docs/latest/documentation/plugin-dev-guide.html –

+0

Dzięki Romanowi za pomoc i przewodnik –

4

Miałem również ten sam problem i rozwiązałem go, tworząc nową tabelę "TblPushNotification". Tabela o nazwie "OfOffline" służy do przechowywania wiadomości w trybie offline, więc dodałem spust do tabeli "ofOffline" bazy danych. Wyzwalacz wyodrębni XML i doda wszystkie atrybuty do "TblPushNotification", dzięki czemu możesz bezpośrednio sprawdzić tę tabelę w celu wysłania powiadomienia push.

Proszę znaleźć szczegóły mojego tabel jak poniżej

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; 

Do stosowania wyzwalania poniższego zapytania.

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); 

Teraz będzie to zawsze wyodrębnić XML z tabletem ofOffline do TblPushNotification i można odpalić zapytanie przed wysłaniem powiadomienia push.

+0

Dziękujemy za szczegółową odpowiedź. Czy możesz mi powiedzieć, czy wywołujemy dowolny URL lub usługę sieciową po stronie serwera w momencie TRIGGER, gdy dane są wprowadzane do tabeli "TblPushNotification". W rzeczywistości możemy wykonać operację TRIGGER, ale aby wysłać powiadomienie push z serwera, musimy wywołać adres URL klienta, aby wysłać powiadomienie push do urządzenia z serwera. – Parthpatel1105

2

wyzwalania

-- 
-- 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 ; 

Tabela:

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 ;