Расположение пользователя XEP-0080 в библиотеке Smack
-
24-09-2019 - |
Вопрос
Я хотел бы создать простой клиент XMPP в Java, который разделяет его местоположение (XEP-0080) с другими клиентами. Я уже знаю, что могу использовать библиотеку Smack для XMPP и что она поддерживает PEP, которая необходима для XEP-0080. У кого-нибудь есть пример, как реализовать это или любые указатели, я не нахожу ничего, используя Google.
заранее спасибо.
Решение
Право Кристофа, док невероятно - но они поправляются. Есть хороший, хотя и трудно найти, набор документов на расширениях, хотя. Pubsub один в http://www.igniterealtime.org/fisheyee/browse/~raw,r=11613/svn-org/smack/trunk/documentation/extensions/pubsub.html..
После перехода от нуля на заказ маршрут поставщика IQ с расширением я обнаружил, что было легче сделать это, максимально использовать менеджеров. Разработчики, которые написали менеджерам, абстрагировали много боли.
Пример (модифицированная версия для Geoloc One Rcollier написала на форуме Smack):
ConfigureForm form = new ConfigureForm(FormType.submit);
form.setPersistentItems(false);
form.setDeliverPayloads(true);
form.setAccessModel(AccessModel.open);
PubSubManager manager
= new PubSubManager(connection, "pubsub.communitivity.com");
Node myNode = manager.createNode("http://jabber.org/protocol/geoloc", form);
StringBuilder body = new StringBuilder(); //ws for readability
body.append("<geoloc xmlns='http://jabber.org/protocol/geoloc' xml:lang='en'>");
body.append(" <country>Italy</country>");
body.append(" <lat>45.44</lat>");
body.append(" <locality>Venice</locality>");
body.append(" <lon>12.33</lon>");
body.append(" <accuracy>20</accuracy>");
body.append("</geoloc>");
SimplePayload payload = new SimplePayload(
"geoloc",
"http://jabber.org/protocol/geoloc",
body.toString());
String itemId = "zz234";
Item<SimplePayload> item = new Item<SimplePayload>(itemId, payload);
// Required to recieve the events being published
myNode.addItemEventListener(myEventHandler);
// Publish item
myNode.publish(item);
Или, по крайней мере, это трудный путь :). Только что вспомнил, что сейчас пепманагер ...
PEPProvider pepProvider = new PEPProvider();
pepProvider.registerPEPParserExtension(
"http://jabber.org/protocol/tune", new TuneProvider());
ProviderManager.getInstance().addExtensionProvider(
"event",
"http://jabber.org/protocol/pubsub#event", pepProvider);
Tune tune = new Tune("jeff", "1", "CD", "My Title", "My Track");
pepManager.publish(tune);
Вам нужно будет написать классы GeolocProvider и Geoloc.
Другие советы
Я накрыл этот подход на основе чистого PEP в качестве альтернативного метода для Android здесь: https://stackoverflow.com/46719158/406920..
Это будет очень близко к тому, что вам нужно сделать с регулярным чмоком.
Посмотрите на существующий код для реализации других расширений. Это будет ваш лучший пример того, как развиваться с текущей библиотекой. К сожалению, нет руководства разработчиков, о которых я знаю, поэтому я просто покинул, чтобы понять некоторые основы сам, пока я себя чувствую себя комфортно с окружающей средой. Подсказка: используйте удлинитель по провайдерам, чтобы добавить пользовательские поставщики для расширенного расширения STANZAS.
Вы можете задать вопросы на Разработчик форума Для чмока и внести свой код обратно в проект отсюда. Если вы производите реализацию этого расширения, то вы можете потенциально получить привилегии самостоятельно, если вы этого хотите.