我想在java中創建一個簡單的XMPP客戶端,與其他客戶端共享其位置(XEP-0080)。 我已經知道我可以使用XMPP的smack庫,並且它支持XEP-0080所需的PEP。 有沒有人有一個例子如何實現這個或任何指針,我沒有發現任何使用谷歌。XEP-0080 Smack Library中的用戶位置
在此先感謝。
我想在java中創建一個簡單的XMPP客戶端,與其他客戶端共享其位置(XEP-0080)。 我已經知道我可以使用XMPP的smack庫,並且它支持XEP-0080所需的PEP。 有沒有人有一個例子如何實現這個或任何指針,我沒有發現任何使用谷歌。XEP-0080 Smack Library中的用戶位置
在此先感謝。
克里斯托夫的權利,文件是稀疏的 - 但他們正在變得更好。儘管很難找到一套很好的擴展文檔。 PubSub之一在http://www.igniterealtime.org/fisheye/browse/~raw,r=11613/svn-org/smack/trunk/documentation/extensions/pubsub.html。
在從頭開始自定義IQ提供程序路由和擴展後,我發現使用管理器儘可能簡單地執行它。寫這些經理的開發人員已經將很多痛苦點都抽象出來了。
例(一個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類。
查看其他擴展實現的現有代碼。這將是您如何與當前圖書館共同開發的最佳範例。不幸的是,我沒有任何開發者指南,所以我只是自己去了解一些基本知識,直到我對環境感到滿意爲止。提示:使用提供商擴展工具爲擴展特定部分添加自定義提供商。
您可以在developer forum上提問Smack的問題,並將代碼返回到此處的項目中。如果你生成了這個擴展的實現,那麼你可以自己獲得提交權限,如果你想要的話。
我在此處詳細介紹了一種純粹的基於PEP的方法作爲替代方法:https://stackoverflow.com/a/26719158/406920。
這將非常接近你需要做的常規Smack。
我可以在哪裏找到這個'TuneProvider'和'Tune'類的單詞或asmack? – Hunt 2012-07-31 05:25:21
該示例來自smack文檔。不知道他們提到的XEP-0118的實施方式,因爲Smack仍然有一個開放的bug來添加XEP-0118支持,最後更新於2011年5月。 我已經拼湊了我自己的版本進行實驗,但沒有有了代碼了。我會再次把它放在一起,但沒有時間。現在有一個很好的例子來創建你自己的PEPItem的擴展並在這裏發佈一個項目:http://oneminutedistraction.wordpress.com/2010/08/26/。這只是離開了解析部分(在TuneProvider中,一個PEPProvider)。 – 2012-08-04 16:04:29
我正在使用smack 4.2.0,我無法找到PEPProvider? – umerk44 2017-09-13 10:27:57