Biggie
Biggie

Reputation: 7067

Lost messages with aSmack

i'm using aSmack in my Android app to receive messages from my Desktop-Jabber-client. This works fine and even if my android phone is offline (after the connection was closed properly) it will receive the offline messages after the next login.

But when i enter the airplane-mode on the phone or shutdown the phone so that the connection is abruptly closed (without calling disconnect() on the Connection-object) the phone stays "online" in the contact-list of my Desktop-Jabber-client for a while and i can send messages to it. However these messages never arrive. Even though the phone logs in to the server again. These messages are lost.

Does anyone know how to fix this issue? Losing messages in a chat is not an option. :)

EDIT: Added Test-Code
BroadcastReceiver: http://pastebin.com/cFLzGXgy
Service: http://pastebin.com/wLpQCQfT

The first one is a BroadcastReceiver starting the service (second URL) each time the phone is connected to a network.

PS: This is only a test-code! You must change the server/username/password if you want to use/test it.

Upvotes: 3

Views: 2611

Answers (3)

M.Movaffagh
M.Movaffagh

Reputation: 1312

this problem occurs when your connection broke. You need "Stream Management" XEP-198 enabled connections to achieve this messages. refer to this blog : http://op-co.de/blog/posts/XEP-0198/ Basically it allows for stanza acknowledgement and stream resumption, which is exactly what you want to do in case.so you should wait till smack will 4.1 release.

Upvotes: 1

Miguel
Miguel

Reputation: 41

You can try to send delivered message from client b to client A when the message arrival. The problem is if the client A is offline (no connection break) the delivered confirm don't send until the user receives the message and the client B can't re-send the message.

Upvotes: 4

Ahmed Aswani
Ahmed Aswani

Reputation: 8649

you can try to send acknowledgement of receiving the message using Smackx Message Events this will assure the message is delivered else you take corrective action.

Upvotes: 1

Related Questions