Я разрабатываю приложение чата с помощью 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.
Если кто-нибудь может помочь, я был бы признателен.