As a privacy conscious person it goes without saying that I don't use centralized instant messaging solutions such as WhatsApp. Over the years I played around with a number of XMPP based mobile messaging apps but I found all of them lacking one thing or the other. The usual pain points were a combination of ugly user interface, unreliability, no indication if a message was received or not, painful picture messaging, lack of end-to-end encryption, high power consumption, etc. etc. Then during the recent Froscon conference I attended Daniel Gultsch's talk about XMPP mobile messaging and was completely blown away as he addressed all my issues during his talk and had a solution that sounded to good to be true: The solution is his Android Conversations app and its motto is 'the very last word in instant messaging'. After a week of using it I could not agree more! I'm not easily impressed but this app does it and here's why:
In short, the user interface is beautiful and easy to use but still offers a lot of options in the the advanced configuration settings for people like me. A picture says more than a thousand words so click on the screenshot on the left for a closer look.
Getting a Jabber / XMPP Account For Conversations
Even non-technical people can install and configure Conversations, as only a username and a password of an XMPP account are required. There are lots of open XMPP servers around that interconnect with each other so it's easy to get an account or to create one for another person and to simply text the username and password to them. Servers can have different policies of how to create an account which is the major hurdle in the process. The Chaos Computer Club Jabber server for example asks the user during account creation to go to a website, get the contents of a captcha and type it in. Conversations isn't capable of doing that but Pidgin, my desktop IM messenger, had no problem with that so I first registered and account there and then used the username and password on my mobile device.
Delivery Indications and Transport Reliability
One thing that I find very important to have is an indication if a message has been delivered, if delivery is still pending or if it has been lost somewhere on the way. Conversations does a great job at this because it shows a green check mark next to a message when it has been delivered. In addition it shows up to which message the recipient has read the message stream.
Many mobile messaging apps I've tried so far sooner or later failed when it comes to reliably transport messages. Some apps drop messages when sent to an offline contact, or, even more often, when contact is online but currently out of coverage. Conversations handles both scenarios very nicely. For out of coverage scenarios a bit of help is required from the server side about which I'll write a separate post as that's something quite interesting in its own right. But servers usually support this today and I couldn't get Conversations to drop even a single message in normal out of coverage scenarios. When I tried very hard, and I mean really hard, I could get a message to drop but Conversations then indicates this very clearly. Also, sending messages to offline contacts just works even if the recipient only comes online hours after the message was sent. Once the message is delivered the message is marked with a delivery indication so the user is aware at all times if the message is still pending or if it was delivered. Excellent!
Pictures, Voice Messages and Files
Text messages are so yesterday, today people want to send pictures and voice messages. Conversations can do both and pictures are automatically downsized to a couple of hundred kilobytes unless they are sent as regular files. It's also possible to take a picture from within Conversations and send the result without going through the gallery. Like pictures, voice messages can also be recorded within Conversations and sent directly. If supported by the server, content is sent via a proxy server. If a server doesn't have a proxy, files are cut up into several messages and sent inline. I tried both methods and both transfer files quickly.
In addition to 1:1 messages, Conversations also supports group chats if the server offers the service, which most do. Creating a new conference, i.e. a multi-user group, and adding participants works swiftly in Conversations and the only feature I found lacking so far is the ability to send pictures into a group chat. I guess that is important for some people so let's hope that is added at some point.
And finally, let's have a look at encryption. Conversations supports the standard OTR (Off The Record) end-to-end encryption, which I've been using with my desktop IM program for a long time already and also OpenPGP, which I didn't try, however. The major problem of OTR is, however, that it's not very well suited for mobile communication that is at times unreliable due to users suddenly moving out of coverage for a while and it's limited to 1:1 communications, i.e. it can't be used in a group chat. Therefore, Conversations implements an additional and new protocol called OMEMO that addresses both issues. While it works much better than OTR when I was testing it in a number of different out of coverage scenarios, it should be mentioned that it is still brand new and from a security point of view I wouldn't trust it very much yet until it has been reviewed and security tested independently. Also, I'm not sure if pictures and voice messages or OTR, OpenPGP or OMEMO encrypted when they are sent but at least they are protected by the SSL encryption of the transport layer to and from the server. [Update: The author has since confirmed that file and picture transfers are encrypted if one of the encryption settings are used for communicating in a 1:1 chat]. In the advanced options, Conversations has a tick box to not to trust the system certificates. In other words, if activated, Conversations asks the user if he wants to trust even a fully valid and trusted server certificate and then warns the user whenever the certificate changes. Man-in-the-middle attacks by organizations that can generate a valid SSL certificate on the fly and sit in between the client and the server are not only prevented but the user is even warned that this is happening. This is certainly not a feature for the average user, which is why it has to be activated in the advanced options menu but it shows how much thought has gone into Conversations from the GUI right down into the machine room...
I've been using Conversations for a week now and it didn't crash on me a single time, didn't loose messages, showed me when they were received, it works great for pictures and voice messages, too, has a slick interface and the security features are first class as well. So by all means, give it a try if you like mobile messaging but are concerned about your privacy and storage of all your data on a server far far away.