Client v5: BLE, BLE Hosting, HTTP, Jobs - Linux, MacOS, & Blazor Support! Full AOT, RX on BLE only & MANY other features! Power up!
Native
Changed files
- MyApp/
Delegates/MyPushDelegate.cs
MyPushDelegate.cs
1using Shiny.Push;23namespace MyApp.Delegates;45public partial class MyPushDelegate : PushDelegate6{7 public override async Task OnEntry(PushNotification notification)8 {9 }1011 public override async Task OnReceived(PushNotification notification)12 {13 }1415 public override async Task OnNewToken(string token)16 {17 }1819 public override async Task OnUnRegistered(string token)20 {21 }22}Overview
Section titled “Overview”The default provider uses Firebase on Android and APNs on iOS directly. No additional NuGet package is needed beyond Shiny.Push.
services.AddPush<MyPushDelegate>();Firebase Messaging
Section titled “Firebase Messaging”Firebase Cloud Messaging can be used as a unified provider across both platforms.
NuGet: Shiny.Push.FirebaseMessaging
// Auto-config from google-services.jsonservices.AddPushFirebaseMessaging<MyPushDelegate>();Custom Provider
Section titled “Custom Provider”Create your own push provider by implementing IPushProvider.
public class MyPushProvider : IPushProvider{#if ANDROID public async Task<string> Register(string nativeToken) { // Register with your backend, return your provider token var providerToken = await MyBackend.RegisterToken(nativeToken); return providerToken; }#elif IOS public async Task<string> Register(NSData nativeToken) { var tokenString = nativeToken.ToPushTokenString(); var providerToken = await MyBackend.RegisterToken(tokenString); return providerToken; }#elif WINDOWS public async Task<string> Register(string nativeToken) { // nativeToken is the WNS channel URI var providerToken = await MyBackend.RegisterToken(nativeToken); return providerToken; }#endif
public async Task UnRegister() { await MyBackend.UnregisterToken(); }}Registration
Section titled “Registration”Tag the provider with [Singleton] from Shiny.Extensions.DependencyInjection (or register it manually for every interface) and call AddGeneratedServices():
services.AddPush<MyPushDelegate>();services.AddGeneratedServices(); // emits the registration for [Singleton] MyPushProviderIf you prefer explicit registration without the source generator:
services.AddSingleton<MyPushProvider>();services.AddSingleton<IPushProvider>(sp => sp.GetRequiredService<MyPushProvider>());