210 likes | 344 Views
Push Notification Introduction and Platform Interaction. Name Title Microsoft Corporation. Start Tiles 101. Shortcuts to apps. Static or dynamic. 2 sizes: small & large. “Pin to Start”. Data Driven Template Model. A fixed set of data properties.
E N D
Push Notification Introduction and Platform Interaction Name Title Microsoft Corporation
Start Tiles 101 • Shortcuts to apps • Static or dynamic • 2 sizes: small & large • “Pin to Start”
Data Driven Template Model • A fixed set of data properties • Each property corresponds to an UI element • Each UI element has a fixed position on screen • Not all elements need to be used • Animations are not extensible Background Image Title Count
Tile Design Considerations • Easy recognition • Keep things simple • Update tile in real-time
Notification Toasts 101 • App icon + 2 text fields • Interruptive, transient and chase-able • Time critical and personally relevant • Users must opt-in via app UI
Windows Push Notifications Introduction • Why does Push notifications give the end user great battery life? • How does Push notifications contribute to a deterministic behavior? • How does Push notifications change the developers design patterns?
Rich Client, Web 2.0 Applications 2 URI to the service: "http://notify.live.com/throttledthirdparty/01.00/AAFRQHgiiMWNTYrRDXAHQtz-AgrNpzcDAwAAAAQOMDAwMDAwMDAwMDAwMDA" 3rd party service Push enabled applications 3 Notifications service HTTP POST the message 4 Send PN Message 1 Push endpoint is established. URI is created for the endpoint. Microsoft hosted server
Using PN from your Windows Phone application – Part #1 Try, Find, and New • httpChannel=HttpNotificationChannel.Find(channelName); • if (null != httpChannel) • { • //subscribe to Channel events • //subscribe to Notification events • //Register URI • } • else …. • httpChannel = newHttpNotificationChannel(channelName, "HOLWeatherService"); • httpChannel.ChannelUriUpdated += newEventHandler<NotificationChannelUriEventArgs>(httpChannel_ChannelUriUpdated); • //subscribe to Channel events • httpChannel.Open(); • //Register URI
Using PN from your Windows Phone application – Part #1 Try, Find, and New //Subscribe to the channel events privatevoidSubscribeToChannelEvents() { httpChannel.HttpNotificationReceived+= newEventHandler<HttpNotificationEventArgs> (httpChannel_HttpNotificationReceived); httpChannel.ShellEntryPointNotificationReceived += newEventHandler<NotificationEventArgs> (httpChannel_ShellEntryPointNotificationReceived); httpChannel.ShellNotificationReceived += newEventHandler<NotificationEventArgs> (httpChannel_ShellNotificationReceived); httpChannel.ExceptionOccurred += newEventHandler<NotificationChannelExceptionEventArgs> (httpChannel_ExceptionOccurred); }
Using PN from your Windows Phone application – Part #2 Subscribe to notifications privatevoidSubscribeToNotifications() { //Subscribe to a toast notification httpChannel.BindToShellNotification(); ShellEntryPointshellEntryPoint = newShellEntryPoint(); shellEntryPoint.RemoteImageUri= new Uri("http://developer.windowsphone.com/Common/Fire/Images/bg-brand.png", UriKind.Absolute); //Subscribe to a tile notification httpChannel.BindToShellEntryPoint(shellEntryPoint); }
Tile extensions • Live content from the cloud • Only applies to background images of tiles • Atomic operation performed when download completed
Sending Notifications – Server Side HttpWebRequest request = (HttpWebRequest)WebRequest.Create(channelUri); request.Method= WebRequestMethods.Http.Post; request.ContentType= "text/xml; charset=utf-8"; request.ContentLength = payload.Length; request.Headers[MESSAGE_ID_HEADER] = Guid.NewGuid().ToString(); //"token“ or “toast” request.Headers[NOTIFICATION_CLASS_HEADER] = ((int)notificationType).ToString(); if (notificationType == NotificationType.Toast) request.Headers[WINDOWSPHONE_TARGET_HEADER] = "toast"; elseif (notificationType == NotificationType.Token) request.Headers[WINDOWSPHONE_TARGET_HEADER] = "token";
Sending Tile Notification – Server Side • Need to POST • <?xmlversion="1.0"encoding="utf-8"?> • <wp:Notificationxmlns:wp="WPNotification"> • <wp:Token> • <wp:Img><backgroundimagepath></wp:Img> • <wp:Count><count></wp:Count> • <wp:Title><title></wp:Title> • </wp:Token> • </wp:Notification>
Sending Toast Notification – Server Side MemoryStream stream = newMemoryStream(); byte[] prefix = Encoding.UTF8.GetBytes("X-WindowsPhone-Target: TOAST\r\n\r\n"); stream.Write(prefix, 0, prefix.Length); XmlWriterSettings settings = newXmlWriterSettings() { Indent = true, Encoding = Encoding.UTF8 }; XmlWriter writer = XmlWriter.Create(stream, settings); writer.WriteStartDocument(); writer.WriteStartElement("wp", "Notification", "WPNotification"); writer.WriteStartElement("wp", "Toast", "WPNotification"); writer.WriteStartElement("wp", "Text1", "WPNotification"); writer.WriteValue(text1); writer.WriteEndElement(); writer.WriteStartElement("wp", "Text2", "WPNotification"); writer.WriteValue(text2); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndDocument(); writer.Close(); byte[] payload = stream.ToArray(); return payload;
Sending Tile Notification – Server Side • Need to POST • <?xmlversion="1.0"encoding="utf-8"?> • <wp:Notificationxmlns:wp="WPNotification"> • <wp:Token> • <wp:Img><backgroundimagepath></wp:Img> • <wp:Count><count></wp:Count> • <wp:Title><title></wp:Title> • </wp:Token> • </wp:Notification>
Sending Tile Notification – Server Side MemoryStream stream = newMemoryStream(); byte[] prefix = Encoding.UTF8.GetBytes("X-WindowsPhone-Target: TOKEN\r\n\r\n"); stream.Write(prefix, 0, prefix.Length); XmlWriterSettings settings = newXmlWriterSettings() { Indent = true, Encoding = Encoding.UTF8 }; XmlWriter writer = XmlWriter.Create(stream, settings); writer.WriteStartDocument(); writer.WriteStartElement("wp", "Notification", "WPNotification"); writer.WriteStartElement("wp", "Token", "WPNotification"); writer.WriteStartElement("wp", "Img", "WPNotification"); writer.WriteValue(backgroundImageUri); writer.WriteEndElement(); writer.WriteStartElement("wp", "Count", "WPNotification"); writer.WriteValue(count.ToString()); writer.WriteEndElement(); writer.WriteStartElement("wp", "Title", "WPNotification"); writer.WriteValue(title); writer.WriteEndElement(); writer.WriteEndElement(); writer.Close(); byte[] payload = stream.ToArray(); return payload;
Response Custom Headers • Response Code: HTTP status code (200 OK) • Notification Status • notification received by the Push Notification Service • For example: “X-NotificationStatus:Received” • DeviceConnectionStatus • The connection status of the device • //For example: X-DeviceConnectionStatus:Connected • SubscriptionStatus • The subscription status • //For example: X-SubscriptionStatus:Active • More information • http://msdn.microsoft.com/en-us/library/ff402545(v=VS.92).aspx
Summary • Efficient battery utilization • Minimize memory footprint • Reduce processor cycles • Unified heartbeat reduces number of connections • Device is always “visible” from the cloud • Simple programming model on the phone • Simple to integrate existing Web 2.0 solutions • Quick ramp up for developers who currently lacks services
What’s next? Web 2.0 services which use the Web hooks pattern Download the tools! Works on the Emulator! http://developer.windowsphone.com Microsoft hosted push service is in production.