Swift Messenger
This is an Android instant messaging app, similar to WhatsApp or Facebook Messenger. The idea came from being disappointed in all the existing apps, which have good features but every one has problems I found unacceptable. WhatsApp is bound to a phone number, making it dependent on a phone contract and unusable on a PC. Messenger suffers from feature bloat and reliance on the Facebook ecosystem. Google Hangouts lacks important features and is becoming abandoned for personal use.
Swift supports a lot of features, including:
- Profile pictures
- Message delivered and seen receipts
- Smart notifications
- Contact archiving and blocking
- Dynamic timestamps
- Phone number verification
- Multi-device support for the same account
- Sending photos
- Sending images from the gallery
- Sending locations / maps
- User profiles
- Unsent message retry
- Last seen for contacts
- Contact search by name or phone number
- Image viewer
- Split-screen support
- Sharing text/images to the app
- Direct Share support
- First start tutorial / showcase
- Connection status information
- Custom Emoji panel
- Sending "stickers"
- Password changing
- Typing notification
The app connects to a server I wrote in Java, communicating with an SQL database in a Docker container. The network communication is over raw TCP sockets with a custom Protocol Buffers protocol I designed to use very little data. Push notifications to sleeping devices are handled with Firebase Cloud Messaging, which is used by the server as needed. This is a huge project on both the Android, server and networking side.