390 likes | 539 Views
Delivering push notifications to millions of mobile devices. Elio Damaggio Program Manager II 3-515. Notification Hubs makes it easy to push multi-platform, personalized notifications both to single users and very large groups. Outline. Push notifications 101. Why Notification Hubs.
E N D
Delivering push notifications to millions of mobile devices ElioDamaggio Program Manager II 3-515
Notification Hubs makes it easy to push multi-platform, personalized notifications both to single users and very large groups.
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.
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
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.
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. Client app Platform Notification Service App back-end
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. • Scale • App 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).
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 Notification • The app back-end sends a message to the Notification Hub. • Notification Hub pushes it to the PNS’. iOS app Windows Store app Notification Hub App back-end WNS APNs
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. • Broadcast • Push notifications to millions of devices (across platforms) with a single call.
Register a Windows Store app • varhub = newNotificationHub(“<hub name>", "<connection string>"); • var channel = awaitPushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync(); • awaithub.RegisterNativeAsync(channel.Uri);
Broadcast a Windows notification • varhubClient = NotificationHubClient.CreateClientFromConnectionString("<connection string>", “<hub name>"); • vartoast = @“<notification payload>"; • hubClient.SendWindowsNativeNotificationAsync(toast);
Register an iOS app • (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*) deviceToken { • … • SBNotificationHub* hub = [[SBNotificationHuballoc] initWithConnectionString: • @"<connection string>" notificationHubPath:@"mynh"]; • [hub registerNativeWithDeviceToken:deviceTokentags:nil completion:^(NSError* error) { • if (error != nil) { • NSLog(@"Error registering for notifications: %@", error); • } • }]; • }
Register an Android app • In your main activity: • Notification Hub hub = newNotificationHub("<hub name>", "<connection string>", context); • GoogleCloudMessaginggcm = GoogleCloudMessaging.getInstance(context); • String regid = gcm.register(SENDER_ID); • NativeRegistrationr = hub.register(regid);
Broadcast iOS and Android notifications • varhubClient = NotificationHubClient.CreateClientFromConnectionString("<connection string>", “<hub name>"); • vartoastForIos= @“<notification payload>"; • hubClient.SendAppleNativeNotificationAsync(toastForIos); • vartoastForAndroid= @“<notification payload>"; • hubClient.SendGcmNativeNotificationAsync(toastForAndroid);
From node/mobile services • var azure = require('azure'); • varnotificationHubService = azure.createNotificationHubService('hubname', 'connectionString'); • notificationHubService.wns.sendToastText01(null, { text1: 'Hello from Node and Mobile Services!' },function(error) { if (!error) { // message sent successfully} } • );
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.
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.
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. Tag:”Beatles” Notification Hub App back-end Tag:”Wailers” Tag:”Beatles”
MediaApp • Demo
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.”
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.
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-end
NotifyUser • Demo
Register from the back-end (.NET) // POST api/register public asyncvoidPost(boolinstId, boolchannelUri, booluserId) { // We assume a windows store app (if coding a multiplatform app, a ‘platform‘ parameter should be passed) … if(!authorizedToRegisterTag(userId)) { thrownewException("User not authorized to register"); } varregsForInstId = await hubClient.GetRegistrationsByTag(instId, 100); boolupdated = false; boolfirstRegistration = true; foreach(varregistrationDescriptioninregsForInstId) { if(firstRegistration) { varwinReg = registrationDescriptionasWindowsRegistrationDescription; winReg.ChannelUri= newUri(channelUri); winReg.Tags.Clear(); winReg.Tags.UnionWith(newstring[] {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, newstring[] {instId, userId}); } }
Take-aways • When security is needed register from the back-end • No Notification Hub SDK required on the devices
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.
Using templates for multi-platform push <toast> <visual> <binding template=\"ToastText01\"> <text id=\"1\">$(message)</text> </binding> </visual> </toast> • 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. Hello! Service Bus Notification Hub • { message: “Hello!” } App back-end Hello! • { • aps: { • alert: “$(message)” • } • }
Using templates for personalization <toast> <visual> <binding template=\"ToastText01\"> <text id=\"1\">$(tempF)</text> </binding> </visual> </toast> • 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’}. 73 Service Bus Notification Hub • {tempC: “23”, tempF: “73”} App back-end 23 • { • aps: { • alert: “$(tempC)” • } • }
Personalized weather app • Demo
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.
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.
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.
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.
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!
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 SDK
Required Slide *delete this box when your slide is finalized Your MS Tag will be inserted here during the final scrub. Evaluate this session • Scan this QR codeto evaluate this session and be automatically entered in a drawing to win a prize!