name title microsoft corporation push notification introduction and platform interaction

21
Name Title Microsoft Corporation Push Notification Introduction and Platform Interaction

Upload: milo-clarke

Post on 24-Dec-2015

216 views

Category:

Documents


0 download

TRANSCRIPT

Name

Title

Microsoft Corporation

Push Notification Introduction and Platform Interaction

2 Microsoft Confidential

Start Tiles 101

Shortcuts to apps

Static or dynamic

2 sizes: small & large

“Pin to Start”

3 Microsoft Confidential

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

Background Image

Title Count

Animations are not extensible

4 Microsoft Confidential

Tile Design Considerations

Easy recognition

Keep things simple

Update tile in real-time

5 Microsoft Confidential

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

6 Microsoft Confidential

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?

Windows Push Notifications Introduction

7 Microsoft Confidential

URI to the service:"http://notify.live.com/throttledthirdparty/

01.00/AAFRQHgiiMWNTYrRDXAHQtz-AgrNpzcDAwAAAAQOMDAwMDAwMDAwMDAw

MDA"

Push enabled applications

Notifications service HTTP POST

the message

Push endpoint is established. URI is created for the endpoint.

1

2

3

Rich Client, Web 2.0 Applications

3rd party service

Microsofthosted server

Send PN Message

4

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 = new HttpNotificationChannel(channelName, "HOLWeatherService");httpChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(httpChannel_ChannelUriUpdated);//subscribe to Channel eventshttpChannel.Open();//Register URI

Using PN from your Windows Phone application – Part #1 Try, Find, and New

//Subscribe to the channel eventsprivate void SubscribeToChannelEvents(){ httpChannel.HttpNotificationReceived += new EventHandler <HttpNotificationEventArgs>

(httpChannel_HttpNotificationReceived);

httpChannel.ShellEntryPointNotificationReceived += new EventHandler <NotificationEventArgs> (httpChannel_ShellEntryPointNotificationReceived);

httpChannel.ShellNotificationReceived += new EventHandler <NotificationEventArgs> (httpChannel_ShellNotificationReceived);

httpChannel.ExceptionOccurred += new EventHandler <NotificationChannelExceptionEventArgs> (httpChannel_ExceptionOccurred);}

Using PN from your Windows Phone application – Part #2 Subscribe to notifications

private void SubscribeToNotifications(){ //Subscribe to a toast notification httpChannel.BindToShellNotification();

ShellEntryPoint shellEntryPoint = new ShellEntryPoint(); shellEntryPoint.RemoteImageUri = new Uri("http://developer.windowsphone.com/Common/Fire/Images/bg-brand.png", UriKind.Absolute);

//Subscribe to a tile notification httpChannel.BindToShellEntryPoint(shellEntryPoint);}

11 Microsoft Confidential

Live content from the cloud

Tile extensions

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";else if (notificationType == NotificationType.Token) request.Headers[WINDOWSPHONE_TARGET_HEADER] = "token";

Sending Tile Notification – Server Side

• Need to POST

<?xml version="1.0" encoding="utf-8"?><wp:Notification xmlns:wp="WPNotification"> <wp:Token> <wp:Img><background image path></wp:Img> <wp:Count><count></wp:Count> <wp:Title><title></wp:Title> </wp:Token></wp:Notification>

Sending Toast Notification – Server Side

MemoryStream stream = new MemoryStream();

byte[] prefix = Encoding.UTF8.GetBytes("X-WindowsPhone-Target: TOAST\r\n\r\n"); stream.Write(prefix, 0, prefix.Length);

XmlWriterSettings settings = new XmlWriterSettings() { 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

<?xml version="1.0" encoding="utf-8"?><wp:Notification xmlns:wp="WPNotification"> <wp:Token> <wp:Img><background image path></wp:Img> <wp:Count><count></wp:Count> <wp:Title><title></wp:Title> </wp:Token></wp:Notification>

Sending Tile Notification – Server Side

MemoryStream stream = new MemoryStream();byte[] prefix = Encoding.UTF8.GetBytes("X-WindowsPhone-Target: TOKEN\r\n\r\n"); stream.Write(prefix, 0, prefix.Length);

XmlWriterSettings settings = new XmlWriterSettings() { 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;

17 Microsoft confidential.

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

Response Custom Headers

19 Microsoft Confidential

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

20 Microsoft Confidential

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.

What’s next?

QUESTIONS?

© 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, 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.

© 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, 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.