Take your messaging to the next level — basic, better, and best
Stay organized with collections
Save and categorize content based on your preferences.
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
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.
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2024-05-29 UTC.
[null,null,["Last updated 2024-05-29 UTC."],[],[],null,["# Take your messaging to the next level — basic, better, and best\n\nThis document charts the optimal progression of a messaging app from a likely\nstarting place to best-in-class. It's designed to help you think about scaling\nyour app over time, and what features to implement when. While every media app\nis different, consider these recommendations to achieve a best-in-class app.\n\nBasic messaging app\n-------------------\n\nA basic messaging app provides users with a foundational text-based\ncommunications experience, which may include:\n\n- **Offline message support** \n\n Ensure messages can be queued when offline, with strategies for local caching\n and retry attempts. UI cues such as 'sending...' or 'failed to send' indicators\n help manage user expectations.\n\n - [Save data in a local database using Room](/training/data-storage/room).\n - [Run background tasks using WorkManager](/develop/background-work/background-tasks/persistent/getting-started).\n- **Error handling** \n\n Offer clear, informative feedback for different failure scenarios, like network\n issues or blocked recipients. Include actionable steps or explanations to reduce\n user frustration.\n\n- **Notifications** \n\n Provide notifications when messages are received in the background.\n\n - [Work with the Notification runtime permission](/develop/ui/views/notifications/notification-permission).\n - [Create and manage notification channels](/develop/ui/views/notifications/channels).\n- **Firebase Cloud Messaging (FCM)** \n\n Leverage [Firebase Cloud Messaging](https://firebase.google.com/docs/cloud-messaging) to notify the app of new\n messages.\n\n- **Spellcheck** \n\n [Implement and access spell checking](/develop/ui/views/touch-and-input/spell-checker-framework#SpellCheckClient) in your app.\n\n- **Accessibility** \n\n [Follow Material Design guidelines to design and develop your app for\n accessibility](/guide/topics/ui/accessibility).\n\n- **Sharing**\n\n - [Use the Android Sharesheet to share data and content with other apps and\n targets](/training/sharing/send#why-to-use-system-sharesheet).\n - [Support receiving](/develop/ui/views/touch-and-input/spell-checker-framework#SpellCheckClient) data and content [from other apps](/training/sharing/receive).\n\nBetter messaging app\n--------------------\n\nA better messaging app gives users more tools to enhance their communication and\nprovide self-expression, including:\n\n- **Emoji** \n\n Support [modern emoji](/develop/ui/views/text-and-emoji/emoji2).\n\n- **Push notifications with Intent** \n\n Use payloads with Firebase Cloud Messaging (FCM) to [direct users to specific\n conversations or sections of the app](/develop/ui/views/notifications/navigation) from the notification. This reduces\n the steps users have to take to reach important content. ()\n\n- **Threaded conversations** \n\n Implement replies to specific messages within group chats to maintain the\n context and flow of conversations. This feature is crucial for keeping group\n communications organized and understandable.\n\n- **Image keyboards, drag and drop, and other rich content** \n\n Receive [rich content](/develop/ui/views/receive-rich-content) such as images, videos, and audio files. The\n API includes support for image keyboards and being a drag-and-drop target\n to make it easy for users to add stickers, animations, and other media to\n their messages. Also, make sure your app works as a [drag-and-drop source](/develop/ui/views/touch-and-input/drag-drop)\n to share content with other apps.\n\n- **Search in conversations** \n\n Enable [full-text search](/develop/ui/views/search/training/search) within conversations so that users can quickly\n find messages, images, links, and files. Support filtering by date, person, or\n type of content for efficient searching.\n\n- **Media and file support** \n\n Integrate seamless support for [sending and receiving images](/training/data-storage/shared/photopicker), videos,\n documents, and other files with inline previews and clear indicators for\n download and upload statuses.\n\n- **Notifications**\n\n - [Wait to show the notification permission](/develop/ui/views/notifications/notification-permission#wait-to-show-prompt) until the user is familiar with your app. Trigger the permission from a user action if possible.\n - Support [notification badges](/develop/ui/views/notifications/badges).\n - Support [direct replies](/develop/ui/views/notifications/build-notification#reply-action) in notifications.\n - Make thoughtful use of [notification channels](/develop/ui/views/notifications/channels), potentially including custom [importance level](/develop/ui/views/notifications/channels#importance) and notification behaviors for notification channels.\n - Support [conversation notifications](/develop/ui/views/notifications/conversations#api-notifications) with [long-lived shortcuts](/develop/ui/views/notifications/conversations#api-shortcuts) so users can add people and group shortcuts to their homescreens.\n- **Advanced Firebase Cloud Messaging (FCM)** \n\n Make use of advanced [Firebase Cloud Messaging](https://firebase.google.com/docs/cloud-messaging) features such as\n data payloads to minimize latency and expensive server round trips.\n\n- **Read receipts** \n\n Provide the option for users to manage the visibility of read receipts. This\n could be a simple toggle in the settings, allowing users to choose privacy over\n acknowledgment.\n\nBest messaging app\n------------------\n\nThe best messaging app builds on the previous recommendations to create a\nseamless multidevice experience for users, along with more advanced expressive\ncapabilities, including:\n\n- **Emoji picker** \n\n Support the [emoji picker](/develop/ui/views/text-and-emoji/emoji-picker).\n\n- **Simplified login** \n\n Invest in seamless identity across surfaces using [CredentialManager](/training/sign-in/passkeys) with\n either [Passkeys](/training/sign-in/passkeys#about-passkeys) or [federated sign-in](/training/sign-in/credential-manager).\n\n- **End-to-end encryption** \n\n Implement industry-standard encryption protocols to ensure that messages are\n secure and only readable by the intended recipient.\n\n- **Add and edit rich content** \n\n Add and edit [rich content](/training/sharing/send#adding-rich-content-previews) to text previews when sharing.\n\n- **Synchronization across devices** \n\n Enable users to access their conversations cohesively across multiple devices,\n ensuring that their communication experience is seamless, whether they're on\n their phone, tablet, or computer.\n\n Check out the [codelab to create a chat app with Firebase Realtime\n Database](https://firebase.google.com/codelabs/firebase-android).\n- **Message reactions** \n\n Allow users to react to messages with emoji or custom graphics, providing a\n quick and fun way to respond without typing out a message.\n\n- **Message editing and deletion** \n\n Give users control over their messages after sending, including editing and\n deletion within a specified time frame.\n\n- **Customizable notifications** \n\n Offer detailed customization options for notifications, including sounds,\n vibration patterns, and LED colors, on a per-conversation or per-contact basis.\n Check out\n [Create a custom notification layout](/develop/ui/views/notifications/custom-notification).\n\n- **Conversation bubbles** \n\n Support [bubbles for conversations](/develop/ui/views/notifications/bubbles).\n\n- **Direct share targets** \n\n Provide [direct share targets](/training/sharing/direct-share-targets) to allow your users to share directly with\n contacts within your app.\n\n- **Animate the software keyboard** \n\n [Control and animate the software keyboard](/develop/ui/views/layout/sw-keyboard) for extra polish.\n\n- **Voice and video chat** \n\n Incorporate high-quality, real-time voice and video communication capabilities.\n The [Jetpack Telecom Library](https://android-developers.googleblog.com/2023/11/alpha-release-of-telecom-library.html) includes helpful features like dedicated\n foreground service support, audio routing, and cross-device capabilities between\n phones, watches, cars, and more, while technologies like WebRTC can provide\n peer-to-peer connectivity.\n\n- **Wear OS app** \n\n Build a [Wear OS app](/wear/gallery/messaging) to help people stay connected from their smartwatch."]]