我想在java中创建一个简单的XMPP客户端,与其他客户端共享其位置(XEP-0080)。 我已经知道我可以将smack库用于XMPP并且它支持PEP,这是XEP-0080所需要的。 有没有人有一个例子如何实现这个或任何指针,我没有找到任何使用谷歌。
提前感谢。
答案 0 :(得分:8)
克里斯托夫是对的,博士是稀疏的 - 但他们正在变得更好。虽然有一些很好的,虽然很难找到的文档扩展。 PubSub是http://www.igniterealtime.org/fisheye/browse/~raw,r=11613/svn-org/smack/trunk/documentation/extensions/pubsub.html。
从头开始使用扩展程序自定义IQ提供程序路由后,我发现尽可能使用管理器更容易。编写经理的开发人员已经抽出了很多痛点。
示例(在Smack论坛上写的一个rcollier的geooc修改版本):
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);
或者至少那是艰难的方式:)。记得现在有一个PEPManager ......
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类。
答案 1 :(得分:1)
我在此处详细介绍了基于纯PEP的方法作为Android的替代方法:https://stackoverflow.com/a/26719158/406920。
这将非常接近您对常规Smack的需求。
答案 2 :(得分:0)
查看现有代码以了解其他扩展的实现。这将是您如何使用当前库进行开发的最佳示例。不幸的是,没有我所知道的开发人员指南,所以我只是自己去了解一些基础知识,直到我对环境感到满意为止。提示:使用提供程序扩展功能为扩展特定节添加自定义提供程序。
您可以在developer forum上向Smack提问,并将您的代码也从这里提交给项目。如果您生成此扩展的实现,那么您可以自己获得提交权限(如果需要)。