Service Bus Notification Hubs are Service Bus entities that allow a user to send push notifications through third-party platforms, e.g. Windows Notification System (WNS), Apple Push Notification Service (APNs). Note: Support for Windows Phone’s Microsoft Push Notification Service (MPNS), and Google Cloud Messaging (GCM), targeting the Android platform, will be added soon. Every notification hub contains the credentials that are required to connect to these systems and push notifications to a specific app. Currently in Preview. Notification Hubs provide an extremely scalable, cross-platform, push notification infrastructure that enables you to efficiently route push notification messages to millions of mobile users and devices. Read ScottGu’s blog post for more detail.
You can create a Windows Store app and use a Notification Hub to send messages to the app. Follow the steps below. Fore more detail, read the instructions here.
- Creating a simple Windows Store App
- Create and Configure a Service Bus Notification Hub
- Connect the App
- Create a simple backend .NET application to send notifications
I created a sample app and was able to test the feature successfully. For your convenience, I included the sample code below. You will need to change the texts highlighted in yellow color.
Windows Store App
using Win8HubDemo.Common;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Microsoft.WindowsAzure.Messaging;
using System.Threading.Tasks;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
namespace Win8HubDemo
{
sealed partial class App : Application
{
NotificationHub notificationHub;
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
var cn = ConnectionString.CreateUsingSharedAccessSecretWithListenAccess("sb://zxhub-ns.servicebus.windows.net/","y{HXM{DD_I)0z4DI");
notificationHub = new NotificationHub("zxhub", cn);
this.InitializeComponent();
this.Suspending += OnSuspending;
}
async Task InitializeNotificationsAsync()
{
await notificationHub.RefreshRegistrationsAsync();
if (!await notificationHub.RegistrationExistsForApplicationAsync(
"myToastRegistration"))
{
await notificationHub.CreateTemplateRegistrationForApplicationAsync(
BuildTextToastTemplate(), "myToastRegistration");
}
}
XmlDocument BuildTextToastTemplate()
{
var template =
ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);
var textNode = template.SelectSingleNode("//text[@id='1']") as XmlElement;
if (textNode != null)
{
textNode.InnerText = "$(msg)";
}
return template;
}
protected override async void OnLaunched(LaunchActivatedEventArgs args)
{
await InitializeNotificationsAsync();
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame == null)
{
rootFrame = new Frame();
SuspensionManager.RegisterFrame(rootFrame, "AppFrame");
if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
try
{
await SuspensionManager.RestoreAsync();
}
catch (SuspensionManagerException)
{
}
}
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null)
{
if (!rootFrame.Navigate(typeof(GroupedItemsPage), "AllGroups"))
{
throw new Exception("Failed to create initial page");
}
}
Window.Current.Activate();
}
private async void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
await SuspensionManager.SaveAsync();
deferral.Complete();
}
}
}
Backend App (Console app to simulate the process)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ServiceBus.Notifications;
using Microsoft.ServiceBus;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var cn = ServiceBusConnectionStringBuilder.CreateUsingSharedAccessSecretWithFullAccess("zxhub-ns", "C>EDC11(j?drMn$T");
var hubClient = NotificationHubClient.CreateClientFromConnectionString(cn, "zxhub1");
hubClient.SendTemplateNotification(new Dictionary<string, string>
{
{"msg", args.Length > 0 ? args[0] : "Hello"}
});
}
}
}
This article was originally published here: http://blogs.msdn.com/b/zxue/archive/2013/01/24/creating-windows-store-apps-with-windows-azure-notification-hubs.aspx