From 6b8e6cf657548eab89c7d2b8073bc9c238d033d8 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 13:36:20 +0200 Subject: [PATCH 01/22] Remove target framework net7.0 + add target framework net9.0 --- .../Plugin.FirebasePushNotifications.csproj | 29 +++++++++---------- Samples/MauiSampleApp/MauiSampleApp.csproj | 13 ++++----- .../Platforms/Android/AndroidManifest.xml | 4 --- ...gin.FirebasePushNotifications.Tests.csproj | 4 +-- azure-pipelines.yml | 4 +-- 5 files changed, 23 insertions(+), 31 deletions(-) diff --git a/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj b/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj index 95f354e..e67fd53 100644 --- a/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj +++ b/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj @@ -1,18 +1,19 @@  - net7.0;net7.0-android33.0;net7.0-ios;net8.0;net8.0-android34.0;net8.0-ios17.0 + net8.0;net8.0-android34.0;net8.0-ios17.0;net9.0;net9.0-android35.0;net9.0-ios18.0 Library true 8.0.3 - 7.0.49 + 9.0.0 true enable disable true True - 12.0 + 12.0 + 12.2 24.0 true @@ -45,6 +46,8 @@ - Synchronized notification handling behavior between Android and iOS. - Renamed topic methods to follow the Async pattern: SubscribeToTopicAsync, UnsubscribeFromTopicAsync, etc. - Use AddOnCompleteListener for asynchronous tasks in Android. +- Add target framework net9.0, net9.0-android and net9.0-ios. +- Remove target framework net7.0, net7.0-android and net7.0-ios. - Bug fixes and refactorings. 3.2 @@ -97,27 +100,21 @@ - - - - - + + + + + - - - - - - - + - + diff --git a/Samples/MauiSampleApp/MauiSampleApp.csproj b/Samples/MauiSampleApp/MauiSampleApp.csproj index 4063ce1..5d3ea20 100644 --- a/Samples/MauiSampleApp/MauiSampleApp.csproj +++ b/Samples/MauiSampleApp/MauiSampleApp.csproj @@ -1,11 +1,11 @@  - net8.0;net8.0-android;net8.0-ios + net9.0;net9.0-android;net9.0-ios Exe MauiSampleApp true - 8.0.100 + 9.0.80 true enable disable @@ -19,10 +19,10 @@ da8d1bd2-3ced-4171-b0da-3f1a7806e5af - 1.0 + 1.0.0 1 - 12.0 + 12.2 24.0 @@ -82,7 +82,7 @@ None apk false - true + false SdkOnly @@ -136,8 +136,7 @@ - - + diff --git a/Samples/MauiSampleApp/Platforms/Android/AndroidManifest.xml b/Samples/MauiSampleApp/Platforms/Android/AndroidManifest.xml index 9970642..9ce82b1 100644 --- a/Samples/MauiSampleApp/Platforms/Android/AndroidManifest.xml +++ b/Samples/MauiSampleApp/Platforms/Android/AndroidManifest.xml @@ -24,10 +24,6 @@ - - - - diff --git a/Tests/Plugin.FirebasePushNotifications.Tests/Plugin.FirebasePushNotifications.Tests.csproj b/Tests/Plugin.FirebasePushNotifications.Tests/Plugin.FirebasePushNotifications.Tests.csproj index 151cd88..c11a2ab 100644 --- a/Tests/Plugin.FirebasePushNotifications.Tests/Plugin.FirebasePushNotifications.Tests.csproj +++ b/Tests/Plugin.FirebasePushNotifications.Tests/Plugin.FirebasePushNotifications.Tests.csproj @@ -1,7 +1,7 @@  - net8.0 + net9.0 enable disable false @@ -19,7 +19,7 @@ - + all diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2c98164..0fe2f37 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -68,9 +68,9 @@ steps: DisableTelemetry: true - task: UseDotNet@2 - displayName: 'Use .NET 8.x' + displayName: 'Use .NET 9.x' inputs: - version: 8.x + version: 9.x - task: Bash@3 displayName: Install .NET MAUI From a39c38249d28b9154f9d75ac5619bf57ce4f86bd Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 14:00:38 +0200 Subject: [PATCH 02/22] Update community toolkit in sample app --- Samples/MauiSampleApp/MauiSampleApp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Samples/MauiSampleApp/MauiSampleApp.csproj b/Samples/MauiSampleApp/MauiSampleApp.csproj index 5d3ea20..4f169d7 100644 --- a/Samples/MauiSampleApp/MauiSampleApp.csproj +++ b/Samples/MauiSampleApp/MauiSampleApp.csproj @@ -134,7 +134,7 @@ - + From 1a9210c75a148d3918454a54b5cef7bcfe5bfb9d Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 14:49:54 +0200 Subject: [PATCH 03/22] Replace arrow in log messages --- .../Platforms/Android/FirebasePushNotificationManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugin.FirebasePushNotifications/Platforms/Android/FirebasePushNotificationManager.cs b/Plugin.FirebasePushNotifications/Platforms/Android/FirebasePushNotificationManager.cs index 4fb6acb..c8f2c97 100644 --- a/Plugin.FirebasePushNotifications/Platforms/Android/FirebasePushNotificationManager.cs +++ b/Plugin.FirebasePushNotifications/Platforms/Android/FirebasePushNotificationManager.cs @@ -187,7 +187,7 @@ public void ProcessIntent(Activity activity, Intent intent) if (!intent.GetBooleanExtra(intentAlreadyHandledKey, false)) { intent.PutExtra(intentAlreadyHandledKey, true); - this.logger.LogDebug($"ProcessIntent: {intentAlreadyHandledKey} not present --> Process notification"); + this.logger.LogDebug($"ProcessIntent: {intentAlreadyHandledKey} not present → Process notification"); if (extras.TryGetInt(Constants.ActionNotificationIdKey, out var notificationId)) { @@ -216,7 +216,7 @@ public void ProcessIntent(Activity activity, Intent intent) } else { - this.logger.LogDebug($"ProcessIntent: {intentAlreadyHandledKey} is present --> Notification already processed"); + this.logger.LogDebug($"ProcessIntent: {intentAlreadyHandledKey} is present → Notification already processed"); } } } From 5ad809c57d4a2e89fa2689b17ac03232b56642d0 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 14:50:33 +0200 Subject: [PATCH 04/22] Update nugets in test project --- .../Plugin.FirebasePushNotifications.Tests.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Tests/Plugin.FirebasePushNotifications.Tests/Plugin.FirebasePushNotifications.Tests.csproj b/Tests/Plugin.FirebasePushNotifications.Tests/Plugin.FirebasePushNotifications.Tests.csproj index c11a2ab..492b3ab 100644 --- a/Tests/Plugin.FirebasePushNotifications.Tests/Plugin.FirebasePushNotifications.Tests.csproj +++ b/Tests/Plugin.FirebasePushNotifications.Tests/Plugin.FirebasePushNotifications.Tests.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -20,8 +20,8 @@ - - + + all runtime; build; native; contentfiles; analyzers From 942e94efffa01d831c80c6eb88a711b431ef7476 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 14:51:58 +0200 Subject: [PATCH 05/22] GenerateDocumentationFile only in release mode --- .../Plugin.FirebasePushNotifications.csproj | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj b/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj index e67fd53..43186d0 100644 --- a/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj +++ b/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj @@ -10,7 +10,6 @@ enable disable true - True 12.0 12.2 @@ -97,7 +96,11 @@ - + + true + + + From b844f38e3d61b3a71c187c9f7a62b7a524bdca22 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 14:53:45 +0200 Subject: [PATCH 06/22] Add Android proguard and trimmer config --- .../Platforms/Android/ILLink.Descriptors.xml | 3 +++ .../Platforms/Android/proguard.cfg | 6 ++++++ .../Plugin.FirebasePushNotifications.csproj | 9 +++++++++ 3 files changed, 18 insertions(+) create mode 100644 Plugin.FirebasePushNotifications/Platforms/Android/ILLink.Descriptors.xml create mode 100644 Plugin.FirebasePushNotifications/Platforms/Android/proguard.cfg diff --git a/Plugin.FirebasePushNotifications/Platforms/Android/ILLink.Descriptors.xml b/Plugin.FirebasePushNotifications/Platforms/Android/ILLink.Descriptors.xml new file mode 100644 index 0000000..5a86e3d --- /dev/null +++ b/Plugin.FirebasePushNotifications/Platforms/Android/ILLink.Descriptors.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Plugin.FirebasePushNotifications/Platforms/Android/proguard.cfg b/Plugin.FirebasePushNotifications/Platforms/Android/proguard.cfg new file mode 100644 index 0000000..04a0f10 --- /dev/null +++ b/Plugin.FirebasePushNotifications/Platforms/Android/proguard.cfg @@ -0,0 +1,6 @@ +-dontwarn com.google.android.gms.** +-keep class com.google.android.gms.** { *; } +-keep class com.google.firebase.** { *; } +-keep class androidx.startup.AppInitializer +-keep class androidx.startup.InitializationProvider +-keep class androidx.startup.Initializer \ No newline at end of file diff --git a/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj b/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj index 43186d0..3cb1586 100644 --- a/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj +++ b/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj @@ -120,4 +120,13 @@ + + + + + + + + + From d17cae4c2d5d34fea6b57c9b7734c57f8f88a667 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 15:04:02 +0200 Subject: [PATCH 07/22] Use .net 8 and .net 9 --- azure-pipelines.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0fe2f37..fc9585e 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -68,9 +68,14 @@ steps: DisableTelemetry: true - task: UseDotNet@2 - displayName: 'Use .NET 9.x' + displayName: 'Use .NET 8' inputs: - version: 9.x + version: 8.0.x + +- task: UseDotNet@2 + displayName: 'Use .NET 9' + inputs: + version: 9.0.x - task: Bash@3 displayName: Install .NET MAUI From 003d5bc92cf4d1679184301d934848c4633be8a1 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 15:09:18 +0200 Subject: [PATCH 08/22] Publish snupkg --- .../Plugin.FirebasePushNotifications.csproj | 8 ++++++-- azure-pipelines.yml | 6 ++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj b/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj index 3cb1586..e27743f 100644 --- a/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj +++ b/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj @@ -32,11 +32,13 @@ firebase;push;notification;notifications logo.png LICENSE + README.md https://github.com/thomasgalliker/Plugin.FirebasePushNotifications git https://github.com/thomasgalliker/Plugin.FirebasePushNotifications superdev GmbH false + Copyright $([System.DateTime]::Now.ToString(`yyyy`)) © Thomas Galliker 4.0 - Improved notification channel handling during app startup. - Data-only notifications are no longer displayed in the notification tray. @@ -86,8 +88,10 @@ 1.0 - Initial release. - Copyright $([System.DateTime]::Now.ToString(`yyyy`)) © Thomas Galliker - README.md + true + snupkg + true + true diff --git a/azure-pipelines.yml b/azure-pipelines.yml index fc9585e..eee0312 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -163,11 +163,9 @@ steps: displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)' inputs: SourceFolder: '$(system.defaultworkingdirectory)' - Contents: | - **\bin\$(BuildConfiguration)\** - **\bin\*.nupkg - + **\bin\*.nupkg + **\bin\*.snupkg TargetFolder: '$(Build.ArtifactStagingDirectory)' - task: PublishCodeCoverageResults@2 From 2da03414c3063de47525170586f800643e47c72a Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 15:28:04 +0200 Subject: [PATCH 09/22] Remove 32 bit runtime identifiers in android sample app --- Samples/MauiSampleApp/MauiSampleApp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Samples/MauiSampleApp/MauiSampleApp.csproj b/Samples/MauiSampleApp/MauiSampleApp.csproj index 4f169d7..e1012b4 100644 --- a/Samples/MauiSampleApp/MauiSampleApp.csproj +++ b/Samples/MauiSampleApp/MauiSampleApp.csproj @@ -90,7 +90,7 @@ aab true 1G - android-arm;android-arm64;android-x86;android-x64 + android-arm64;android-x64 true true From ce138972dd93c4c73d8fa639355d9b8ecbb5b825 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 15:44:35 +0200 Subject: [PATCH 10/22] Restore nugets with release configuration --- Samples/MauiSampleApp/MauiSampleApp.csproj | 2 +- azure-pipelines.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Samples/MauiSampleApp/MauiSampleApp.csproj b/Samples/MauiSampleApp/MauiSampleApp.csproj index e1012b4..4f169d7 100644 --- a/Samples/MauiSampleApp/MauiSampleApp.csproj +++ b/Samples/MauiSampleApp/MauiSampleApp.csproj @@ -90,7 +90,7 @@ aab true 1G - android-arm64;android-x64 + android-arm;android-arm64;android-x86;android-x64 true true diff --git a/azure-pipelines.yml b/azure-pipelines.yml index eee0312..d3d330d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -102,6 +102,7 @@ steps: inputs: command: restore projects: '$(solution)' + configuration: '$(buildConfiguration)' - task: DownloadSecureFile@1 name: GoogleServiceFileAndroid From bb5a834f4e2f1699880217356da9d11725e91da1 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 15:59:29 +0200 Subject: [PATCH 11/22] Use nuget restore arguments to add release configuration parameter --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d3d330d..0fa43be 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -102,7 +102,7 @@ steps: inputs: command: restore projects: '$(solution)' - configuration: '$(buildConfiguration)' + arguments: '--configuration $(buildConfiguration)' - task: DownloadSecureFile@1 name: GoogleServiceFileAndroid From f497f06616c44625a91b987e45b0740cdfe90c57 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 16:14:50 +0200 Subject: [PATCH 12/22] Try restoreArguments --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0fa43be..4823d5d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -102,7 +102,7 @@ steps: inputs: command: restore projects: '$(solution)' - arguments: '--configuration $(buildConfiguration)' + restoreArguments: '--configuration $(buildConfiguration)' - task: DownloadSecureFile@1 name: GoogleServiceFileAndroid From dbe986bc88ec5d04ecb3a20ffe743280c9b12208 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 16:22:51 +0200 Subject: [PATCH 13/22] Reformat argument --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4823d5d..9c9e731 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -102,7 +102,7 @@ steps: inputs: command: restore projects: '$(solution)' - restoreArguments: '--configuration $(buildConfiguration)' + restoreArguments: '/p:Configuration=$(buildConfiguration)' - task: DownloadSecureFile@1 name: GoogleServiceFileAndroid From 2691600d1dcd129badd70869e487507d5dfb44e3 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 16 Jun 2025 16:34:08 +0200 Subject: [PATCH 14/22] Cleanup --- azure-pipelines.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9c9e731..1cf9ccd 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -67,11 +67,6 @@ steps: FailOnWarning: false DisableTelemetry: true -- task: UseDotNet@2 - displayName: 'Use .NET 8' - inputs: - version: 8.0.x - - task: UseDotNet@2 displayName: 'Use .NET 9' inputs: From 674673f93a2d9e6c84681a67db6fa5c04504e0f5 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Tue, 17 Jun 2025 08:08:15 +0200 Subject: [PATCH 15/22] Extract release notes to text file --- Plugin.FirebasePushNotifications.sln | 1 + .../Plugin.FirebasePushNotifications.csproj | 50 +------------------ ReleaseNotes.txt | 48 ++++++++++++++++++ azure-pipelines.yml | 1 + 4 files changed, 51 insertions(+), 49 deletions(-) create mode 100644 ReleaseNotes.txt diff --git a/Plugin.FirebasePushNotifications.sln b/Plugin.FirebasePushNotifications.sln index 2df1b09..daa184b 100644 --- a/Plugin.FirebasePushNotifications.sln +++ b/Plugin.FirebasePushNotifications.sln @@ -10,6 +10,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution azure-pipelines.yml = azure-pipelines.yml LICENSE = LICENSE README.md = README.md + ReleaseNotes.txt = ReleaseNotes.txt EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Plugin.FirebasePushNotifications", "Plugin.FirebasePushNotifications\Plugin.FirebasePushNotifications.csproj", "{49F1F62D-5A20-49A6-B508-408BE32B0DC6}" diff --git a/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj b/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj index e27743f..2761199 100644 --- a/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj +++ b/Plugin.FirebasePushNotifications/Plugin.FirebasePushNotifications.csproj @@ -39,55 +39,7 @@ superdev GmbH false Copyright $([System.DateTime]::Now.ToString(`yyyy`)) © Thomas Galliker - 4.0 -- Improved notification channel handling during app startup. -- Data-only notifications are no longer displayed in the notification tray. -- NotificationBuilder support for Android API 26 and below (where no notification channels are available). -- OpenNotificationSettings now also works for Android API 26 and below. -- Synchronized notification handling behavior between Android and iOS. -- Renamed topic methods to follow the Async pattern: SubscribeToTopicAsync, UnsubscribeFromTopicAsync, etc. -- Use AddOnCompleteListener for asynchronous tasks in Android. -- Add target framework net9.0, net9.0-android and net9.0-ios. -- Remove target framework net7.0, net7.0-android and net7.0-ios. -- Bug fixes and refactorings. - -3.2 -- Improved default notification channel handling. -- Bug fixes and refactorings. - -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. - + $([System.IO.File]::ReadAllText("$(MSBuildProjectDirectory)/../ReleaseNotes.txt")) true snupkg true diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt new file mode 100644 index 0000000..5e66fb4 --- /dev/null +++ b/ReleaseNotes.txt @@ -0,0 +1,48 @@ +4.0 +- Improved notification channel handling during app startup. +- Data-only notifications are no longer displayed in the notification tray. +- NotificationBuilder support for Android API 26 and below (where no notification channels are available). +- OpenNotificationSettings now also works for Android API 26 and below. +- Synchronized notification handling behavior between Android and iOS. +- Renamed topic methods to follow the Async pattern: SubscribeToTopicAsync, UnsubscribeFromTopicAsync, etc. +- Use AddOnCompleteListener for asynchronous tasks in Android. +- Add target framework net9.0, net9.0-android and net9.0-ios. +- Remove target framework net7.0, net7.0-android and net7.0-ios. +- Bug fixes and refactorings. + +3.2 +- Improved default notification channel handling. +- Bug fixes and refactorings. + +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. \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 1cf9ccd..3903ea5 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -162,6 +162,7 @@ steps: Contents: | **\bin\*.nupkg **\bin\*.snupkg + **\ReleaseNotes.txt TargetFolder: '$(Build.ArtifactStagingDirectory)' - task: PublishCodeCoverageResults@2 From 39cc949a29f6d41b91abd089200ffcfa0ccc7497 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Wed, 18 Jun 2025 07:52:39 +0200 Subject: [PATCH 16/22] Replace communitytoolkit's EventToCommandBehavior with Superdev.Maui --- Samples/MauiSampleApp/MauiProgram.cs | 2 ++ Samples/MauiSampleApp/MauiSampleApp.csproj | 1 + Samples/MauiSampleApp/Views/MainPage.xaml | 4 ++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Samples/MauiSampleApp/MauiProgram.cs b/Samples/MauiSampleApp/MauiProgram.cs index 185adc9..289532e 100644 --- a/Samples/MauiSampleApp/MauiProgram.cs +++ b/Samples/MauiSampleApp/MauiProgram.cs @@ -7,6 +7,7 @@ using Plugin.FirebasePushNotifications.Model.Queues; using MauiSampleApp.Services.Logging; using NLog.Extensions.Logging; +using Superdev.Maui; #if ANDROID using Android.App; @@ -66,6 +67,7 @@ public static MauiApp CreateMauiApp() // o.iOS.iOS18Workaround.Enable = true; #endif }) + .UseSuperdevMaui() .ConfigureFonts(fonts => { fonts.AddFont("IBMPlexSans-Regular.ttf", "IBMPlexSans"); diff --git a/Samples/MauiSampleApp/MauiSampleApp.csproj b/Samples/MauiSampleApp/MauiSampleApp.csproj index 4f169d7..5c267a9 100644 --- a/Samples/MauiSampleApp/MauiSampleApp.csproj +++ b/Samples/MauiSampleApp/MauiSampleApp.csproj @@ -139,6 +139,7 @@ + diff --git a/Samples/MauiSampleApp/Views/MainPage.xaml b/Samples/MauiSampleApp/Views/MainPage.xaml index cf3f9e1..119d049 100644 --- a/Samples/MauiSampleApp/Views/MainPage.xaml +++ b/Samples/MauiSampleApp/Views/MainPage.xaml @@ -3,9 +3,9 @@ - From 2e83c6b7486e8a5fdab0942e7bf8bf70b2930833 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Wed, 18 Jun 2025 07:54:31 +0200 Subject: [PATCH 17/22] Update nugets in sample app --- Samples/MauiSampleApp/MauiSampleApp.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Samples/MauiSampleApp/MauiSampleApp.csproj b/Samples/MauiSampleApp/MauiSampleApp.csproj index 5c267a9..4b3485b 100644 --- a/Samples/MauiSampleApp/MauiSampleApp.csproj +++ b/Samples/MauiSampleApp/MauiSampleApp.csproj @@ -135,10 +135,10 @@ - + - - + + From 8527ec70a8e9cb23ffca3eeea2f2ff3094611ff5 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Tue, 1 Jul 2025 08:39:59 +0200 Subject: [PATCH 18/22] Update mauiversion in sample app --- Samples/MauiSampleApp/MauiSampleApp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Samples/MauiSampleApp/MauiSampleApp.csproj b/Samples/MauiSampleApp/MauiSampleApp.csproj index 4b3485b..5d52c14 100644 --- a/Samples/MauiSampleApp/MauiSampleApp.csproj +++ b/Samples/MauiSampleApp/MauiSampleApp.csproj @@ -5,7 +5,7 @@ Exe MauiSampleApp true - 9.0.80 + 9.0.81 true enable disable From ed0859fbdc22c2c01e3d5c0721180568ed35d83e Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Mon, 14 Jul 2025 13:04:34 +0200 Subject: [PATCH 19/22] Updates maui version in sample app --- Samples/MauiSampleApp/MauiSampleApp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Samples/MauiSampleApp/MauiSampleApp.csproj b/Samples/MauiSampleApp/MauiSampleApp.csproj index 5d52c14..f9b7492 100644 --- a/Samples/MauiSampleApp/MauiSampleApp.csproj +++ b/Samples/MauiSampleApp/MauiSampleApp.csproj @@ -5,7 +5,7 @@ Exe MauiSampleApp true - 9.0.81 + 9.0.82 true enable disable From f86789e798739807c4ba404907965b1f4ca8c9ae Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Fri, 18 Jul 2025 08:32:35 +0200 Subject: [PATCH 20/22] Update maui version in sample app --- Samples/MauiSampleApp/MauiSampleApp.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Samples/MauiSampleApp/MauiSampleApp.csproj b/Samples/MauiSampleApp/MauiSampleApp.csproj index f9b7492..7438294 100644 --- a/Samples/MauiSampleApp/MauiSampleApp.csproj +++ b/Samples/MauiSampleApp/MauiSampleApp.csproj @@ -5,7 +5,7 @@ Exe MauiSampleApp true - 9.0.82 + 9.0.90 true enable disable From 6b1ddce8e7fcbe03fc045a5510ba4ff72dae13b2 Mon Sep 17 00:00:00 2001 From: Thomas Galliker <> Date: Fri, 18 Jul 2025 08:33:03 +0200 Subject: [PATCH 21/22] Remove obsolete tfm in sample app --- Samples/MauiSampleApp/MauiSampleApp.csproj | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Samples/MauiSampleApp/MauiSampleApp.csproj b/Samples/MauiSampleApp/MauiSampleApp.csproj index 7438294..d50fe2e 100644 --- a/Samples/MauiSampleApp/MauiSampleApp.csproj +++ b/Samples/MauiSampleApp/MauiSampleApp.csproj @@ -1,7 +1,7 @@  - net9.0;net9.0-android;net9.0-ios + net9.0-android;net9.0-ios Exe MauiSampleApp true @@ -26,11 +26,6 @@ 24.0 - - - Library - - Date: Fri, 18 Jul 2025 08:33:32 +0200 Subject: [PATCH 22/22] Update nugets in sample app + test project --- Samples/MauiSampleApp/MauiSampleApp.csproj | 4 ++-- .../Plugin.FirebasePushNotifications.Tests.csproj | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Samples/MauiSampleApp/MauiSampleApp.csproj b/Samples/MauiSampleApp/MauiSampleApp.csproj index d50fe2e..63236bc 100644 --- a/Samples/MauiSampleApp/MauiSampleApp.csproj +++ b/Samples/MauiSampleApp/MauiSampleApp.csproj @@ -129,9 +129,9 @@ - + - + diff --git a/Tests/Plugin.FirebasePushNotifications.Tests/Plugin.FirebasePushNotifications.Tests.csproj b/Tests/Plugin.FirebasePushNotifications.Tests/Plugin.FirebasePushNotifications.Tests.csproj index 492b3ab..451990d 100644 --- a/Tests/Plugin.FirebasePushNotifications.Tests/Plugin.FirebasePushNotifications.Tests.csproj +++ b/Tests/Plugin.FirebasePushNotifications.Tests/Plugin.FirebasePushNotifications.Tests.csproj @@ -17,7 +17,7 @@ - +