2

Smack API を使用してチャット アプリケーションを開発していますが、プレゼンス パケットの受信で行き詰まりました。


Smack 3.2.2 および 3.3.0 でテスト済み。
これらの問題には、Openfire サーバー 3.8.1 の使用のみが関係しています。
最初に:Spark からプレゼンス パケットを送信し、それを正常に受信しています
。2 番目に、Spark クライアントから自分のプレゼンス パケットを更新して送信しています。

<presence id="b8nyI-95">
   <status>Free to chat</status>
   <priority>1</priority>
   <show>chat</show>
   <x xmlns="vcard-temp:x:update">
     <photo>d37b60faea717f9f7ca08bef1504d2de68a789eb</photo>
   </x>
   <x xmlns="jabber:x:avatar">
     <hash>d37b60faea717f9f7ca08bef1504d2de68a789eb</hash>
   </x>
</presence>

そしてSparkデバッグで戻ってきます:

<presence id="b8nyI-95" to="test2@localhost/Spark 2.6.3" from="test3" type="error">
 <error code="404" type="CANCEL">
   <remote-server-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
 </error>
</presence>

自分のクライアントでパケットが受信されません。これは、Spark で自分のプレゼンスを更新しようとしたときにのみ表示されます。



別の xmpp サーバーでのテスト: ejabberd Spark からプレゼンスを送信していると思います:

<presence id="B0ANe-55">
 <status>Free to chat</status>
  <priority>1</priority>
 <show>chat</show>
</presence>

*チャットアプリで受信*

<presence from='test2@maxciceu.p1.im/Spark 2.6.3' to='test3@maxciceu.p1.im/Smack' id='B0ANe-55'> 
 <status>Free to chat</status>
  <priority>1</priority>
 <show>chat</show>
</presence>

両方の名簿のサブスクリプションが次のように設定され てます。 ---できません: 名簿の存在を更新します: RosterListener を使用して、名簿をリストにリロードしました


RosterListener を追加しました

   Roster roster = Client.getClient().connection.getRoster();
   roster.addRosterListener(new RosterListener() {
     @Override
    public void entriesAdded(Collection<String> addresses) {}
    @Override
    public void entriesDeleted(Collection<String> addresses) {}
    @Override
    public void entriesUpdated(Collection<String> addresses) {}
    @Override
    public void presenceChanged(Presence presence) {
        System.out.println("Presence changed: " + presence.getFrom() + " " + presence);

    }
});

-> Openfire で名簿の存在を更新するときに機能しません // 他のサーバーではすべて問題ありません。

->も追加されました(それが私の問題に役立つかどうかはわかりません):

    ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
    if (sdm == null){
         sdm = new ServiceDiscoveryManager(connection);}
    sdm.addFeature("http://jabber.org/protocol/disco#info");
    sdm.addFeature("http://jabber.org/protocol/disco#item");
    sdm.addFeature("http://jabber.org/protocol/caps");     
    JingleManager.setJingleServiceEnabled();
    ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider());

すでにGoogleとStackOverflowを通過しました。

誰かが助けてくれれば幸いです。

4

1 に答える 1

0

システムの再インストール後に問題が解決。ubuntu のクリーン インストールを行い、次のチュートリアルを使用して Openfire をインストールしました: http://www.thefanclub.co.za/how-to/how-setup-im-voip-server-using-openfire-ubuntu-1204

于 2013-05-22T15:05:21.620 に答える