XEP-0080スマックライブラリのユーザーの場所
-
24-09-2019 - |
質問
Javaで、他のクライアントと彼の場所(XEP-0080)を共有するシンプルなXMPPクライアントを作成したいと思います。 XMPPにSmackライブラリを使用できること、そしてXEP-0080に必要なPEPをサポートできることをすでに知っています。誰かがこれを実装する方法やポインターを実装する方法を持っていますか、Googleを使用して何も見つかりません。
前もって感謝します。
解決
Kristofの権利、ドキュメントはまばらです - しかし、彼らは良くなっています。ただし、拡張機能には、見つけるのが難しいですが、ドキュメントのセットがあります。 pubsubのものはにあります http://www.igniterealtime.org/fisheye/browse/~raw,r = 11613/svn-org/smack/trunk/documentation/extensions/pubsub.html.
拡張機能を備えたScratch Custom IQプロバイダールートに進んだ後、マネージャーをできるだけ使用する方が簡単だとわかりました。マネージャーを書いた開発者は、多くの問題点を抽象化しました。
例(1つのRCollierのModified-For-Geolocバージョンが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);
または、少なくともそれは難しい方法です:)。今ペップマネージャーがいることを思い出しました...
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クラスを書く必要があります。
他のヒント
ここでAndroidの代替方法として純粋なPEPベースのアプローチを取り上げました。 https://stackoverflow.com/a/26719158/406920.
これは、通常のスマックで行う必要があることに非常に近いでしょう。
他の拡張機能の実装については、既存のコードをご覧ください。これは、現在のライブラリで開発する方法の最良の例です。残念ながら、私が知っている開発者のガイドはないので、環境に満足するまで、自分で基本のいくつかを理解するために突き刺しました。ヒント:プロバイダー拡張機能を使用して、拡張固有のスタンザ用のカスタムプロバイダーを追加します。
質問することができます 開発者フォーラム スマックのために、ここからコードをプロジェクトに戻します。この拡張機能の実装を作成すると、必要に応じてコミット権限を取得する可能性があります。