Document DB v12 - Improved Interceptors with Soft Delete Integration, AI protections, & Admin UI with Aspire Integration!How!?
Push Notifications Releases
5.1.0 - TBD
Section titled “5.1.0 - TBD”FixiOS
FCM registration no longer hangs. The Core and Cloud Messaging Swift shims shipped in separate xcframeworks, and because the Firebase SPM products are statically linked, each framework embedded its own copy of FirebaseCore - so
FirebaseApp.configure() configured one FIRApp while the token request read a second, unconfigured one. IPushManager.RequestAccess() awaited a native completion block that never fired: no token, no exception, no IPushDelegate.OnNewToken, and only an objc[...]: Class FIRApp is implemented in both ... warning at startup as a clue. All three shims now build into a single ShinyFirebase framework with one embedded FirebaseCore. Thanks to @ThomasManson for the diagnosisBREAKINGiOS
The
Shiny.Firebase.Analytics.iOS.Binding and Shiny.Firebase.Messaging.iOS.Binding packages are replaced by a single Shiny.Firebase.iOS.Binding. Shiny.Push.FirebaseMessaging picks it up automatically - no change is needed unless you referenced a binding package directly, in which case swap the reference and change the namespace to Shiny.Firebase.iOS.Binding. The managed type names (FirebaseApplication, FirebaseMessaging, FirebaseAnalytics) and their members are unchangedFixiOS
FirebaseAnalytics.SetUserProperty was bound to the wrong Objective-C selector and would have thrown unrecognized selector at runtimeEnhancementiOS
The native messaging shim now fails fast instead of hanging - when Firebase has not been configured,
RequestAccess() throws Firebase has not been configured rather than awaiting a completion block that will never fire5.0.2 - July 26, 2026
Section titled “5.0.2 - July 26, 2026”Fix
Shiny.Push.FirebaseMessaging is now built with IsAotCompatible and the generic AddPushFirebaseMessaging<TPushDelegate> overload forwards the DynamicallyAccessedMembers annotation its registration requires. Without it the trimmer was free to remove the delegate’s constructor and interface map, so a trimmed app could fail to resolve IPushDelegate at startup with no build-time warning.5.0.1 - June 28, 2026
Section titled “5.0.1 - June 28, 2026”Fix
Shiny.Push.AzureNotificationHubs no longer throws No JsonTypeInfo registered for type 'System.String[]' when reading or writing RegisteredTags - the package now ships a source-generated JSON context registering the string[]/List<string> used by its key/value store persistence.5.0.0 - June 19, 2026
Section titled “5.0.0 - June 19, 2026”Feature
macOS support added via APNs -
Shiny.PushFeature
Windows support added via Windows Notification Service (WNS) -
Shiny.PushFeature
Blazor WebAssembly (Web) support added via the Web Push (VAPID) standard - new
Shiny.Push.Blazor package. Requires HTTPS, a VAPID key pair, and a service worker; Safari requires the user to install the PWA before subscribingFeatureiOS
Firebase Cloud Messaging on iOS via native bindings - new
Shiny.Push.FirebaseMessaging package. Exchanges the APNs token for an FCM registration token and maps tags to FCM topic subscriptions through IPushTagSupport; Android continues to use the built-in Shiny.Push Firebase support4.0.0 - March 26, 2026
Section titled “4.0.0 - March 26, 2026”EnhancementiOS
You can now IFDEF IOS to get an AppleNotification that contains the raw NSDictionary
Enhancement
Azure Notification Hubs now allow template registrations
3.3.3 - April 8, 2024
Section titled “3.3.3 - April 8, 2024”-
FixAndroidOnEntry intent action was not being defaulted if not set
-
EnhancementAndroidOnReceived now sends an AndroidPushNotification which gives you access to the native message as well as helper methods to send the notification if in the foreground
public class MyPushDelegate : IPushDelegate{ public void OnReceived(PushNotification notification) {#if ANDROID var android = (AndroidPushNotification)notification; // android.NativeMessage; var builder = android.CreateNotificationBuilder(); android.SendNotification(1, builder);#endif }}3.3.2 - March 29, 2024
Section titled “3.3.2 - March 29, 2024”-
EnhancementAndroidAbility to set a custom push intent instead of the Shiny static string
-
EnhancementEnsure OnRegistered is always called
3.3.1 - March 26, 2024
Section titled “3.3.1 - March 26, 2024”-
FixAndroidIPushDelegate.OnRegistered was being called twice during IPushManager.RequestAccess calls
-
FixAndroidIPushDelegate.OnRegistered was not passing provider token
3.3.0 - March 18, 2024
Section titled “3.3.0 - March 18, 2024”-
BREAKINGEnhancementPushDelegate now contains an OnUnRegistered event
-
BREAKINGEnhancementPushDelegate.OnTokenRefreshed has been renamed to OnNewToken to be more concise as to its purpose
-
EnhancementAndroidFirebase will not attempt to initialize if it done by other libraries like Firebase Crashlytics
-
EnhancementMicrosoft.Azure.NotificationHubs updated to 4.2.0 for FCMv1 parameter which is set as default now
-
EnhancementIPushManager now access NativeRegistrationToken which is useful for debugging purposes
3.2.4 - February 3, 2024
Section titled “3.2.4 - February 3, 2024”-
EnhancementiOSIPushManager.RequestAccess now return AccessState.Unsupported on the simulator instead of letting an exception be thrown
-
EnhancementOld extensions for tags added back to IPushManager
3.2.3 - January 18, 2024
Section titled “3.2.3 - January 18, 2024”-
EnhancementAndroidAbility to configure intent action during registration
3.2.2 - January 3, 2024
Section titled “3.2.2 - January 3, 2024”3.1.0 - October 26, 2023
Section titled “3.1.0 - October 26, 2023”EnhancementiOS
IPushDelegate can now add IApplePushDelegate on Apple platforms to manage certain specific return values (UIBackgroundFetchResult & UIPresentationOptions) - Example below
FixAndroid
OnEntry now responds to OnCreate for new activities
#if IOSusing UIKit;using UserNotifications;#endif
public partial class MyPushDelegate : Shiny.Push.IPushDelegate{ // .. left empty for brevity}
#if IOSpublic partial class MyPushDelegate : Shiny.Push.IApplePushDelegate{ // this is executed only in the foreground public UNNotificationPresentationOptions? GetPresentationOptions(PushNotification notification) { return UNNotificationPresentationOptions.Alert; }
// executed for all content-available notifications public UIBackgroundFetchResult? GetFetchResult(PushNotification notification) { return UIBackgroundFetchResult.NewData; }}#endif3.0.1 - September 19, 2023
Section titled “3.0.1 - September 19, 2023”FixiOS
Provider push token is now returned by PushManager.RequestAccess instead of native token
3.0.0 - September 5, 2023
Section titled “3.0.0 - September 5, 2023”EnhancementAndroid
Android 13 Support for new POST_NOTIFICATION permissions
Enhancement
Now works on new xplat lifecycle management from Core
Enhancement
Internally rewritten to make architecture easier going forward - firebase, azure, etc all become plugins on top of native instead of full implementations


