gpt4 book ai didi

java - XEP-0080 Smack 库中的用户位置

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:12 25 4
gpt4 key购买 nike

我想用 java 创建一个简单的 XMPP 客户端,与其他客户端共享他的位置 (XEP-0080)。我已经知道我可以使用 XMPP 的 smack 库并且它支持 XEP-0080 所需的 PEP。有没有人有如何实现这个或任何指针的示例,我没有找到任何使用谷歌的东西。

提前致谢。

最佳答案

Kristof 是对的,文档很少 - 但它们正在变得更好。尽管很难找到,但有一组关于扩展的很好的文档。 PubSub 位于 http://www.igniterealtime.org/fisheye/browse/~raw,r=11613/svn-org/smack/trunk/documentation/extensions/pubsub.html .

在从头开始使用带有扩展的自定义 IQ 提供程序路线后,我发现尽可能多地使用管理器更容易做到这一点。编写管理器的开发人员已经抽象出很多痛点。

示例(在 Smack 论坛上写的一个 rcollier 的修改版 geoloc 版本):

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 类。

关于java - XEP-0080 Smack 库中的用户位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2387319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com