Question

Je voudrais créer un simple client XMPP en java qui partage son emplacement (XEP-0080) avec d'autres clients. Je sais déjà que je peux utiliser la bibliothèque pour smack XMPP et qu'il soutient PEP, qui est nécessaire pour XEP-0080. Quelqu'un at-il un exemple comment mettre en œuvre ce ou tous les pointeurs, je ne trouve rien en utilisant Google.

Merci d'avance.

Était-ce utile?

La solution

le droit de Kristof, sont rares de la doc - mais ils vont mieux. Il y a une bonne, mais difficile à trouver, ensemble de documents sur les extensions bien. Le PubSub un est à http://www.igniterealtime.org/fisheye/browse/~raw,r=11613/svn-org/smack/trunk/documentation/extensions/pubsub.html .

Après avoir l'itinéraire à partir de zéro personnalisée du fournisseur IQ avec une extension, j'ai trouvé qu'il était plus facile de le faire en utilisant les gestionnaires, autant que possible. Les développeurs qui ont écrit les gestionnaires ont beaucoup abstraire loin des points de douleur.

Exemple (version modifiée-pour-geoloc d'un rcollier a écrit sur le 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);

Ou du moins c'est la dure :). Il suffit de rappeler qu'il ya un PEPManager maintenant ...

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

Vous aurez besoin d'écrire les classes GeoLocProvider et GEOLOC.

Autres conseils

Je couvrais une approche pure PEP comme méthode alternative en détail pour Android ici: https://stackoverflow.com/a/ 26719158/406920 .

Ce sera très proche de ce que vous devez faire avec Smack régulière.

Jetez un coup d'oeil au code existant pour les implémentations d'autres extensions. Ce sera votre meilleur exemple de la façon de développer avec la bibliothèque actuelle. Malheureusement, il n'y a pas de guide pour les développeurs que je connais, donc je viens de comprendre poussé autour quelques-unes des bases moi-même jusqu'à ce que je me sentais à l'aise avec l'environnement. Astuce:. Utilisez la fonction d'extension de fournisseurs pour ajouter des fournisseurs personnalisés pour l'extension strophes spécifiques

Vous pouvez poser des questions sur le forum développeur pour Smack et contribuer votre code de retour au projet d'ici. Si vous produisez une mise en œuvre de cette extension, vous pourriez potentiellement obtenir des privilèges vous engager si vous le voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top