2016-05-31 5 views
0

チュートリアルの後にXMPPとJava(私はiOS開発者です)に新しいので、サーバコンポーネント(Openfire)とクライアントiOSアプリケーション(robbiehansonのios xmppframeowrkを使用)を書きました。私はコンポーネント< - > iOSクライアントとの間でメッセージを送受信できました。パケット内のgetChildElementのOpenFire XMPPコンポーネントの名前空間

サーバーコンポーネントにiOSclientアプリから存在を送信::

XMPPPresence *presence = [XMPPPresence presence]; 
[presence addAttributeWithName:@"to" stringValue:serverComponentJid]; 
NSXMLElement *someInfo = [NSXMLElement elementWithName:@"someInfo" 
               stringValue:@"xyz"]; 
[presence addChild:someInfo]; 
[_xmppStream sendElement:presence]; 

サーバーコンポーネントにパケットを受信:

if (packet instanceof Presence){ 
     org.xmpp.packet.Presence recvPresence = (Presence) packet; 

Element theInfo = recvPresence.getChildElement("someInfo", "***what_shoud_be_the_namespace_here***"); 
System.out.println("Some info in the presence as " + theInfo.attributeValue("someInfo")); 

私はパケットを印刷しsomeInfoを見ることができますここで抽象コードです。ネームスペースに ""合格すると、理解できる正しいものを得ることができます。しかし、私はまだxmppで名前空間を使う方法とその使い方を理解していません。

+0

UPDATE:質問を編集。空の文字列を送信すると、子要素を取得できます。のような要素theInfo = recvPresence.getChildElement( "someInfo"、 "");.しかし、私はまだxmpp名前空間を理解するための情報が必要です。任意のref ..リンクなど – SaffronState

答えて

0

名前空間は、スタンザ(パケット)の「使用/範囲」を定義するために使用されます。 これらは、機能を定義し、アクション(パーサー、リスナーなど)をバインドするために使用されるため、任意のAPIがtagNameおよびnamespaceに基づいて動作(デフォルトまたはカスタム)を追加できます。

したがって、名前空間はプロトコルの予約キーのように使用されます。

カスタムネームスペースでは、カスタムIQ(またはその他のもの)を定義し、カスタムロジック/パーサーなどを使用して、好きなときに必要なときにn個のカスタムアクションを取得できます。

公式ドキュメント:

https://datatracker.ietf.org/doc/rfc6120/?include_text=1

そして、もっと:

http://xmpp.org/extensions/index.html

関連する問題