Laat ons weten wat u vindt van deze sessie! Vul de evaluatie
in via www.techdaysapp.nl en maak kans op een van de 20
prijzen*. Prijswinnaars worden bekend gemaakt via Twitter
(#TechDaysNL). Gebruik hiervoor de code op uw badge.
Let us know how you feel about this session! Give your
feedback via www.techdaysapp.nl and possibly win one of
the 20 prizes*. Winners will be announced via Twitter
(#TechDaysNL). Use your personal code on your badge.
* Over de uitslag kan niet worden gecorrespondeerd, prijzen zijn voorbeelden – All results are final, prizes are
examples
Delivering Millions of
Push Notifications in
Minutes
Sasha Goldshtein
CTO, Sela Group
Microsoft C# MVP, Azure MRS, Azure Insider
blog.sashag.net
@goldshtn
Typical Push System Diagram
Platform Push
Provider
Your Web
Service
Database
App
Azure Mobile Services is a backend
for your mobile apps
… that has a free tier
… cloud scale
… support for all mobile platforms
Mobile Services Push Architecture
Microsoft Azure
SQL DatabaseNode +
Express
backen
d
Apple Push
Notification
Service
Windows
Notification
Service
Google Cloud
Messaging
Microsoft Push
Notification
Service
URI/Token Device Type ID
aabc 43df
…
iOS 123456
https://live..
.
Windows 8 789123
56aaffbb… Android 456789
Server
scripts
Managed by
you
Azure Notification Hubs
… abstract away platform push
services
… support targeted multi-tag delivery
… scale to millions of users
… Mobile Services or any other
Notification Hub Push Architecture
Microsoft Azure
Node +
Express
backen
d
Apple Push
Notification
Service
Windows
Notification
Service
Google Cloud
Messaging
Microsoft Push
Notification
Service
Server
scripts
Notification Hub Service
SQL
Database
Tag URIs/Tokens Templates
sports [ ab…, 5a…,
…]
alert: …
<toast…>
data: …news [ bc…, 5a…,
…]
123456 [ 5a… ]
Not managed
by you
Options for Push Notifications
Registration Push
Through Mobile Service
Explicit channel management
Mobile Services push module
Directly from client to Notification Hub Azure hub module from Mobile Service
Azure NuGet package from other
backendThrough Mobile Service to Notification
Hub
Registration Tags…
…are totally up to you!
Examples:
user:123456
region:Europe
sports news
conversation:aa412
Per-Platform Registration from
Mobile Service
hub.wns.createNativeRegistration(
request.body.channelUri,
[request.user.userId, ‚sports‛],
function (error, registration) { ... }
);
hub.apns.createNativeRegistration(
request.body.deviceToken,
[request.user.userId, ‚sports‛],
function (error, registration) { ... }
);
Direct Registration from
Windows 8 Client
var channel = await PushNotificationChannelManager.
CreatePushNotificationChannelForApplicationAsync();
var hub = new NotificationHub(name, connString);
await hub.RegisterNativeAsync(channel.Uri);
Push from Mobile Service
hub.wns.sendToastText02(
[ ‘sports’, ‘news’ ],
{
text1: ‘Breaking news’,
text2: ‘AFC Ajax defeats FC Twente 3-0’
},
function (error) { ... }
);
Push from Mobile Service
hub.apns.send (
[ ‘sports’, ‘news’ ],
{
badge: 1,
alert: ‘AFC Ajax defeats FC Twente 3-0’
},
function (error) { ... }
);
Push from Other .NET Backend
var hub = NotificationHubClient.
CreateClientFromConnectionString(connString, name);
var toast =
@‛...<text id=‘1’>‛
‚AFC Ajax defeats FC Twente 3-0‛
‚</text>...‛;
await hub.SendWindowsNativeNotificationAsync(toast);
Demo
Notification Hubs with .NET Backend
Notification Hubs from Console App
Per-Platform
Registrations Aren’t
That GreatSeparate registration API for each platform
Separate payload for each platform
But: More control over push customization
Template Registration
hub.wns.createToastText01Registration(
request.body.channelUri,
[ ‘sports’, request.user.userId ],
{ text1: ‘$(breakingnews)’ },
function (error, registration) { ... }
);
hub.apns.createTemplateRegistration(
request.body.deviceToken,
[ ‘sports’, request.user.userId ],
{ aps: { alert: ‘$(breakingnews)’ } },
function (error, registration) { ... }
);
Registration Template Channel URI /
Device Token
Device Type
12345678… {‚aps‛:{‚alert‛:‛$(breakingnews)‛}} abcd 12f0 … iOS
45678901… {‚data‛:{‚message‛:‛$(breakingnews)‛}} 556a432f… Android
78901234… <?xml version="1.0" encoding="utf-
8"?><wp:Notification
xmlns:wp="WPNotification"><wp:Toast><wp:T
ext1>Breaking
news</wp:Text1><wp:Text2>$(breakingnews)<
/wp:Text2></wp:Toast></wp:Notification>
https://live... Windows Phone
34567890… <toast><visual><binding
template="ToastText02"><text
id="1">Breaking news</text><text
id="2">$(breakingnews)</text</visual></to
ast>
https://live... Windows 8
Template Push
hub.send(
[ ‘sports’, ‘news’ ],
{ breakingnews: ‘AFC Ajax defeats FC Twente 3-0’ },
function (error, outcome) { ... }
);
Demo
Template Registrations
Questions?
Sasha Goldshtein
blog.sashag.net
@goldshtn
Laat ons weten wat u vindt van deze sessie! Vul de evaluatie
in via www.techdaysapp.nl en maak kans op een van de 20
prijzen*. Prijswinnaars worden bekend gemaakt via Twitter
(#TechDaysNL). Gebruik hiervoor de code op uw badge.
Let us know how you feel about this session! Give your
feedback via www.techdaysapp.nl and possibly win one of
the 20 prizes*. Winners will be announced via Twitter
(#TechDaysNL). Use your personal code on your badge.
* Over de uitslag kan niet worden gecorrespondeerd, prijzen zijn voorbeelden – All results are final, prizes are
examples
Delivering Millions of Push Notifications in Minutes

Delivering Millions of Push Notifications in Minutes

  • 2.
    Laat ons wetenwat u vindt van deze sessie! Vul de evaluatie in via www.techdaysapp.nl en maak kans op een van de 20 prijzen*. Prijswinnaars worden bekend gemaakt via Twitter (#TechDaysNL). Gebruik hiervoor de code op uw badge. Let us know how you feel about this session! Give your feedback via www.techdaysapp.nl and possibly win one of the 20 prizes*. Winners will be announced via Twitter (#TechDaysNL). Use your personal code on your badge. * Over de uitslag kan niet worden gecorrespondeerd, prijzen zijn voorbeelden – All results are final, prizes are examples
  • 3.
    Delivering Millions of PushNotifications in Minutes Sasha Goldshtein CTO, Sela Group Microsoft C# MVP, Azure MRS, Azure Insider blog.sashag.net @goldshtn
  • 4.
    Typical Push SystemDiagram Platform Push Provider Your Web Service Database App
  • 5.
    Azure Mobile Servicesis a backend for your mobile apps … that has a free tier … cloud scale … support for all mobile platforms
  • 6.
    Mobile Services PushArchitecture Microsoft Azure SQL DatabaseNode + Express backen d Apple Push Notification Service Windows Notification Service Google Cloud Messaging Microsoft Push Notification Service URI/Token Device Type ID aabc 43df … iOS 123456 https://live.. . Windows 8 789123 56aaffbb… Android 456789 Server scripts Managed by you
  • 7.
    Azure Notification Hubs …abstract away platform push services … support targeted multi-tag delivery … scale to millions of users … Mobile Services or any other
  • 8.
    Notification Hub PushArchitecture Microsoft Azure Node + Express backen d Apple Push Notification Service Windows Notification Service Google Cloud Messaging Microsoft Push Notification Service Server scripts Notification Hub Service SQL Database Tag URIs/Tokens Templates sports [ ab…, 5a…, …] alert: … <toast…> data: …news [ bc…, 5a…, …] 123456 [ 5a… ] Not managed by you
  • 9.
    Options for PushNotifications Registration Push Through Mobile Service Explicit channel management Mobile Services push module Directly from client to Notification Hub Azure hub module from Mobile Service Azure NuGet package from other backendThrough Mobile Service to Notification Hub
  • 10.
    Registration Tags… …are totallyup to you! Examples: user:123456 region:Europe sports news conversation:aa412
  • 11.
    Per-Platform Registration from MobileService hub.wns.createNativeRegistration( request.body.channelUri, [request.user.userId, ‚sports‛], function (error, registration) { ... } ); hub.apns.createNativeRegistration( request.body.deviceToken, [request.user.userId, ‚sports‛], function (error, registration) { ... } );
  • 12.
    Direct Registration from Windows8 Client var channel = await PushNotificationChannelManager. CreatePushNotificationChannelForApplicationAsync(); var hub = new NotificationHub(name, connString); await hub.RegisterNativeAsync(channel.Uri);
  • 13.
    Push from MobileService hub.wns.sendToastText02( [ ‘sports’, ‘news’ ], { text1: ‘Breaking news’, text2: ‘AFC Ajax defeats FC Twente 3-0’ }, function (error) { ... } );
  • 14.
    Push from MobileService hub.apns.send ( [ ‘sports’, ‘news’ ], { badge: 1, alert: ‘AFC Ajax defeats FC Twente 3-0’ }, function (error) { ... } );
  • 15.
    Push from Other.NET Backend var hub = NotificationHubClient. CreateClientFromConnectionString(connString, name); var toast = @‛...<text id=‘1’>‛ ‚AFC Ajax defeats FC Twente 3-0‛ ‚</text>...‛; await hub.SendWindowsNativeNotificationAsync(toast);
  • 16.
    Demo Notification Hubs with.NET Backend Notification Hubs from Console App
  • 17.
    Per-Platform Registrations Aren’t That GreatSeparateregistration API for each platform Separate payload for each platform But: More control over push customization
  • 18.
    Template Registration hub.wns.createToastText01Registration( request.body.channelUri, [ ‘sports’,request.user.userId ], { text1: ‘$(breakingnews)’ }, function (error, registration) { ... } ); hub.apns.createTemplateRegistration( request.body.deviceToken, [ ‘sports’, request.user.userId ], { aps: { alert: ‘$(breakingnews)’ } }, function (error, registration) { ... } );
  • 19.
    Registration Template ChannelURI / Device Token Device Type 12345678… {‚aps‛:{‚alert‛:‛$(breakingnews)‛}} abcd 12f0 … iOS 45678901… {‚data‛:{‚message‛:‛$(breakingnews)‛}} 556a432f… Android 78901234… <?xml version="1.0" encoding="utf- 8"?><wp:Notification xmlns:wp="WPNotification"><wp:Toast><wp:T ext1>Breaking news</wp:Text1><wp:Text2>$(breakingnews)< /wp:Text2></wp:Toast></wp:Notification> https://live... Windows Phone 34567890… <toast><visual><binding template="ToastText02"><text id="1">Breaking news</text><text id="2">$(breakingnews)</text</visual></to ast> https://live... Windows 8
  • 20.
    Template Push hub.send( [ ‘sports’,‘news’ ], { breakingnews: ‘AFC Ajax defeats FC Twente 3-0’ }, function (error, outcome) { ... } );
  • 21.
  • 22.
  • 23.
    Laat ons wetenwat u vindt van deze sessie! Vul de evaluatie in via www.techdaysapp.nl en maak kans op een van de 20 prijzen*. Prijswinnaars worden bekend gemaakt via Twitter (#TechDaysNL). Gebruik hiervoor de code op uw badge. Let us know how you feel about this session! Give your feedback via www.techdaysapp.nl and possibly win one of the 20 prizes*. Winners will be announced via Twitter (#TechDaysNL). Use your personal code on your badge. * Over de uitslag kan niet worden gecorrespondeerd, prijzen zijn voorbeelden – All results are final, prizes are examples