This document charts the optimal progression of a messaging app from a likely starting place to best-in-class. It's designed to help you think about scaling your app over time, and what features to implement when. While every media app is different, consider these recommendations to achieve a best-in-class app.
Basic messaging app
A basic messaging app provides users with a foundational text-based communications experience, which may include:
- Offline message support 
 Ensure messages can be queued when offline, with strategies for local caching and retry attempts. UI cues such as 'sending…' or 'failed to send' indicators help manage user expectations.
- Error handling 
 Offer clear, informative feedback for different failure scenarios, like network issues or blocked recipients. Include actionable steps or explanations to reduce user frustration.
- Notifications 
 Provide notifications when messages are received in the background.
- Firebase Cloud Messaging (FCM) 
 Leverage Firebase Cloud Messaging to notify the app of new messages.
- Spellcheck 
 Implement and access spell checking in your app.
- Accessibility 
 Follow Material Design guidelines to design and develop your app for accessibility.
- Sharing 
Better messaging app
A better messaging app gives users more tools to enhance their communication and provide self-expression, including:
- Emoji 
 Support modern emoji.
- Push notifications with Intent 
 Use payloads with Firebase Cloud Messaging (FCM) to direct users to specific conversations or sections of the app from the notification. This reduces the steps users have to take to reach important content. ()
- Threaded conversations 
 Implement replies to specific messages within group chats to maintain the context and flow of conversations. This feature is crucial for keeping group communications organized and understandable.
- Image keyboards, drag and drop, and other rich content 
 Receive rich content such as images, videos, and audio files. The API includes support for image keyboards and being a drag-and-drop target to make it easy for users to add stickers, animations, and other media to their messages. Also, make sure your app works as a drag-and-drop source to share content with other apps.
- Search in conversations 
 Enable full-text search within conversations so that users can quickly find messages, images, links, and files. Support filtering by date, person, or type of content for efficient searching.
- Media and file support 
 Integrate seamless support for sending and receiving images, videos, documents, and other files with inline previews and clear indicators for download and upload statuses.
- Notifications - Wait to show the notification permission until the user is familiar with your app. Trigger the permission from a user action if possible.
- Support notification badges.
- Support direct replies in notifications.
- Make thoughtful use of notification channels, potentially including custom importance level and notification behaviors for notification channels.
- Support conversation notifications with long-lived shortcuts so users can add people and group shortcuts to their homescreens.
 
- Advanced Firebase Cloud Messaging (FCM) 
 Make use of advanced Firebase Cloud Messaging features such as data payloads to minimize latency and expensive server round trips.
- Read receipts 
 Provide the option for users to manage the visibility of read receipts. This could be a simple toggle in the settings, allowing users to choose privacy over acknowledgment.
Best messaging app
The best messaging app builds on the previous recommendations to create a seamless multidevice experience for users, along with more advanced expressive capabilities, including:
- Emoji picker 
 Support the emoji picker.
- Simplified login 
 Invest in seamless identity across surfaces using CredentialManager with either Passkeys or federated sign-in.
- End-to-end encryption 
 Implement industry-standard encryption protocols to ensure that messages are secure and only readable by the intended recipient.
- Add and edit rich content 
 Add and edit rich content to text previews when sharing.
- Synchronization across devices 
 Enable users to access their conversations cohesively across multiple devices, ensuring that their communication experience is seamless, whether they're on their phone, tablet, or computer.- Check out the codelab to create a chat app with Firebase Realtime Database. 
- Message reactions 
 Allow users to react to messages with emoji or custom graphics, providing a quick and fun way to respond without typing out a message.
- Message editing and deletion 
 Give users control over their messages after sending, including editing and deletion within a specified time frame.
- Customizable notifications 
 Offer detailed customization options for notifications, including sounds, vibration patterns, and LED colors, on a per-conversation or per-contact basis. Check out Create a custom notification layout.
- Conversation bubbles 
 Support bubbles for conversations.
- Direct share targets 
 Provide direct share targets to allow your users to share directly with contacts within your app.
- Animate the software keyboard 
 Control and animate the software keyboard for extra polish.
- Voice and video chat 
 Incorporate high-quality, real-time voice and video communication capabilities. The Jetpack Telecom Library includes helpful features like dedicated foreground service support, audio routing, and cross-device capabilities between phones, watches, cars, and more, while technologies like WebRTC can provide peer-to-peer connectivity.
- Wear OS app 
 Build a Wear OS app to help people stay connected from their smartwatch.
