2013-05-13 1 views
2

Я разрабатываю приложение чата с помощью Smack api, и я застрял в получении пакетов присутствия.Ошибка присутствия сервера smack api и Openfire


Испытано с привкусом 3.2.2 и 3.3.0.
Эти проблемы связаны только с использованием сервера Openfire 3.8.1.
Первого: Я посылаю пакет присутствия от искры и получать его с успехом
второго Я обновляю и передачу присутствия пакета от искрового клиента к моему:

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

и получать обратно в Спарке отладка:

<presence id="b8nyI-95" to="[email protected]/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='[email protected]/Spark 2.6.3' to='[email protected]/Smack' id='B0ANe-55'> 
<status>Free to chat</status> 
    <priority>1</priority> 
<show>chat</show> 
</presence> 

Оба реестров имеют подписки устанавливаются: как
Openfire Я могу: подключение, получить список реестра (он получает присутствие, которое в момент инициализации) , отправлять и получать сообщения, отправлять файлы.
--- не может сделать: обновление присутствия реестра: пытался с 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.

Если кто-нибудь может помочь, я был бы признателен.

ответ