Frage

Ich möchte einen einfachen XMPP-Kunden in Java erstellen, der seinen Standort (XEP-0080) mit anderen Kunden teilt. Ich weiß bereits, dass ich die Smack Library für XMPP verwenden kann und dass sie PEP unterstützt, das für XEP-0080 benötigt wird. Hat jemand ein Beispiel, wie man dies oder irgendwelche Zeiger implementiert, ich finde nichts mit Google.

vielen Dank im Voraus.

War es hilfreich?

Lösung

Kristofs Recht, die Docs sind spärlich - aber sie werden besser. Es gibt jedoch eine gute, wenn auch schwer zu findene Set von Dokumenten zu Erweiterungen. Der Pubsub ist bei http://www.ignitealtime.org/fisheye/browse/~raw,r=11613/svn-org/smack/trunk/documentation/extensions/pubsub.html.

Nachdem ich mit einer Erweiterung die Route für benutzerdefinierte IQ -Anbieter von Grund auf gegessen hatte, stellte ich fest, dass es einfacher war, die Manager so weit wie möglich mit den Managern zu tun. Die Entwickler, die die Manager geschrieben haben, haben viele Schmerzpunkte abstrahiert.

Beispiel (modifiziert für die Geoloc-Version eines RCollier, das im Smack Forum geschrieben wurde):

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

Zumindest ist das der harte Weg :). Ich habe mich nur daran erinnert, dass es jetzt einen Pepmanager gibt ...

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

Sie müssten die GeolocProvider- und Geoloc -Kurse schreiben.

Andere Tipps

Ich habe hier einen reinen PEP -basierten Ansatz als alternative Methode für Android behandelt: https://stackoverflow.com/a/26719158/406920.

Dies wird sehr nahe an dem sein, was Sie mit einem normalen Schlag machen müssen.

Schauen Sie sich den vorhandenen Code für Implementierungen anderer Erweiterungen an. Dies ist Ihr bestes Beispiel dafür, wie Sie sich mit der aktuellen Bibliothek entwickeln können. Leider gibt es keinen Entwicklerleitfaden, den ich kenne. Deshalb habe ich mich nur um einige der Grundlagen selbst gestoßen, bis ich mich mit der Umgebung wohl fühlte. Hinweis: Verwenden Sie die Anbieterverlängerungsfunktion, um benutzerdefinierte Anbieter für die erweiterten spezifischen Strophen hinzuzufügen.

Sie können Fragen zur Frage stellen Entwicklerforum für Smack und tragen Sie Ihren Code auch von hier aus zum Projekt zurück. Wenn Sie eine Implementierung dieser Erweiterung erstellen, können Sie möglicherweise selbst eine Bestimmungsrechte erhalten, wenn Sie sie möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top