Softeq.NetKit.Services.PushNotifications component simplifies the process of bringing support for Push notificaitons to your project. It's build around Azure Notification Hub and supports the following push notification platforms:
- Android
- iOS
- Check-out master branch from repository;
- Add a reference to Softeq.NetKit.Services.PushNotifications into target project.
Add Notification Hub settings to your appsettings.json
file:
"Notifications": {
"Push": {
"NotificationHub": {
"ConnectionString": "CONN_STR",
"HubName": "HUB_NAME"
}
}
}
Softeq.NetKit.Services.PushNotifications comes with Autofac Module to register its dependencies.
If Autofac is used on your project, add PushNotificationsModule
to the container:
builder.RegisterModule(new Softeq.NetKit.Services.PushNotifications.PushNotificationsModule());
If different IoC container is used or manual registration is required, the following registrations need to be performed:
- Set up and register NotificationHub configuration
AzureNotificationHubConfiguration
in your DI container
builder.Register(context =>
{
var config = context.Resolve<IConfiguration>();
return new AzureNotificationHubConfiguration(
config["Notifications:Push:NotificationHub:ConnectionString"],
config["Notifications:Push:NotificationHub:HubName"]);
}).SingleInstance();
- Register
IPushNotificationSubscriber
implementation
builder.RegisterType<AzureNotificationHubSender>().As<IPushNotificationSubscriber>();
- Register
IPushNotificationSender
implementation
builder.RegisterType<AzureNotificationHubSubscriber>().As<IPushNotificationSender>();
Softeq.NetKit.Services.PushNotifications comes with PushNotificationMessage
that represents a simple push message with the following structure;
public class PushNotificationMessage
{
[JsonIgnore]
public int NotificationType { get; set; }
[JsonIgnore]
public string Title { get; set; } = string.Empty;
[JsonIgnore]
public string Body { get; set; } = string.Empty;
[JsonIgnore]
public int Badge { get; set; } = 0;
[JsonIgnore]
public string Sound { get; set; } = "default";
public virtual string GetData()
{
return JsonConvert.SerializeObject(this);
}
}
If an additional properties are required to be sent with push, create custom push message class and inherit from PushNotificationMessage
public class ArticleLikedPush : PushNotificationMessage
{
public ArticleLikedPush()
{
Title = "Article liked.";
Body = "Someone liked your article. Check it out!";
NotificationType = (int) PushNotificationType.ArticleLiked;
}
[JsonProperty("articleId")]
public Guid ArticleId { get; set; }
[JsonProperty("newsHeader")]
public string NewsHeader { get; set; }
}
Project supports client-side message localization by providing platform-specific localization keys:
- For iOS -
loc-key
\loc-args
andtitle-loc-key
\title-loc-args
- For Android -
body_loc_key
\body_loc_args
andtitle_loc_key
\title_loc_args
To enable client-size localization for a particular message, BodyLocalizationKey
and TitleLocalizationKey
properties need to be initialized with valid resource names, available in client:
public class ArticleLikedPush : PushNotificationMessage
{
private static string _bodyLocalizationKey = "article_Liked_body";
private static string _titleLocalizationKey = "article_Liked_title";
public ArticleLikedPush()
{
BodyLocalizationKey = _bodyLocalizationKey;
TitleLocalizationKey = _titleLocalizationKey;
NotificationType = (int) PushNotificationType.ArticleLiked;
}
[JsonProperty("articleId")]
public Guid ArticleId { get; set; }
[JsonProperty("newsHeader")]
public string NewsHeader { get; set; }
[JsonProperty("userIdWhoLikedArticle")]
public string UserIdWhoLikedArticle { get; set; }
[JsonIgnore]
[LocalizationParameter(LocalizationTarget.Title, 1)]
[LocalizationParameter(LocalizationTarget.Body, 1)]
public string UserNameWhoLikedArticle { get; set; }
}
Inject IPushNotificationSubscriber
into your service to subscribe or unsubscribe user device from push notifications.
Inject IPushNotificationSender
into your service to send push notifications to registered devices.
This project is maintained by Softeq Development Corp.
We specialize in .NET core applications.
We welcome any contributions.
The Query Utils project is available for free use, as described by the LICENSE (MIT).