Implementing Push Notifications in Flutter: Engaging Users with FCM


4 min read

In the fast-paced world of mobile app development, user engagement is paramount. Keeping users informed and connected with your app is a key factor in its success. One powerful tool for achieving this is push notifications.

In this article, we'll delve into the implementation of push notifications in Flutter using Firebase Cloud Messaging (FCM), providing a step-by-step guide to keep your users engaged and informed.

Understanding Push Notifications

Push notifications are messages that pop up on a user's device, even when the app is not in use. They serve as a direct channel of communication between the app and its users, delivering timely information, updates, and personalized content. Implementing push notifications can significantly enhance user engagement and retention.

Firebase Cloud Messaging (FCM) is a cloud solution for messages on iOS, Android, and web applications. It allows you to send messages to your client applications with a reliable and efficient connection. FCM is the go-to solution for implementing push notifications in Flutter due to its ease of integration and robust functionality, recommend Flutter app development agencies in Bangalore.

Step 1: Setting Up Your Flutter Project

Before diving into the implementation, make sure you have a Flutter project set up. If you haven't installed Flutter yet, you can follow the instructions on the official Flutter website. Once your project is ready, you can proceed to integrate Firebase.

Step 2: Integrating Firebase into Flutter

Firebase is a comprehensive mobile and web application development platform that includes a variety of services, one of which is FCM. To integrate Firebase into your Flutter project, follow these steps:

  1. Create a Firebase Project:

  2. Add Your App to Firebase:

    • After creating the project, click on "Add app" and select the platform (iOS/Android).

    • Follow the on-screen instructions to download the configuration files.

  3. Install Dependencies:

    • In your Flutter project, open the pubspec.yaml file.

    • Add the dependencies for Firebase and FCM:

        yamlCopy codedependencies:
          firebase_core: ^latest_version
          firebase_messaging: ^latest_version
  4. Initialize Firebase:

    • In your Dart code, initialize Firebase in the main.dart file:

        dartCopy codeimport 'package:firebase_core/firebase_core.dart';
        void main() async {
          await Firebase.initializeApp();

Step 3: Requesting Permission for Notifications

Before sending push notifications, you need to request permission from the user. Use the firebase_messaging package to handle this process. Add the following code to your Dart file:

dartCopy codeimport 'package:firebase_messaging/firebase_messaging.dart';

class PushNotificationService {
  final FirebaseMessaging _fcm = FirebaseMessaging.instance;

  Future<void> init() async {
    // Request permission for iOS
    NotificationSettings settings = await _fcm.requestPermission();

    if (settings.authorizationStatus == AuthorizationStatus.authorized) {
      print('Permission granted');
    } else {
      print('Permission denied');

Call the init method when your app starts to request permission.

Step 4: Handling Incoming Notifications

To handle incoming notifications, you need to set up a callback. Add the following code to your PushNotificationService:

dartCopy codeclass PushNotificationService {
  // ... (previous code)

  void subscribeToTopics(List<String> topics) {

  void onMessage(Function(Map<String, dynamic> data) callback) {
    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      print("Foreground Message: ${message.notification?.body}");

  void onBackgroundMessage(Function(Map<String, dynamic> data) callback) {
    FirebaseMessaging.onBackgroundMessage((RemoteMessage message) async {
      print("Background Message: ${message.notification?.body}");

This code sets up listeners for both foreground and background messages. You can customize the callback to handle the received data accordingly.

Step 5: Sending Push Notifications

Now that your Flutter app is set up to receive push notifications, it's time to send them. This can be achieved through the Firebase Console or programmatically through a server or Cloud Function.

To send a notification using the Firebase Console:

  1. Go to the Firebase Console.

  2. Select your project.

  3. Navigate to "Cloud Messaging" in the left menu.

  4. Click on "Send your first message."

  5. Enter the message details and target your app.

To send notifications programmatically, you can use the Firebase Admin SDK or a third-party server. For example, using the Firebase Admin SDK in a Node.js environment:

javascriptCopy codeconst admin = require('firebase-admin');

// Initialize Firebase Admin SDK

// Define the message payload
const message = {
  data: {
    title: 'Hello',
    body: 'This is a push notification!',
  topic: 'your_topic',

// Send the message
  .then((response) => {
    console.log('Successfully sent message:', response);
  .catch((error) => {
    console.error('Error sending message:', error);

Replace 'your_topic' with the topic your Flutter app is subscribed to.

Step 6: Testing Push Notifications

Before deploying your app, it's crucial to thoroughly test push notifications. You can use the Firebase Console for basic testing, but for more comprehensive testing, consider using a tool like Postman or writing automated tests.

Ensure that your app reacts correctly to foreground and background messages, and that the payload data is handled appropriately.


Implementing push notifications in Flutter with Firebase Cloud Messaging is a powerful way to enhance user engagement and keep your audience informed. By following the steps outlined in this guide, you can seamlessly integrate push notifications into your Flutter app, creating a more interactive and connected user experience. As the mobile landscape continues to evolve, staying at the forefront of user engagement technologies is essential for the success of your app in the digital marketplace.