.NET MAUI Local Notifications Android and iOS Step by step Implementation and Top 10 Questions and Answers
 Last Update: April 01, 2025      9 mins read      Difficulty-Level: beginner

Explaining .NET MAUI Local Notifications for Android and iOS: A Step-by-Step Guide

Introduction

.NET Multi-platform App UI (.NET MAUI) is a powerful framework for building cross-platform mobile applications using C# and XAML. One of the essential features that can enhance user engagement within your applications is the implementation of local notifications. Local notifications are messages that appear on the user's device at a specific time or when certain conditions are met. They can be used to remind users about upcoming tasks, provide updates, or simply draw their attention back to the app.

In this comprehensive guide, we will explore how to implement local notifications in both Android and iOS using .NET MAUI. We'll cover the necessary setup, configuring permissions, and how to schedule notifications at appropriate times.

Prerequisites

Before we begin, make sure you have the following set up:

  • Visual Studio with .NET MAUI workload installed.
  • A basic understanding of C# and XAML.
  • Knowledge of .NET MAUI architecture and navigation.

Step 1: Create a .NET MAUI Project

  1. Open Visual Studio and create a new project.
  2. Select "MAUI App" from the list of project templates.
  3. Configure the project settings and create the project.

Step 2: Install Necessary NuGet Packages

To work with notifications in .NET MAUI, install the following NuGet packages:

  • Plugin.LocalNotifications

To install the package, right-click on the project, go to "Manage NuGet Packages," and search for Plugin.LocalNotifications. Install it for both Android and iOS projects.

Step 3: Configure Permissions

For Android:

  1. Open AndroidManifest.xml in the Platforms/Android folder.

  2. Add the following permissions inside the <manifest> tag:

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    
  3. If you aim for Android 12 and higher, include these:

    <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
    

For iOS:

iOS handles notification permissions through code. You don’t need to configure additional settings for notifications in Info.plist.

Step 4: Configure Services in .NET MAUI

Create a new class to handle notification initialization and configuration.

  1. Create a new class named NotificationService.
  2. Use the LocalNotificationCenter provided by the Plugin.LocalNotifications.
using Plugin.LocalNotifications;
using Microsoft.Maui.ApplicationModel;

public class NotificationService
{
    public NotificationService()
    {
        CreateNotificationChannel(); // For Android
    }

    private void CreateNotificationChannel()
    {
        // Create a notification channel for Android
        var channel = new Plugin.LocalNotifications.NotificationChannelRequest
        {
            Id = "default_channel_id",
            Importance = Plugin.LocalNotifications.NotificationImportance.Max,
            Name = "Default Channel",
            Description = "Generic notifications"
        };

        LocalNotificationCenter.Current.CreateNotificationChannel(channel);
    }

    public void Initialize()
    {
        // Set up notification permissions for iOS
        LocalNotificationCenter.Current.RequestPermisions();
    }

    public void ShowNotification(string title, string message, int id)
    {
        var notification = new Plugin.LocalNotifications.NotificationRequest
        {
            Title = title,
            Description = message,
            Id = id
        };

        LocalNotificationCenter.Current.Show(notification);
    }

    public void ScheduleNotification(string title, string message, int id, DateTime scheduleTime)
    {
        var notification = new Plugin.LocalNotifications.NotificationRequest
        {
            Title = title,
            Description = message,
            Id = id,
            Schedule = scheduleTime
        };

        LocalNotificationCenter.Current.Show(notification);
    }
}

Step 5: Initialize Notification Service

Modify your App.xaml.cs or wherever you initialize your services to include the NotificationService.

public partial class App : Application
{
    public NotificationService NotificationService { get; private set; }

    public App()
    {
        InitializeComponent();

        MainPage = new AppShell();

        NotificationService = new NotificationService();
        NotificationService.Initialize();
    }
}

Step 6: Trigger Notifications

You can now trigger notifications from any part of your application. Here’s how you can do it:

Show Immediate Notification:

private void ShowNotificationButton_Clicked(object sender, EventArgs e)
{
    App.Current.NotificationService.ShowNotification("Reminder", "Don't forget to water the plants!", 1001);
}

Schedule a Future Notification:

private void ScheduleNotificationButton_Clicked(object sender, EventArgs e)
{
    DateTime scheduleTime = DateTime.Now.AddMinutes(1); // Schedule for 1 minute later
    App.Current.NotificationService.ScheduleNotification("Event Reminder", "Your meeting starts now!", 1002, scheduleTime);
}

Step 7: Handle Action Buttons (Optional)

To handle user interactions with notifications, you can specify action buttons. Here’s how to implement it:

public void ShowNotificationWithButton()
{
    var notification = new Plugin.LocalNotifications.NotificationRequest
    {
        Id = 1003,
        Title = "New Message",
        Description = "You have a new message from Alice.",
        Android = new Plugin.LocalNotifications.PlatformOptions.AndroidOptions
        {
            Actions = new[]
            {
                new Plugin.LocalNotifications.Action("reply", "Reply")
            }
        }
    };

    LocalNotificationCenter.Current.Show(notification);
}

Handle the actions in your application by subscribing to the LocalNotificationTapped event:

public partial class App : Application
{
    public NotificationService NotificationService { get; private set; }

    public App()
    {
        InitializeComponent();

        MainPage = new AppShell();

        NotificationService = new NotificationService();
        NotificationService.Initialize();

        // Handle notification taps
        LocalNotificationCenter.Current.OnNotificationTapped += HandleNotificationTapped;
    }

    private void HandleNotificationTapped(NotificationTappedEventArgs e)
    {
        if (e.ActionId.IsNullOrEmpty())
        {
            // Handle tapped notification
        }
        else
        {
            // Handle action tapped
            switch (e.ActionId)
            {
                case "reply":
                    Console.WriteLine("Reply action tapped");
                    break;
                default:
                    break;
            }
        }
    }
}

Step 8: Testing and Deployment

  • Test on Android Emulator/Device: Make sure to test on a device where all permissions are granted.
  • Test on iOS Simulator/Device: Note that the iOS simulator does not support notifications fully; use a physical device for better testing.

Conclusion

Implementing local notifications in .NET MAUI applications for both Android and iOS is a straightforward process once you have the necessary setup and permissions configured. With the help of Plugin.LocalNotifications, you can easily schedule and display notifications, enhancing user engagement and interaction. Remember to handle user interactions with notifications to provide a seamless experience, and always ensure you respect user privacy by requesting and handling notification permissions appropriately.