Skip to content
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}

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 Cloud Messaging can be used as a unified provider across both platforms.

NuGet: Shiny.Push.FirebaseMessaging

// Auto-config from google-services.json
services.AddPushFirebaseMessaging<MyPushDelegate>();

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();
}
}

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] MyPushProvider

If you prefer explicit registration without the source generator:

services.AddSingleton<MyPushProvider>();
services.AddSingleton<IPushProvider>(sp => sp.GetRequiredService<MyPushProvider>());