Потерянные сообщения с помощью aSmack - PullRequest
3 голосов
/ 25 июня 2011

Я использую aSmack в своем приложении для Android, чтобы получать сообщения от моего Desktop-Jabber-клиента. Это работает нормально, и даже если мой телефон Android находится в автономном режиме (после правильного закрытия соединения), он получит автономные сообщения после следующего входа в систему.

Но когда я вхожу в режим полета на телефоне или выключаю телефон, чтобы соединение было внезапно закрыто (без вызова disconnect() в Connection -объекте), телефон остается "онлайн" в списке контактов моего Desktop-Jabber-клиента на некоторое время, и я могу отправлять ему сообщения. Однако эти сообщения никогда не приходят. Даже если телефон снова подключается к серверу. Эти сообщения потеряны.

Кто-нибудь знает, как решить эту проблему? Потерять сообщения в чате нельзя. :)

РЕДАКТИРОВАТЬ: добавлен тест-код
BroadcastReceiver: http://pastebin.com/cFLzGXgy
Услуга: http://pastebin.com/wLpQCQfT

Первый - BroadcastReceiver, запускающий службу (второй URL-адрес) каждый раз, когда телефон подключен к сети.

PS: Это всего лишь тест-код! Вы должны изменить сервер / имя пользователя / пароль, если хотите использовать / протестировать его.

Ответы [ 3 ]

4 голосов
/ 21 марта 2012

Вы можете попытаться отправить доставленное сообщение от клиента b клиенту A при получении сообщения. Проблема заключается в том, что если клиент A находится в автономном режиме (без разрыва соединения), доставленное подтверждение не отправляется до тех пор, пока пользователь не получит сообщение, а клиент B не сможет повторно отправить сообщение.

1 голос
/ 24 декабря 2014

эта проблема возникает при разрыве вашего соединения.Вам нужны соединения с поддержкой управления потоком XEP-198 для получения этих сообщений.обратитесь к этому блогу: http://op -co.de / blog / posts / XEP-0198 / В основном это позволяет подтверждать строфы и возобновлять поток, что именно то, что вы хотите сделать в случае.следует подождать, пока smack не выпустит 4.1.

1 голос
/ 28 декабря 2011

вы можете попытаться отправить подтверждение получения сообщения, используя Smackx Message Events это обеспечит доставку сообщения, если вы предпримете корректирующие действия.

...