Pull to refresh

GAE XMPP v.2 (Java SDK). Джаббер в GAE со второго подхода

Reading time2 min
Views966
О выходе 1.4.2 версии SDK уже писали на Хабре, меня же интересуют именно изменения в второй версии XMPP API



Так же, напоминаю про топик о первой версии XMPP API.


Джавадок по АПИ заметно потолстел.

Служба теперь может реагировать на запросы авторизации и изменение статуса собеседников.

Эти функции включаются так же, как и сервис входящих сообщений, с помощью appengine-web.xml файла:

<inbound-services>
    <service>xmpp_message</service>
    <service>xmpp_presence</service>
    <service>xmpp_subscribe</service>
</inbound-services>


xmpp_message — уже знаком, сервис входящих сообщений.
xmpp_presence — сервис статус сообщений.
xmpp_subscribe — сервис авторизационных сообщений.

Все три сервиса, при появлении события, за которое они отвечают, формируют POST-запрос на определённые URL:

«События авторизации»
"/_ah/xmpp/subscription/subscribe/" — собеседник желает авторизоваться
"/_ah/xmpp/subscription/subscribed/" — собеседник авторизовал приложение
"/_ah/xmpp/subscription/unsubscribe/" — собеседник аннулировал авторизацию приложения
"/_ah/xmpp/subscription/unsubscribed/" — собеседник отверг приглашение к авторизации

«Изменения статуса»
"/_ah/xmpp/presence/available/" — собеседник в он-лайне и поддерживает статусные сообщения
"/_ah/xmpp/presence/unavailable/" — собеседник недоступен
"/_ah/xmpp/presence/probe/" — ответ на запрос текущего статуса пользователя

«Входящее сообщение»
"/_ah/xmpp/message/chat/" — пришло входящее сообщение

Если планируется использовать какой либо сервис, то необходимо на соответствующий URL замапить сервлет, который будет обрабатывать POST-запросы. В запросе будет вся необходимая информация.

Для всех трёх видов событий, есть свои парсеры, которые помогут разобрать запрос:

XMPPService xmpp = XMPPServiceFactory.getXMPPService();

Message message = xmpp.parseMessage(req); //входящее сообщение
JID fromJid = message.getFromJid();
String body = message.getBody();
//...

Presence presence = xmpp.parsePresence(req); //статус
String from = presence.getFromJid().getId().split("/")[0]; //удаляем из JID source (то, что после "/")
String status = presence.getStatus();
//...

Subscription sub = xmpp.parseSubscription(req); //подписка-авторизация
String from = sub.getFromJid().getId().split("/")[0];
//...


Ну, и на последок, устанавливаем свой статус приложения:
xmppService.sendPresence(toJid, PresenceType.AVAILABLE, PresenceShow.NONE, "My app's status")
Tags:
Hubs:
Total votes 29: ↑24 and ↓5+19
Comments7

Articles