![Page 1: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/1.jpg)
![Page 2: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/2.jpg)
Delivering push notifications to millions of mobile devicesElio DamaggioProgram Manager II3-515
![Page 3: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/3.jpg)
Notification Hubs makes it easy
to push multi-platform, personalized notifications both to single users and very large groups.
![Page 4: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/4.jpg)
OutlinePush notifications 101.Why Notification Hubs.Getting started demo.Using tags.Mediaapp demo.Securing tag registrations.Notifyuser demo.Using templates.Personalized notifications demo.Other information.
![Page 5: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/5.jpg)
Why Notification Hubs?Push is essential to the user experience of many apps.Increase user engagement.• Update tiles/widgets with current financial/weather information.• Display badges with the number of current sales leads in a CRM app.
Real world apps have complex needs.Multi-platform push.Localization.User preferences.Different client app versions.Scale.
Windows News app uses Notification Hubs
![Page 6: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/6.jpg)
Push notificationsPush notifications require a platform specific service.Each platform (Windows Store, iOS, Android, …) has a different push notification service.Different capabilities and protocols.An e2e solution requires lots of back-end code.Store and keep up to date the device information.Implement platform-specific protocols.
![Page 7: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/7.jpg)
Push notification lifecycleRegistration at app launch.1. Client app contacts Platform Notification Service,
to retrieve current channel (e.g., ChannelURIs, device tokens, registrationIds).
2. App updates handle in back-end.Sending Notification.3. App back-end send notification to PNS.4. PNS pushes the notification to the app
on the device.Maintenance.5. Delete expired handles when PNS rejects them.
PlatformNotification
Service
App back-end
Client app
![Page 8: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/8.jpg)
Challenges of push notificationsPlatform dependencyDifferent communication protocols to PNS’ (e.g., HTTP vs. TCP, xml payload vs. JSON payload).Different presentation formats and capabilities (tiles vs. toasts vs. badges).RoutingPNS’ provide a way to send a message to a device/channel.Usually notifications are targeted at users or interest groups(e.g., employees assigned to a customer account).App back-end has to maintain a registry associating device handles to interest groups/users.ScaleApp back-end has to store current handles for each device high storage and VM costs.Broadcast to millions of devices with low latency requires parallelization (DB ad VM).
![Page 9: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/9.jpg)
Using Notification HubsOne-time set upCreate a Notification Hub in Service Bus.RegisterThe client app retrieves its current handle from the PNS.Client app creates (or updates) a registration on the Notification Hub with the current handle.Send NotificationThe app back-end sends a message to the Notification Hub.Notification Hub pushes it to the PNS’.
APNs WNS
Notification Hub
App back-end
iOS app Windows Storeapp
![Page 10: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/10.jpg)
Advantages of using Notification HubsNo platform-specific protocols.App back-end just communicates with the Notification Hub.Avoid storing device information in the app back-end.Notification Hub maintains the registry of devices and the associations to users/interest groups.BroadcastPush notifications to millions of devices (across platforms) with a single call.
![Page 11: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/11.jpg)
Demo
Getting started with Notification Hubs
![Page 12: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/12.jpg)
Register a Windows Store appvar hub = new NotificationHub(“<hub name>", "<connection string>");
var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
await hub.RegisterNativeAsync(channel.Uri);
![Page 13: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/13.jpg)
Broadcast a Windows notificationvar hubClient = NotificationHubClient.CreateClientFromConnectionString("<connection string>", “<hub name>");
var toast = @“<notification payload>";
hubClient.SendWindowsNativeNotificationAsync(toast);
![Page 14: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/14.jpg)
Register an iOS app(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *) deviceToken {
…
SBNotificationHub* hub = [[SBNotificationHub alloc] initWithConnectionString:
@"<connection string>" notificationHubPath:@"mynh"];
[hub registerNativeWithDeviceToken:deviceToken tags:nil completion:^(NSError* error) {
if (error != nil) {
NSLog(@"Error registering for notifications: %@", error);
}
}];
}
![Page 15: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/15.jpg)
In your main activity:
Notification Hub hub = new NotificationHub("<hub name>", "<connection string>", context);
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
String regid = gcm.register(SENDER_ID);
NativeRegistration r = hub.register(regid);
Register an Android app
![Page 16: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/16.jpg)
Broadcast iOS and Android notificationsvar hubClient = NotificationHubClient.CreateClientFromConnectionString("<connection string>", “<hub name>");
var toastForIos = @“<notification payload>";
hubClient.SendAppleNativeNotificationAsync(toastForIos);
var toastForAndroid = @“<notification payload>";
hubClient.SendGcmNativeNotificationAsync(toastForAndroid);
![Page 17: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/17.jpg)
var azure = require('azure');
var notificationHubService = azure.createNotificationHubService('hubname', 'connectionString');notificationHubService.wns.sendToastText01(null, { text1: 'Hello from Node and Mobile Services!' }, function (error) { if (!error) { // message sent successfully } });
From node/mobile services
![Page 18: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/18.jpg)
Take-awaysNo need to store and maintain ChannelURIs.In your device local storage, in the cloud.Device registrations expire.No need to clean-up when app is uninstalled.Call RegisterAsync regularly.
![Page 19: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/19.jpg)
OutlinePush notifications 101.Why Notification Hubs.Getting started demo.Using tags.Mediaapp demo.Securing tag registrations.Notifyuser demo.Using templates.Personalized notifications demo.Other information.
![Page 20: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/20.jpg)
Sending notifications to specific devicesTags as interest groups.1. Client app can register with a set of tags.2. Tags are simple strings (no pre-provisioning is required).3. App back-end can target all clients with the same tag.You can use tags also for:Multiple type of interest groups, e.g.,:• Follow bands: tag “followband:Beatles”.• Follow users: tag “followuser:Alice”.
Tag devices with a user ID.
Notification Hub
App back-end
Tag:”Beatles”Tag:”Wailers”
Tag:”Beatles”
![Page 21: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/21.jpg)
Demo
MediaApp
![Page 22: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/22.jpg)
Take-awaysStore the categories/tags.In your device local storage, in the cloud.Make sure to register regularly.Rule of thumb: “every app start, up to once per day.”
![Page 23: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/23.jpg)
OutlinePush notifications 101.Why Notification Hubs.Getting started demo.Using tags.Mediaapp demo.Securing tag registrations.Notifyuser demo.Using templates.Personalized notifications demo.Other information.
![Page 24: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/24.jpg)
Tags as user IDsRegistering from device is not secure.Every device can register for any tag.Embedding credentials in the device works for “public” notifications (e.g., News apps).Register from back-end.1. Device does *not* contain the notification hub credentials.2. Devices authenticate with the app back-end to register.3. App back-end registers the device for the correct tags.Same registration patterns apply.Devices have to register regularly (registrations still expire).Store the required tags in your back-end.
Notification HubApp back-
end
![Page 25: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/25.jpg)
Demo
NotifyUser
![Page 26: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/26.jpg)
Register from the back-end (.NET)// POST api/registerpublic async void Post(bool instId, bool channelUri, bool userId) { // We assume a windows store app (if coding a multiplatform app, a ‘platform‘ parameter should be passed) … if (!authorizedToRegisterTag(userId)) { throw new Exception("User not authorized to register"); } var regsForInstId = await hubClient.GetRegistrationsByTag(instId, 100); bool updated = false; bool firstRegistration = true; foreach (var registrationDescription in regsForInstId) { if (firstRegistration) { var winReg = registrationDescription as WindowsRegistrationDescription; winReg.ChannelUri = new Uri(channelUri); winReg.Tags.Clear(); winReg.Tags.UnionWith(new string[] {instId, userId}); hubClient.UpdateRegistration(winReg); updated = true; firstRegistration = false; } else { // if templates are not used, delete all extra registrations with this installation id. hubClient.DeleteRegistration(registrationDescription); } } // if not updated, a new registration has to be created for the device if (!updated) { hubClient.CreateWindowsNativeRegistration(channelUri, new string[] {instId, userId}); }}
![Page 27: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/27.jpg)
Take-awaysWhen security is needed register from the back-endNo Notification Hub SDK required on the devices
![Page 28: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/28.jpg)
OutlinePush notifications 101.Why Notification Hubs.Getting started demo.Using tags.Mediaapp demo.Securing tag registrations.Notifyuser demo.Using templates.Personalized notifications demo.Other information.
![Page 29: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/29.jpg)
Using templates for multi-platform pushRegistration.Client apps can register with a platform specific template, e.g.,• Alice’s Surface registers with
Windows Store ToastText01 template.• Bob’s iPhone with the Apple JSON template:
{ aps: {alert: “$(message)”}}.Send notification.App back-end sends a platform independent message: {message: “Hello!”}.Version independence.Templates can be used to abstract different client app versions.
Service Bus Notification HubApp back-
end
<toast><visual><binding
template=\"ToastText01\"><text
id=\"1\">$(message)</text></binding>
</visual></toast>
{aps: {
alert: “$(message)”
}}
{ message: “Hello!” }
Hello!
Hello!
![Page 30: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/30.jpg)
Using templates for personalizationRegistration.Client apps can register with personalized templates, e.g., • Alice’s Surface wants to receive weather information in F degrees.• Bob’s iPhone wants weather information in C degrees.
Send notification.App back-end sends a message including both temperatures: {tempC: “23”, tempF: “73”}.Template Expressions.Template support a simple expression language:E.g., {‘Elio, ’+$(friend)+’ added you to ’+$(groupName)+‘ group’}.
Service Bus Notification HubApp back-
end
<toast><visual><binding
template=\"ToastText01\"><text id=\"1\">$(tempF)</text>
</binding></visual>
</toast>
{aps: {
alert: “$(tempC)”
}}
{tempC: “23”, tempF: “73”}
73
23
![Page 31: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/31.jpg)
Demo
Personalized weather app
![Page 32: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/32.jpg)
Templates take-awaysPlatform agnostic code in the back-end.Abstract client app version differences from the back-end.Powerful personalization with no back-end complexity.E.g., localized messages, C/F temperatures.
![Page 33: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/33.jpg)
OutlinePush notifications 101.Why Notification Hubs.Getting started demo.Using tags.Mediaapp demo.Securing tag registrations.Notifyuser demo.Using templates.Personalized notifications demo.Other information.
![Page 34: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/34.jpg)
Delivery guarantee and telemetryNotification Hubs do not provide delivery guarantee.All platform notification systems are “best effort”, e.g., device could be disconnected, could never reconnect, etc.Guideline: important communications have to be delivered in-app.Telemetry.Notification Hubs provide powerful telemetry to track each and every outcome of the notifications for each platform (e.g., successful notifications, throttled notifications, expired channels/tokens).Accessible through Windows Azure portal and programmatically.
![Page 35: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/35.jpg)
ScaleNotification Hubs run on a fully parallelized architecture.All our VMs are ready for your broadcast!A single Notification Hub scales up to millions of devices, with no special coding required.Number of devices and latency.During preview Notification Hubs are limited to 10,000 active devices.At launch, Notification Hubs will support millions of devices out of the box.The expected latency of a broadcast to all registered devices is a couple of minutes, even for millions of devices.
![Page 36: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/36.jpg)
Platform support, pricing & launch datePlatform support.At launch, we will support push notifications through WNS, APNs, GCM, and MPNS.Device SDKs for Windows Store Apps, Windows Phone 8, iOS (Objective-C), Android.Server SDKs for .NET, Node, Mobile Services.All functions available from REST.Launch date.“Summer 2013” in all data centers, i.e., very soon!
![Page 37: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/37.jpg)
ResourcesDocumentationNotification Hubs GuidanceWindows Store (tutorial, feature guide)iOS (tutorial, feature guide)Android (tutorial, feature guide)
SDKs.NET Server SDKNode Server SDKWindows Store Device SDKiOS Device SDKAndroid Device SDK
![Page 38: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/38.jpg)
Evaluate this session
Scan this QR code to evaluate this session and be automatically entered in a drawing to win a prize!
![Page 39: Delivering push notifications to millions of mobile devices](https://reader036.vdocument.in/reader036/viewer/2022081520/568161c1550346895dd1a368/html5/thumbnails/39.jpg)
© 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.