信息
您所需的主题如下所示。但此主题未包含在此库中。

发送 Windows Phone 8 的推送通知

2014/6/18

适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

为您的 Windows Phone 客户端应用注册通知之后,您可以向其发送通知。通常,是通过保留要将通知发送到的 URL 集合的 Web 服务来完成,但也可以通过可向 Microsoft 推送通知服务发送消息的任何应用来完成。Windows Phone 中的 Microsoft 推送通知服务是一项致力于达到最佳结果的异步服务,它可为第三方开发人员提供一个通道,以采用高效节能的方法将数据从云服务发送到 Windows Phone 应用。若要查看演示如何发送推送通知的示例代码,请参阅如何发送和接收 Windows Phone 8 的 Toast 通知如何发送和接收 Windows Phone 8 的磁贴通知如何发送和接收 Windows Phone 8 的 Raw 通知

重要说明重要说明:

我们建议设置一个经过身份验证的 Web 服务来向推送通知服务发送通知,因为通过 HTTPS 接口进行通信更加安全,经过身份验证的 Web 服务对于它们每天可以发送的推送通知数量没有限制。另一方面,未经身份验证的 Web 服务限制为每天每个订阅 500 推送通知的速率。有关更多信息,请参见设置已经过身份验证的 Web 服务以发送 Windows Phone 8 的推送通知

若要发送推送通知,您的 Web 服务或应用必须:

  • 为每个要向其发送通知的 Windows Phone 设备创建一个 POST 消息。

  • 针对相应的通知类型组成该消息。以下部分介绍 Toast、磁贴和 Raw 通知消息的消息格式。一次只能向服务器发布一种通知类型(Toast、磁贴或 Raw)。如果您想同时向同一设备发送多种通知类型,则必须为每个通知类型创建单独的 POST 消息。

  • 通过不使用 Windows Phone OS 7.0 中不可用的属性(具体而言是 Toast 通知的 Parameter 属性和磁贴通知的 BackTitleBackBackgroundImageBackContent 或磁贴 ID 属性)来正确降级 Windows Phone OS 7.0 客户端的消息。我们建议您在 Web 服务中注册设备 URI 信息的同时发送设备操作系统版本信息。

  • 将消息发布到推送通知服务。

  • 获取推送通知服务的响应并进行相应的响应。

说明注意:

如果您指定远程 URI 用于更新应用的平铺图像且用户可以更改应用的平铺大小,则 Windows Phone 将开始下载和更新该平铺图像。如果在 Windows Phone 将平铺图像更新到本地资源的过程中,用户请求使用远程 URI 更新平铺图像,则平铺图像将显示远程资源,而不是本地资源。

本主题包括以下部分。

自定义 HTTP 标头包括通知消息 ID、批处理间隔、发送的推送通知类型和通知通道 URI。

MessageID 是与响应关联的通知消息 ID。如果未将此标头添加到 POST 请求,则推送通知服务会在响应中忽略此标头。 标头规范为 "X-MessageID"":"1*MessageIDValue MessageIDValue = STRING (uuid)

例如:X-MessageID: UUID

NotificationClass 是批处理间隔,指示推送通知将从推送通知服务发送到应用的时间。有关此标头的可能值,请参见 Toast、磁贴和 Raw 通知部分中的表。如果此标头不存在,则推送通知服务会立即发送该消息。标头规范为 ”X-NotificationClass””:”1*NotificationClassValue NotificationClassValue = DIGIT

例如:X-NotificationClass:1

通知类型是发送的推送通知类型。可能的选项为磁贴、Toast 和 Raw。如果此标头不存在,则推送通知将被视为 Raw 通知。有关详细信息,请参见 Windows Phone 8 的推送通知。 标头规范为 “X-WindowsPhone-Target””:”1*NotificationTypeValue NotificationTypeValue = STRING

例如:X-WindowsPhone-Target:toast

在磁贴或 Toast 负载中使用以下字符时,按照表中所示对它们进行编码。

字符

XML 编码

<

&lt;

>

&gt;

&

&amp;

&apos;

&quot;

以下部分介绍向 Toast 或磁贴发送推送通知所需的负载信息。

Toast 通知负载

有关如何使用代码或 XML 构建 Toast 通知负载的一般信息,以及如何构建负载以深层链接至您的应用的信息,请参见 Windows Phone 8 的 Toast

Toast 通知负载 HTTP 标头

创建 Toast 通知时使用以下 HTTP 标头:

sendNotificationRequest.ContentType = "text/xml";
sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "toast");
sendNotificationRequest.Headers.Add("X-NotificationClass", "[batching interval]");

Toast 通知批处理间隔

下表描述了批处理间隔可以具有的值。

发送间隔

2

立即发送。

12

在 450 秒内发送。

22

在 900 秒内发送。

磁贴通知负载

有关如何在 Windows Phone OS 7.1 中构建磁贴通知负载的一般信息,以及有关如何清除和删除磁贴的信息,请参见如何创建、删除和更新 Windows Phone OS 7.1 的磁贴。对于 Windows Phone 8 应用,请参见单独的磁贴模板主题,以了解有关如何构建磁贴通知负载的更多信息。Windows Phone 8 翻转磁贴模板Windows Phone 8 图标磁贴模板Windows Phone 8 循环磁贴模板

磁贴通知负载 HTTP 标头

发送磁贴通知时使用以下 HTTP 标头。

sendNotificationRequest.ContentType = "text/xml";
sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "token");
sendNotificationRequest.Headers.Add("X-NotificationClass", "[batching interval]"); 

磁贴通知批处理间隔

下表描述了批处理间隔可以具有的值。

发送间隔

1

立即发送。

11

在 450 秒内发送。

21

在 900 秒内发送。

发送推送通知至次要磁贴

如果您的应用有次要磁贴,那么 Id 特性将指定更新哪个磁贴。如果是更新应用的默认磁贴,您可以忽略“磁贴”元素的 Id 特性。

以下代码显示“磁贴”元素的 Id 特性的示例,它应包含准确的次要磁贴的导航 URI。


string tileMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<wp:Notification xmlns:wp=\"WPNotification\">" +
  "<wp:Tile Id=\"/SecondaryTile.xaml?DefaultTitle=FromTile\">" +
…
  "</wp:Tile> " +
"</wp:Notification>";

Raw 磁贴通知负载

发送 Raw 磁贴通知时使用以下 HTTP 标头。

sendNotificationRequest.ContentType = "text/xml";
sendNotificationRequest.Headers.Add("X-NotificationClass", "[batching interval]"); 

下表描述了批处理间隔可以具有的值。

发送间隔

3

立即发送。

13

在 450 秒内发送。

23

在 900 秒内发送。

由应用定义负载的结构。下面的代码显示了一个示例。


string tileMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
    "<root>" +
        "<Value1>[UserValue1]<Value1>" +
        "<Value2>[UserValue2]<Value2>" +
    "</root>"

也可以传递字节流。下面的代码显示了一个示例。

new byte[] {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};

显示: