millions of mobile devices Elio Damaggio Program Manager II 3515 Notification Hubs makes it easy to push multiplatform personalized notifications both to single users and very large groups ID: 735651
Download Presentation The PPT/PDF document "Delivering push notifications to" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.
Slide1Slide2
Delivering push notifications to millions of mobile devices
Elio
Damaggio
Program Manager II
3-515Slide3
Notification Hubs makes it easy to push multi-platform, personalized notifications both to single users
and very large groups.Slide4
Outline
Push notifications 101.
Why Notification Hubs.
Getting started demo.
Using tags.
Mediaapp
demo.
Securing tag registrations.
Notifyuser
demo.
Using templates.
Personalized notifications demo.
Other information.Slide5
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 HubsSlide6
Push notifications
Push 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.Slide7
Push notification lifecycle
Registration at app launch.
Client app contacts Platform Notification Service,
to retrieve current channel (e.g.,
ChannelURIs
,
device tokens, registrationIds).App updates handle in back-end.Sending Notification.App back-end send notification to PNS.PNS pushes the notification to the app on the device.
Maintenance.Delete expired handles when PNS rejects them.
Platform
Notification
Service
App back-end
Client appSlide8
Challenges of push notifications
Platform dependency
Different communication protocols to PNS’ (e.g., HTTP vs. TCP, xml payload vs. JSON payload).
Different presentation formats and capabilities (tiles vs. toasts vs. badges).
Routing
PNS’ 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).Slide9
Using Notification Hubs
One-time set up
Create a Notification Hub in Service Bus.
Register
The 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 Store
appSlide10
Advantages of using Notification Hubs
No 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.Slide11
Demo
Getting started with Notification HubsSlide12
Register a Windows Store app
var
hub
=
new
NotificationHub(“<hub name>", "<connection string>");
var channel = await
PushNotificationChannelManager
.CreatePushNotificationChannelForApplicationAsync();
await
hub.RegisterNativeAsync
(channel.Uri
);Slide13
Broadcast a Windows notification
var
hubClient
=
NotificationHubClient
.CreateClientFromConnectionString("<connection string>", “<hub name>");
var toast =
@“<notification payload>"
;
hubClient.SendWindowsNativeNotificationAsync
(toast
);Slide14
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); } }];}Slide15
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 appSlide16
Broadcast iOS and Android notifications
var
hubClient
=
NotificationHubClient
.CreateClientFromConnectionString("<connection string>", “<hub name>");
var
toastForIos
=
@“<notification payload>"
;
hubClient.SendAppleNativeNotificationAsync
(
toastForIos);var toastForAndroid = @“<notification payload>";hubClient.SendGcmNativeNotificationAsync(toastForAndroid);Slide17
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 servicesSlide18
Take-aways
No 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.Slide19
Outline
Push notifications 101.
Why Notification Hubs.
Getting started demo.
Using tags.
Mediaapp
demo.Securing tag registrations.Notifyuser demo.Using templates.Personalized notifications demo.Other information.Slide20
Sending notifications to specific devices
Tags as interest groups.
Client app can register with a set of tags.
Tags are simple strings (no pre-provisioning is required).
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
”Slide21
Demo
MediaAppSlide22
Take-aways
Store 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.”Slide23
Outline
Push notifications 101.
Why Notification Hubs.
Getting started demo.
Using tags.
Mediaapp
demo.Securing tag registrations.Notifyuser demo.Using templates.Personalized notifications demo.Other information.Slide24
Tags as user IDs
Registering 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.
Device does *not* contain the notification hub credentials.Devices authenticate with the app back-end to register.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
Hub
App back-endSlide25
Demo
NotifyUserSlide26
Register from the back-end (.NET)
//
POST
api
/register
p
ublic 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}); }}Slide27
Take-aways
When security is needed
register from the back-end
No Notification Hub SDK required on the devicesSlide28
Outline
Push notifications 101.
Why Notification Hubs.
Getting started demo.
Using tags.
Mediaapp
demo.Securing tag registrations.Notifyuser demo.Using templates.Personalized notifications demo.Other information.Slide29
Using templates for multi-platform push
Registration.
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 Hub
App back-end
<toast
>
<
visual
>
<binding template
=\"ToastText01
\">
<
text id=\"1
\">
$(message)
</
text
>
</
binding
>
</
visual
>
</
toast>
{
aps
:
{
alert
: “$(message
)”
}
}
{ message: “Hello!” }
Hello!
Hello
!Slide30
Using templates for personalization
Registration.
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 Hub
App back-end
<toast
>
<
visual
>
<binding template
=\"ToastText01
\">
<
text id=\"1
\">
$(
tempF
)
</
text
>
</
binding
>
</
visual
>
</
toast>
{
aps
:
{
alert
:
“$(
tempC
)”
}}{tempC: “23”, tempF: “73”
}
73
23Slide31
Demo
Personalized weather appSlide32
Templates take-aways
Platform 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.Slide33
Outline
Push notifications 101.
Why Notification Hubs.
Getting started demo.
Using tags.
Mediaapp
demo.Securing tag registrations.Notifyuser demo.Using templates.Personalized notifications demo.Other information.Slide34
Delivery guarantee and telemetry
Notification 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.Slide35
Scale
Notification 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. Slide36
Platform support, pricing & launch date
Platform 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!Slide37
Resources
Documentation
Notification Hubs Guidance
Windows Store (
tutorial
,
feature guide)iOS (tutorial, feature guide)Android (tutorial, feature guide)
SDKs
.NET Server SDK
Node Server SDK
Windows Store Device SDK
iOS Device SDK
Android Device SDKSlide38
Evaluate this session
Scan this QR code
to evaluate this session and be automatically entered in a
drawing
to
win
a
prize!
Required Slide
*delete this box when your slide is finalized
Your MS Tag will be inserted here during the final scrub. Slide39