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

Windows Phone 8 的推送通知服务响应代码

2014/6/18

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

您的云服务向 Microsoft 推送通知服务发送推送通知之后,您的云服务将收到可能具有自定义标题的很多响应代码之一。

重要说明重要说明:

Windows Phone 中的 Microsoft 推送通知服务是一项致力于达到最佳结果的异步服务,它可为第三方开发人员提供一个通道,以采用高效节能的方法将数据从云服务发送到 Windows Phone 应用。

本主题包括以下部分。

来自 Microsoft 推送通知服务的响应将采用以下格式:

HTTP/1.1 [error code] [error text] 
Date: [HTTP-date]
[Custom HTTP Headers]

[error code]

三位错误代码。请参阅下面的错误代码列表。

[error text]

错误的说明。

[Custom HTTP Headers]

下面定义自定义 HTTP 标题。

下表描述可能返回到云服务的错误和非错误响应代码。响应代码并不表示设备已收到消息。它们只是说明服务器已收到通知并且已将其排队,以便在设备的下一个可能机会到来时发送。

响应代码

通知状态

设备连接状态

订阅状态

注释

200 OK

已接收

已连接

活动

已接受通知请求并且已排队进行发送。即使设备当前正在过渡到“已暂时断开连接”状态,服务器也可以用该状态进行响应。这意味着,在设备从“已暂时断开连接”状态返回之前,都将无法发送通知。

200 OK

已接收

已暂时断开连接

活动

已接受通知请求并且已排队进行发送。但是,设备已暂时断开连接。有关更多信息,请参见了解已暂时断开连接状态

200 OK

QueueFull

已连接

活动

服务器可为每个 URI 维护最多 30 个通知(不考虑类型)。 达到限值 30 之后,将放弃所有发送到服务器的新消息,直到重新连接该设备并刷新队列。

200 OK

QueueFull

已暂时断开连接

活动

服务器可为每个 URI 维护最多 30 个通知(不考虑类型)。 达到限值 30 之后,将放弃所有发送到服务器的新消息,直到重新连接该设备并刷新队列。

200 OK

已抑制

已连接

活动

已收到推送通知,但被推送通知服务丢弃。在以下情况下可能会出现“已抑制”状态:没有通过在客户端应用程序中调用 BindToShellTileBindToShellToast 来启用通知类型;在应用程序未位于前台时发送了 Raw 通知,或发送的磁贴通知未包含应用程序可用来固定到“开始”的磁贴。

200 OK

已抑制

已暂时断开连接

活动

已收到推送通知,但被推送通知服务丢弃。在以下情况下可能会出现“已抑制”状态:没有通过在客户端应用程序中调用 BindToShellTileBindToShellToast 来启用通知类型;在应用程序未位于前台时发送了 Raw 通知,或发送的磁贴通知未包含应用程序可用来固定到“开始”的磁贴。

400 BadRequest

N/A

N/A

N/A

当云服务发送包含错误 XML 文档或格式错误的通知 URI 的通知请求时,发生此错误。

401 Unauthorized

N/A

N/A

N/A

未授权发送此通知。由于以下原因之一发生此错误:

  • 云服务上证书的使用者名称与推送通知服务上证书的使用者名称不匹配。

  • 如果标记已被修改。

  • 如果标记对于其订阅无效。

404 Not Found

Dropped

已连接

Expired

此订阅无效并且在推送通知服务上不存在。云服务应停止向此订阅发送新通知,并且对于其相应的应用程序会话丢弃此订阅状态。

404 Not Found

Dropped

已暂时断开连接

Expired

此订阅无效并且在推送通知服务上不存在。云服务应停止向此订阅发送新通知,并且对于其客户端丢弃此订阅状态。

404 Not Found

Dropped

Disconnected

Expired

此订阅无效并且在推送通知服务上不存在。云服务应停止向此订阅发送新通知,并且对于其客户端丢弃此订阅状态。

405 Method Not Allowed

N/A

N/A

N/A

无效方法(PUT、DELETE 和 CREATE)。仅当发送通知请求时才允许 POST。

406 Not Acceptable

Dropped

已连接

活动

当未经身份验证的云服务已达到订阅的每日限制,或当云服务(经身份验证或未经身份验证)每秒发送过多通知时,将发生此错误。收到此错误后,云服务可以每隔一小时尝试再次发送推送通知。正常通知流恢复之前,云服务可能需要等待多达 24 小时。

406 Not Acceptable

Dropped

已暂时断开连接

活动

当未经身份验证的云服务已达到订阅的每日限制,或当云服务(经身份验证或未经身份验证)每秒发送过多通知时,将发生此错误。收到此错误后,云服务可以每隔一小时尝试重新发送推送通知。正常通知流恢复之前,云服务可能需要等待多达 24 小时。

412 Precondition Failed

Dropped

Disconnected

N/A

设备处于已断开连接状态。即使会放弃这些通知,云服务仍应继续照常发送通知,因为一旦设备返回到“已连接”状态,该做法可确保通知流持续发送到设备。

503 Service Unavailable

N/A

N/A

N/A

推送通知服务无法处理此请求。稍后云服务应重新发送通知。

从推送通知服务发送的每个请求可能包含以下一个或多个自定义标题:

标题

说明/规范

MessageID

与响应关联的通知消息 ID。如果发送到推送通知服务的 POST 请求不包含 MessageID 自定义标题,则将不会在响应中返回 MessageID。有关更多信息,请参见发送 Windows Phone 8 的推送通知

"X-MessageID"":"1*MessageIDValue
MessageIDValue = STRING (uuid)
//For example:
X-MessageID:<UUID>

NotificationStatus

由 Microsoft 推送通知服务接收的通知的状态。

"X-NotificationStatus"":"1*NotificationStatusValue
NotificationStatusValue = STRING (Received|Dropped|QueueFull|)
//For example:
X-NotificationStatus:Received

DeviceConnectionStatus

设备的连接状态。

"X-DeviceConnectionStatus"":"1*DeviceConnectionStatusValue
DeviceConnectionStatusValue = STRING
(Connected|InActive|Disconnected|TempDisconnected)
//For example:
X-DeviceConnectionStatus:Connected

SubscriptionStatus

订阅状态。

"X-SubscriptionStatus"":"1*SubscriptionStatusValue
SubscriptionStatusValue = STRING
(Active|Expired)
//For example:
X-SubscriptionStatus:Active

下面的流程图将展示设备在“已连接”、“已暂时断开连接”和“已断开连接”状态之间的循环。

  • 在“已连接”状态下,设备拥有到推送通知服务器的活动连接并且可实时接收通知。

    • 在任何给定时间,70-80% 的设备都应处于该状态。

  • 在“已暂时断开连接”状态下,设备已过渡到临时状态,此时它失去了与推送通知服务器的连接并且一旦设备上出现了可用的有效 Internet 连接,它将立即主动尝试重新连接。

    • 设备最多可 24 小时保持此状态。

    • 在此期间,在未超过队列已满限值 (30) 时发送到设备的所有通知,将存储在服务器上以便稍后传递。

    • 设备进入此状态的常见原因已在下面的已短暂断开连接指南中列出。

    • 在任何给定时间,平均高达 30% 的设备会返回此状态。

  • 在“已断开连接”状态下,设备已从推送通知服务器断开超过 24 小时,但一旦设备上出现可用的有效 Internet 连接时,它仍会立即主动尝试以便重新连接到推送服务通知器。

    • 设备进入“已断开连接”状态后,该设备的所有队列消息以及发送到该设备的任何新消息都将被放弃,并且在设备重新连接到推送通知服务器后不会进行发送。

    • 移动设备断开连接通常是所有者有意为之,即用户有意禁用数据连接或切断设备电源。

    • 在任何给定时间,平均 10-15% 的设备会返回此状态。

Transition flow for device connection status

发生这种响应代码的原因各种各样,其中包括但不限于:

  • 为了减少网络负载和延迟,移动运营商网络配置可能在允许持久数据连接处于活动状态的时间上具有很大差异。推送通知客户端尝试缓解这些持久数据连接限制,但是存在下限,过了下限之后便不足以缓解这种情况。由于数据连接被中断,因此可能会导致设备经历“确定/已收到/已暂时断开连接/活动”状态。

  • 设备不在其运营商的覆盖范围之内,并且用户已选择在漫游时禁用数据连接。

  • 设备具有“即付即用”计划并且已暂时禁用数据连接或具有限制数据计划选项。

  • 设备在覆盖范围的边缘并且数据连接不可靠。

  • 如果正在使用 Wi-Fi 并且手机网络数据不可用,则设备必须具有到 Internet 的明确路径才能收到推送通知。这可能是某些公司网络的问题。

  • 用户已启用数据感测并已经超过其数据计划限制,因此将禁用推送通知,直至他们回到正常的数据计划内。 在这种情况下,可能会将该用户从“已短暂断开连接”过渡到“已断开连接”,并且在他们回归正常计划之前不会进行恢复。

  • 用户已启用“节电模式”并且显示节电模式指示器(系统托盘中电池图标上的红心)。 在此状态下,将关闭推送连接以节省电池电量。 如果节电模式长时间处于活动状态,该设备最终会过渡到“已断开连接”状态。

  • 设备在手机网络和 Wi-Fi 连接之间交替,并且连接处于不稳定状态。

显示: