A sender for Apple Push Notification(APN) and Firebase Cloud Message(FCM).
Reference: CorePush
Register in Startup.cs ConfigureServices, for example :
services.AddApnConfig(new ApnConfig("{P8-PrivateKey}", "{P8-PrivateKeyId}", "{TeamId}", "{Topic}", ApnServerType.Development));
services.AddKnstNotify();
P8-PrivateKey(without newline) :
Create an apn payload : ApnPayload
ApnPayload apnPayload = new ApnPayload();
apnPayload.DeviceToken = "{deviceToken}";
apnPayload.Aps.Badge = 1;
apnPayload.Aps.Alert.Title = "title";
apnPayload.Aps.Alert.Subtitle = "subtitle";
apnPayload.Aps.Alert.Body = "body";
apnPayload.Aps.Sound = "default";
apnPayload.Aps.Add("Key1", "Value1");
apnPayload.Aps["Key2"] = "Value2";
Send apn payload :
IApnSender apnSender = provider.GetRequiredService<IApnSender>();
ApnResult apnResult = await apnSender.SendAsync(apnPayload);
Register in Startup.cs ConfigureServices, for example :
services.AddFcmConfig(new FcmConfig("{ServerKey}", HostEnvironment.IsDevelopment()));
// or
services.AddFcmConfig(new FcmConfig("{ServerKey}", "{SenderId}", HostEnvironment.IsDevelopment()));
services.AddKnstNotify();
Create an fcm payload : FcmPayload
FcmPayload fcmPayload = new FcmPayload()
{
Data = new Dictionary<string, object>(),
Notification = new Dictionary<string, object>()
};
fcmPayload.To = "{deviceToken}";
fcmPayload.Notification.Add("title", "title");
fcmPayload.Notification.Add("body", "body");
fcmPayload.Data.Add("Key1", "Value1");
fcmPayload.Data["Key2"] = "Value2";
Send fcm payload :
IFcmSender fcmSender = provider.GetRequiredService<IFcmSender>();
FcmResult fcmResult = await fcmSender.SendAsync(fcmPayload);
100 tokens for example :
IEnumerable<string> tokens = new string[100];
IEnumerable<ApnPayload> apnPayloads = tokens.Select(token => {
ApnPayload apnPayload = new ApnPayload();
apnPayload.DeviceToken = token;
apnPayload.Aps.Badge = 1;
apnPayload.Aps.Alert.Title = "title";
apnPayload.Aps.Alert.Subtitle = "subtitle";
apnPayload.Aps.Alert.Body = "body";
apnPayload.Aps.Sound = "default";
apnPayload.Aps.Add("Key1", "Value1");
apnPayload.Aps["Key2"] = "Value2";
return apnPayload;
});
IEnumerable<ApnResult> apnResults = await apnSender.SendAsync(apnPayloads);
IEnumerable<FcmPayload> fcmPayloads = tokens.Select(token =>
{
FcmPayload fcmPayload = new FcmPayload()
{
Data = new Dictionary<string, object>(),
Notification = new Dictionary<string, object>()
};
fcmPayload.To = token;
fcmPayload.Notification.Add("title", "title");
fcmPayload.Notification.Add("body", "body");
fcmPayload.Data.Add("Key1", "Value1");
fcmPayload.Data["Key2"] = "Value2";
return fcmPayload;
});
IEnumerable<FcmResult> fcmResults = await fcmSender.SendAsync(fcmPayloads);
// In Startup.cs ConfigureServices
services.AddApnConfig(new ApnConfig("{P8-PrivateKey-1}", "{P8-PrivateKeyId-1}", "{TeamId-1}", "{Topic-1}", HostEnvironment.IsDevelopment() ? ApnServerType.Development : ApnServerType.Production){ Name = "Config1" });
services.AddApnConfig(new ApnConfig("{P8-PrivateKey-2}", "{P8-PrivateKeyId-2}", "{TeamId-2}", "{Topic-2}", HostEnvironment.IsDevelopment() ? ApnServerType.Development : ApnServerType.Production){ Name = "Config2" });
services.AddKnstNotify();
// Usage
IEnumerable<ApnResult> apnResults = await apnSender.SendAsync(apnPayloads, sender => sender.Configs.Single(x => x.Name == "Config1"));
// In Startup.cs ConfigureServices
services.AddFcmConfig(new FcmConfig("{ServerKey-1}"){ Name = "Config1" }, HostEnvironment.IsDevelopment());
services.AddFcmConfig(new FcmConfig("{ServerKey-2}"){ Name = "Config2" }, HostEnvironment.IsDevelopment());
services.AddKnstNotify();
// Usage
IEnumerable<FcmResult> fcmResults = await fcmSender.SendAsync(fcmPayloads, sender => sender.Configs.Single(x => x.Name == "Config1"));