Domanda

Vorrei creare un semplice client XMPP in Java che condivide la sua posizione (XEP-0080) con altri clienti. So già che posso utilizzare la libreria schiaffo per XMPP e che supporta PEP, che è necessaria per XEP-0080. Qualcuno ha un esempio di come implementare questo o altri puntatori, non trovo nulla utilizzando Google.

grazie in anticipo.

È stato utile?

Soluzione

diritto di Kristof, del dottore sono sparse - ma stanno migliorando. C'è una buona, anche se difficile da trovare, serie di documenti su estensioni però. Quello PubSub è a http://www.igniterealtime.org/fisheye/browse/~raw,r=11613/svn-org/smack/trunk/documentation/extensions/pubsub.html .

Dopo essere andato il percorso da zero personalizzato IQ Provider con un'estensione che ho trovato che era più facile farlo utilizzando i gestori, per quanto possibile. Gli sviluppatori che hanno scritto i gestori hanno estratta via un sacco di punti di dolore.

Esempio (modificato-per-geoloc versione di uno rcollier ha scritto sul forum 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);

O almeno questo è il modo più duro :). Basta ricordare c'è una PEPManager ora ...

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

Si avrebbe bisogno di scrivere le classi GeoLocProvider e GEOLOC.

Altri suggerimenti

Ho coperto un approccio basato PEP puro come un metodo alternativo in dettaglio per Android qui: https://stackoverflow.com/a/ 26719158/406920 .

Questo sarà molto vicino a quello che ci devi fare con regolare Smack.

Date un'occhiata al codice esistente per le implementazioni di altre estensioni. Questa sarà la vostra migliore esempio di come sviluppare con la libreria corrente. Purtroppo, non c'è una guida agli sviluppatori, che io sappia, quindi ho solo curiosato a capire alcuni dei principi fondamentali io stesso fino a quando ho sentito a mio agio con l'ambiente. Suggerimento:. Utilizzare la funzione di fornitori di estensione per aggiungere provider personalizzati per le strofe estensione specifici

È possibile porre domande sul Developer Forum per Smack, e contribuire il codice di nuovo al progetto anche da qui. Se si produce un'implementazione di questa estensione, allora si potrebbe potenzialmente ottenere impegnarsi privilegi da soli se lo vuoi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top