![]() |
VOOZH | about |
dotnet add package Plugin.FirebasePushNotifications --version 3.2.11
NuGet\Install-Package Plugin.FirebasePushNotifications -Version 3.2.11
<PackageReference Include="Plugin.FirebasePushNotifications" Version="3.2.11" />
<PackageVersion Include="Plugin.FirebasePushNotifications" Version="3.2.11" />Directory.Packages.props
<PackageReference Include="Plugin.FirebasePushNotifications" />Project file
paket add Plugin.FirebasePushNotifications --version 3.2.11
#r "nuget: Plugin.FirebasePushNotifications, 3.2.11"
#:package Plugin.FirebasePushNotifications@3.2.11
#addin nuget:?package=Plugin.FirebasePushNotifications&version=3.2.11Install as a Cake Addin
#tool nuget:?package=Plugin.FirebasePushNotifications&version=3.2.11Install as a Cake Tool
👁 Version
👁 Downloads
👁 Buy Me a Coffee
Plugin.FirebasePushNotifications provides a seamless way to engage users and keep them informed about important events in your .NET MAUI applications. This open-source C# library integrates Firebase Cloud Messaging (FCM) into your .NET MAUI projects, enabling you to receive push notifications effortlessly.
This library is available on NuGet: https://www.nuget.org/packages/Plugin.FirebasePushNotifications Use the following command to install Plugin.FirebasePushNotifications using NuGet package manager console:
PM> Install-Package Plugin.FirebasePushNotifications
You can use this library in any .NET MAUI project compatible to .NET 7 and higher.
google-services.json is used by Android while GoogleService-Info.plist is accessible to iOS. Make sure the Include and the Link paths match.<ItemGroup Condition="$(TargetFramework.Contains('-android'))">
<GoogleServicesJson Include="Platforms\Android\Resources\google-services.json" Link="Platforms\Android\Resources\google-services.json" />
</ItemGroup>
<ItemGroup Condition="$(TargetFramework.Contains('-ios'))">
<BundleResource Include="Platforms\iOS\GoogleService-Info.plist" Link="GoogleService-Info.plist" />
</ItemGroup>
This plugin provides an extension method for MauiAppBuilder UseFirebasePushNotifications which ensure proper startup and initialization. Call this method within your MauiProgram just as demonstrated in the MauiSampleApp:
var builder = MauiApp.CreateBuilder()
.UseMauiApp<App>()
.UseFirebasePushNotifications();
UseFirebasePushNotifications has optional configuration parameters which are documented in another section of this document.
LaunchMode = LaunchMode.SingleTask. You can also use a different LaunchMode; just be very sure what you do![Export("application:didRegisterForRemoteNotificationsWithDeviceToken:")]
[BindingImpl(BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)]
public void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
IFirebasePushNotification.Current.RegisteredForRemoteNotifications(deviceToken);
}
[Export("application:didFailToRegisterForRemoteNotificationsWithError:")]
[BindingImpl(BindingImplOptions.GeneratedCode | BindingImplOptions.Optimizable)]
public void FailedToRegisterForRemoteNotifications(UIApplication application, NSError error)
{
IFirebasePushNotification.Current.FailedToRegisterForRemoteNotifications(error);
}
[Export("application:didReceiveRemoteNotification:fetchCompletionHandler:")]
public void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{
IFirebasePushNotification.Current.DidReceiveRemoteNotification(userInfo);
completionHandler(UIBackgroundFetchResult.NewData);
}
IFirebasePushNotification is the main interface which handles most of the desired Firebase push notification features. This interface is injectable via dependency injection or accessible as a static singleton instance IFirebasePushNotification.Current. We strongly encourage you to use the dependency injection approach in order to keep your code testable.
The following lines of code demonstrate how the IFirebasePushNotification instance is injected in MainViewModel and assigned to a local field for later use:
public MainViewModel(
ILogger<MainViewModel> logger,
IFirebasePushNotification firebasePushNotification)
{
this.logger = logger;
this.firebasePushNotification = firebasePushNotification;
}
Before we can receive any notification we need to make sure the user has given consent to receive notifications. INotificationPermissions is the service you can use to check the current authorization status or ask for notification permission.
You can either inject INotificationPermissions into your view models or access it via the the static singleton instance INotificationPermissions.Current.
this.AuthorizationStatus = await this.notificationPermissions.GetAuthorizationStatusAsync();
await this.notificationPermissions.RequestPermissionAsync();
Notification permissions are handled by the underlying operating system (iOS, Android). This library just wraps the platform-specific methods and provides a uniform API for them.
The main goal of a push notification client library is to receive notification messages. This library provides a set of classic .NET events to inform your code about incoming push notifications.
Before any notification event is received, we have to inform the Firebase client library, that we're ready to receive notifications.
RegisterForPushNotificationsAsync registers our app with the Firebase push notification backend and receives a token. This token is used by your own server/backend to send push notifications directly to this particular app instance.
The token may change after some time. It is not controllable by this library if/when the token is going to be updated. The TokenRefreshed event will be fired whenever a new token is available.
See Token property and TokenRefreshed event provided by IFirebasePushNotification for more info.
await this.firebasePushNotification.RegisterForPushNotificationsAsync();
If we want to turn off any incoming notifications, we can unregister from push notifications. The Token can no longer be used to send push notifications to.
await this.firebasePushNotification.UnregisterForPushNotificationsAsync();
Following .NET events can be subscribed:
| Events | Description |
|---|---|
TokenRefreshed |
Is raised whenever the Firebase push notification token is updated. You'll need to inform your server/backend whenever a new push notification token is available. |
NotificationReceived |
Is raised when a new push notification message was received. |
NotificationOpened |
Is raised when a received push notification is opened. This means, a user taps on a received notification listed in the notification center provided by the OS. |
NotificationAction |
Is raised when the user taps a notification action. Notification actions allow users to make simple decisions when a notification is received, e.g. "Do you like to take your medicine?" could be answered with "Take medicine" and "Skip medicine". |
NotificationDeleted |
Is raised when the user deletes a received notification. |
The most common way of sending push notifications is by targeting notification message directly to push tokens. Firebase allows to send push notifications to groups of devices, so-called topics. If a user subscribes to a topic, e.g. "weather_updates" you can send push notifications to this topic instead of a list of push tokens.
Use method SubscribeTopic with the name of the topic.
this.firebasePushNotification.SubscribeTopic("weather_updates");
Important:
RegisterForPushNotificationsAsync before you subscribe to topics."weather_updates" will not receive messages targeted to topic "Weather_Updates".Use the Firebase Admin SDK (or any other HTTP client) to send a push notification targeting subscribers of the "weather_updates" topic:
HTTP POST https://fcm.googleapis.com/v1/projects/{{project_id}}/messages:send
{
"message": {
"topic": "weather_updates",
"notification": {
"title": "Weather Update",
"body": "Pleasant with clouds and sun"
},
"data": {
"sunrise": "1684926645",
"sunset": "1684977332",
"temp": "292.55",
"feels_like": "292.87"
}
}
}
Notification actions are special buttons which allow for immediate response to a particular notification. A list of NotificationActions is consolidated within a NotificationCategory.
The following example demonstrates the registration of a notification category with identifier "medication_intake" and two actions "Take medicine" and "Skip medicine":
var categories = new[]
{
new NotificationCategory("medication_intake", new[]
{
new NotificationAction("take_medication", "Take medicine", NotificationActionType.Foreground),
new NotificationAction("skip_medication", "Skip medicine", NotificationActionType.Foreground),
})
};
Notification categories are usually registered at app startup time using the following method call:
IFirebasePushNotification.Current.RegisterNotificationCategories(categories);
Subscribe the event IFirebasePushNotification.NotificationAction to get notified if a user presses one of the notification action buttons.
The delivered event args FirebasePushNotificationResponseEventArgs will let you know which action was pressed.
Use the Firebase Admin SDK (or any other HTTP client) to send a push notification with:
HTTP POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
{
"message": {
"token": "XXXXXXXXXX",
"notification": {
"title": "Medication Intake",
"body": "Do you want to take your medicine?"
},
"data": {
"priority": "high"
},
"android": {
"notification": {
"click_action": "medication_intake"
}
},
"apns": {
"payload": {
"aps": {
"category": "medication_intake"
}
}
}
}
}
If everything works fine, the mobile device with the given token displays the notification action as follows:
There are a lot of features in this library that can be controlled via specific data flags. The most common scenarios are end-to-end tested using postman calls. You can find an up-to-date postman collection in this repository:
project_id and the fcm_token accordingly.to be documented
Your contribution is valuable! If you find a bug or want to propose a new feature, feel free to create a new issue here. Please use the predefined issue templates when submitting a new issue.
FCM messages, data format, concepts and options:
https://firebase.google.com/docs/cloud-messaging/concept-options
Set up a Firebase Cloud Messaging client app on Apple platforms:
Set up a Firebase Cloud Messaging client app on Android:
https://firebase.google.com/docs/cloud-messaging/android/client
Expandable notification on Android:
https://developer.android.com/develop/ui/views/notifications/expanded
Create bearer authentication tokens for Firebase Cloud Messaging (and other Google APIs):
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net7.0 net7.0 is compatible. net7.0-android net7.0-android was computed. net7.0-android33.0 net7.0-android33.0 is compatible. net7.0-ios net7.0-ios was computed. net7.0-ios16.1 net7.0-ios16.1 is compatible. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-android34.0 net8.0-android34.0 is compatible. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-ios17.0 net8.0-ios17.0 is compatible. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.0.40-pre | 303 | 4/11/2026 |
| 4.0.23-pre | 7,725 | 6/17/2025 |
| 4.0.20-pre | 250 | 6/16/2025 |
| 4.0.18-pre | 216 | 6/16/2025 |
| 4.0.1-pre | 467 | 6/12/2025 |
| 3.2.11 | 18,798 | 6/5/2025 |
| 3.2.8-pre | 255 | 5/26/2025 |
| 3.2.5-pre | 271 | 5/19/2025 |
| 3.2.2-pre | 327 | 5/13/2025 |
| 3.2.1-pre | 303 | 5/12/2025 |
| 3.2.0-pre | 240 | 5/1/2025 |
| 3.1.27 | 1,593 | 4/28/2025 |
| 3.1.20-pre | 345 | 4/7/2025 |
| 3.1.16-pre | 390 | 2/26/2025 |
| 3.1.14-pre | 216 | 2/20/2025 |
| 3.0.28 | 12,913 | 1/13/2025 |
| 1.1.0 | 474 | 3/12/2025 |
3.1
- Extend INotificationChannels to manage notification channel groups.
- Internal refactoring of INotificationChannels implementation.
- Removed properties IsActive and IsDefault from NotificationChannelRequest. Set the default notification channel via UseFirebasePushNotifications(o => o.Android.DefaultNotificationChannelId = ...).
- Configure initial list of notification channels via o.Android.NotificationChannels and notification groups via o.Android.NotificationChannelGroups.
3.0
- Update firebase-ios-sdk by replacing nuget package Xamarin.Firebase.iOS.CloudMessaging with AdamE.Firebase.iOS.CloudMessaging.
2.5
- Move static properties from Android's FirebasePushNotificationManager to FirebasePushNotificationAndroidOptions.
- iOS 18 workaround for duplicate notifications in foreground mode.
- iOS options to override default UNNotificationPresentationOptions for notifications received in foreground mode.
- Handle gcm.notification.click_action payload as click_action in Android.
2.4
- Refactor instanciation of IFirebasePushNotification.
- Refactor startup procedure of platform-specific services.
- Add singleton instance INotificationPermissions.Current.
2.3
- General bug fixes and code cleanup.
- Bug fixes in the area of topic subscriptions.
- IFirebasePushNotification.Current.
- Add singleton instance IFirebasePushNotification.Current and INotificationPermissions.Current.
2.2
- Complete refactoring of the original 1.x implementation.
- Simplified APIs, less static code, support for dependency injection.
1.0
- Initial release.