本主题介绍发送推送通知所需的服务到服务 Web API 和协议。
有关推送通知和 WNS 概念、要求和作的概念性讨论,请参阅 Windows 推送通知服务(WNS)概述 。
请求和接收访问令牌
本部分介绍使用 WNS 进行身份验证时涉及的请求和响应参数。
访问令牌请求
HTTP 请求将发送到 WNS,以对云服务进行身份验证并检索返回的访问令牌。 请求通过安全套接字层 (SSL) 发给 https://login.live.com/accesstoken.srf
。
访问令牌请求参数
云服务使用“application/x-www-form-urlencoded”格式在 HTTP 请求正文中提交这些必需参数。 必须确保所有参数都经过 URL 编码。
参数 | 必选 | DESCRIPTION |
---|---|---|
授权类型 (grant_type) | 真实 | 必须设置为 client_credentials 。 |
客户编号 | 真 | 为云服务在将应用注册到 Microsoft 应用商店时分配的包安全标识符(SID)。 |
客户端密钥 | 真实的 | 在您将应用注册到 Microsoft 应用商店时所分配的云服务密钥。 |
范围 | 真实 | 必须设置为 notify.windows.com |
访问令牌响应
WNS 对云服务进行身份验证,如果成功,则返回“200 OK”,并包括访问令牌。 否则,WNS 使用 OAuth 2.0 协议草案中所述的相应 HTTP 错误代码进行响应。
访问令牌响应参数
如果云服务成功进行身份验证,则会在 HTTP 响应中返回访问令牌。 此访问令牌可在通知请求中使用,直到它过期。 HTTP 响应使用“application/json”媒体类型。
参数 | 必选 | DESCRIPTION |
---|---|---|
访问令牌 (access_token) | 真 | 云服务在发送通知时将使用的访问令牌。 |
令牌类型 | 假 | 返回值始终为 bearer 。 |
响应代码
HTTP 响应代码 | DESCRIPTION |
---|---|
200 正常 | 请求成功。 |
400 错误的请求 | 身份验证失败。 有关响应参数,请参阅 OAuth 草稿 请求注释(RFC)。 |
示例:
下面显示了成功的身份验证响应示例:
HTTP/1.1 200 OK
Cache-Control: no-store
Content-Length: 422
Content-Type: application/json
{
"access_token":"EgAcAQMAAAAALYAAY/c+Huwi3Fv4Ck10UrKNmtxRO6Njk2MgA=",
"token_type":"bearer",
"expires_in": 86400
}
发送通知请求并接收响应
本部分描述 WNS 的 HTTP 请求中用于传递通知以及答复中所涉及的标头。
- 发送通知请求
- 发送通知响应
- 不支持的 HTTP 功能
发送通知请求
发送通知请求时,调用应用通过 SSL 发出 HTTP 请求,该请求会发送到通道统一资源标识符(URI)。 “Content-Length”是必须在请求中指定的标准 HTTP 标头。 所有其他标准标头都是可选的或不支持的。
此外,此处列出的自定义请求标头可用于通知请求。 有些标头是必需的,而另一些标头是可选的。
请求参数
标题名称 | 必选 | DESCRIPTION |
---|---|---|
授权 | 真 | 用于对通知请求进行身份验证的标准 HTTP 授权标头。 云服务在此标头中提供其访问令牌。 |
内容类型(Content-Type) | 真 | 标准 HTTP 授权标头。 对于 toast、磁贴和锁屏提醒通知,此标头必须设置为 text/xml 。 对于原始通知,此标头必须设置为 application/octet-stream 。 |
内容长度 | 真实 | 用于表示请求有效负载大小的标准 HTTP 授权标头。 |
X-WNS-Type | 真实 | 在有效负载中定义通知类型:磁贴、弹出消息、徽章或原始。 |
X-WNS-Cache-Policy | 假 | 启用或禁用通知缓存。 此标头仅适用于动态磁贴、徽章和原始通知。 |
X-WNS-RequestForStatus | 假 | 在通知响应中请求设备状态和 WNS 连接状态。 |
X-WNS-Tag | 假 | 用于提供具有标识标签的通知的字符串,用于支持通知队列的磁贴。 此标头仅适用于磁贴通知。 |
X-WNS-TTL | 假 | 整数值,以秒为单位,指定生存时间(TTL)。 |
MS-CV | 假 | 用于请求的关联向量 值。 |
重要说明
- 内容长度和内容类型是发送到客户端的通知中包含的唯一标准 HTTP 标头,无论请求中是否包括其他标准标头。
- 如果不支持该功能,则忽略所有其他标准 HTTP 标头或返回错误。
- 从 2023 年 2 月开始,当设备脱机时,WNS 将仅缓存一个磁贴通知。
授权
授权标头用于指定调用方凭据,遵循 持有者 令牌的 OAuth 2.0 授权方法。
语法格式是由字符串字面量“Bearer”开始,后接一个空格,接着是你的访问令牌。 通过发出上述访问令牌请求来检索此访问令牌。 相同的访问令牌可用于后续通知请求,直到它过期。
此标头是必需的。
Authorization: Bearer <access-token>
X-WNS-Type
这些是 WNS 支持的通知类型。 此标头指示通知的类型以及 WNS 如何处理通知。 通知到达客户端后,将针对此指定类型验证实际有效负载。 此标头是必需的。
X-WNS-Type: wns/toast | wns/badge | wns/tile | wns/raw
价值 | DESCRIPTION |
---|---|
wns/徽章 | 在磁贴上创建徽章覆盖的通知。 通知请求中包含的 Content-Type 标头必须设置为 text/xml 。 |
wns/磁贴 | 更新磁贴内容的通知。 通知请求中包含的 Content-Type 标头必须设置为 text/xml 。 |
wns/toast | 在客户端上显示 Toast 提醒。 通知请求中包含的 Content-Type 标头必须设置为 text/xml 。 |
wns/raw | 可以包含自定义有效负载并直接传递到应用的通知。 通知请求中包含的 Content-Type 标头必须设置为 application/octet-stream 。 |
X-WNS-Cache-Policy
当通知目标设备处于脱机状态时,WNS 将为每个通道 URI 缓存一个徽章通知、一个磁贴和一个 Toast 通知。 默认情况下,不会缓存原始通知,但如果启用了原始通知缓存,则会缓存一个原始通知。 项不会无限期保存在缓存中,将在合理的时间段后删除。 否则,当设备下一次联机时,将传送缓存的内容。
X-WNS-Cache-Policy: cache | no-cache
价值 | DESCRIPTION |
---|---|
缓存 | 违约。 如果用户处于脱机状态,则会缓存通知。 这是磁贴和徽章通知的默认设置。 |
不缓存 | 如果用户处于脱机状态,则不会缓存通知。 这是原始通知的默认设置。 |
X-WNS-RequestForStatus
指定响应是否应包括设备状态和 WNS 连接状态。 此标头是可选的。
X-WNS-RequestForStatus: true | false
价值 | DESCRIPTION |
---|---|
是 | 返回响应中的设备状态和通知状态。 |
假 | 违约。 不要返回设备状态和通知状态。 |
X-WNS-Tag
将 标记 标签分配给通知。 当应用选择通知循环时,该标记用于通知队列中磁贴的替换策略。 如果队列中已存在具有此标记的通知,则具有相同标记的新通知将取代该通知。
注释
此标头是可选的,仅在发送磁贴通知时使用。
X-WNS-Tag: <string value>
价值 | DESCRIPTION |
---|---|
字符串值 | 不超过 16 个字符的字母数字字符串。 |
X-WNS-TTL
指定通知的 TTL(过期时间)。 这通常不需要,但如果你希望确保通知不会晚于特定时间显示,则可以使用。 TTL 以秒为单位指定,相对于 WNS 接收请求的时间。 指定 TTL 后,设备将不会在该时间后显示通知。 请注意,如果 TTL 太短,则这可能会导致通知根本不显示。 一般情况下,到期时间至少以分钟为单位。
此标头是可选的。 如果未指定任何值,通知不会过期,并且将在正常通知替换方案下替换。
X-WNS-TTL:<integer value>
价值 | DESCRIPTION |
---|---|
整数值 | WNS 收到请求后通知的生命周期(以秒为单位)。 |
X-WNS-SuppressPopup
注释
对于 Windows Phone Store 应用,您可以选择抑制 Toast 通知的界面显示,而将通知直接发送到操作中心。 这样就可以以无提示方式传递通知,这是不太紧急通知的潜在优越选项。 此标头是可选的,仅在 Windows Phone 通道上使用。 如果在 Windows 渠道中包含此标头,您的通知将被丢弃,并将收到 WNS 的错误响应。
X-WNS-SuppressPopup:true | false
价值 | DESCRIPTION |
---|---|
是 | 将 Toast 通知直接发送到操作中心,不要显示 Toast 用户界面。 |
假 | 违约。 显示 Toast UI,并将通知添加到操作中心。 |
X-WNS-Group
注释
仅当这些 Toast 通知被标记为属于不同组时,Windows Phone 应用商店应用的操作中心才能显示具有相同标签的多个通知。 例如,考虑食谱书籍应用。 每个食谱将通过标签进行识别。 包含对该食谱评论的 toast 将具有食谱的标签,但会有评论组标签。 包含该食谱分级的 Toast 将再次具有该食谱的标记,但会具有分级组标签。 这些不同的组标签将允许两个 Toast 通知同时显示在操作中心。 此标头是可选的。
X-WNS-Group:<string value>
价值 | DESCRIPTION |
---|---|
字符串值 | 不超过 16 个字符的字母数字字符串。 |
X-WNS-Match
注释
与 HTTP DELETE 方法一起使用,可用于删除特定的通知,一组通知(按标签或分组),或从 Windows Phone 应用的通知中心删除所有通知。 此标头可以指定一个组、一个标记或两者。 HTTP DELETE 通知请求中需要此标头。 忽略此通知请求中包含的任何有效负载。
X-WNS-Match: type: wns/toast; group=<string value>
; tag=<string value>
| type: wns/toast; group=<string value>
| type: wns/toast; tag=<string value>
| type: wns/toast; all
价值 | DESCRIPTION |
---|---|
type:wns/toast;group=<string value> ;tag=<string value> |
删除标有指定标记和组的单个通知。 |
type:wns/toast;group=<string value> |
删除标有指定组的所有通知。 |
type:wns/toast;tag=<string value> |
删除标有指定标记的所有通知。 |
type:wns/toast;都 | 从操作中心清除您应用的所有通知。 |
发送通知响应
WNS 处理通知请求后,它会在响应中发送 HTTP 消息。 本部分讨论可在该响应中找到的参数和标头。
响应参数
标题名称 | 必选 | DESCRIPTION |
---|---|---|
X-WNS-Debug-Trace | 假 | 应记录的调试信息,以帮助排查报告问题时遇到的问题。 |
X-WNS-DeviceConnectionStatus | 假 | 只有在通知请求中通过 X-WNS-RequestForStatus 标头请求时,才会返回设备状态。 |
X-WNS-Error-Description | 假 | 应记录人工可读的错误字符串,以帮助进行调试。 |
X-WNS-Msg-ID | 假 | 用于调试的唯一通知标识符。 报告问题时,应记录此信息以帮助进行故障排除。 |
X-WNS-Status | 假 | 指示 WNS 是否已成功接收和处理通知。 报告问题时,应记录此信息以帮助进行故障排除。 |
MS-CV | 假 | 应记录的调试信息,以帮助排查报告问题时遇到的问题。 |
X-WNS-Debug-Trace
此标头以字符串的形式返回有用的调试信息。 建议记录此标头以帮助开发人员调试问题。 向 WNS 报告问题时,需要此标头以及 X-WNS-Msg-ID 标头和 MS-CV。
X-WNS-Debug-Trace:<string value>
价值 | DESCRIPTION |
---|---|
字符串值 | 字母数字字符串。 |
X-WNS-DeviceConnectionStatus
在通知请求的 X-WNS-RequestForStatus 标头中请求时,此标头会将设备状态返回给调用应用程序。
X-WNS-DeviceConnectionStatus:已连接 | 已断开连接 | 暂时断开连接
价值 | DESCRIPTION |
---|---|
已连接 | 设备处于联机状态并连接到 WNS。 |
断开 | 设备处于脱机状态,未连接到 WNS。 |
tempconnected (已弃用) | 设备暂时丢失了与 WNS 的连接,例如,当 3G 连接断开或笔记本电脑上的无线交换机被关闭时。 通知客户端平台将其视为临时中断,而不是有意断开连接。 |
X-WNS-Error-Description
此标头提供一个应记录的便于阅读的错误字符串,以帮助进行调试。
X-WNS-Error-Description: <string value>
价值 | DESCRIPTION |
---|---|
字符串值 | 字母数字字符串。 |
X-WNS-Msg-ID
此标头用于为调用方提供通知的标识符。 建议记录此header以帮助调试问题。 向 WNS 报告问题时,需要此标头以及 X-WNS-Debug-Trace 和 MS-CV。
X-WNS-Msg-ID:<string value>
价值 | DESCRIPTION |
---|---|
字符串值 | 不超过 16 个字符的字母数字字符串。 |
X-WNS-Status
此标头描述 WNS 如何处理通知请求。 这可以使用,而不是将响应代码解释为成功或失败。
X-WNS-Status:已收到 | 已丢弃 | 通道节流
价值 | DESCRIPTION |
---|---|
收到 | 通知已由 WNS 接收和处理。 注意:这不能保证设备收到通知。 |
下降 | 由于错误或客户端已显式拒绝这些通知,通知被显式删除。 如果设备处于脱机状态,Toast 通知也会被删除。 |
频道限流 | 由于应用服务器超出了此特定通道的速率限制,因此已删除通知。 |
MS-CV
此标头提供与主要用于调试的请求相关的相关向量。 如果请求中提供了 CV,则 WNS 将使用该值;否则,WNS 将生成一个 CV 并进行回复。 向 WNS 报告问题时,需要此标头以及 X-WNS-Debug-Trace 和 X-WNS-Msg-ID 标头。
重要
如果提供自己的 CV,请为每个推送通知请求生成新的 CV。
MS-CV:<string value>
价值 | DESCRIPTION |
---|---|
字符串值 | 遵循 相关矢量标准 |
响应代码
每个 HTTP 消息都包含其中一个响应代码。 WNS 建议开发人员记录响应代码以用于调试。 当开发人员向 WNS 报告问题时,需要提供响应代码和标头信息。
HTTP 响应代码 | DESCRIPTION | 建议的措施 |
---|---|---|
200 正常 | 通知已被 WNS 接受。 | 无必需。 |
400 错误的请求 | 一个或多个标头被错误指定或与其他标头冲突。 | 记录请求的详细信息。 检查请求并与此文档进行比较。 |
401 未授权 | 云服务未提供有效的身份验证票证。 OAuth 票证可能无效。 | 通过使用访问令牌请求对云服务进行身份验证,来请求一个有效的访问令牌。 |
403 禁止 | 即使通过身份验证,云服务也无权向此 URI 发送通知。 | 请求中提供的访问令牌与请求通道 URI 的应用的凭据不匹配。 确保您的应用程序清单中的包名称与控制台中提供给应用的云服务凭据匹配。 |
404 未找到 | 通道 URI 无效或 WNS 无法识别。 | 记录请求的详细信息。 不要向此通道发送进一步通知;此地址的通知将失败。 |
405 方法不被允许 | 无效的方法 (GET, CREATE);仅允许 POST(Windows 或 Windows Phone)或 DELETE(仅限 Windows Phone)。 | 记录请求的详细信息。 切换到使用 HTTP POST。 |
406 不可接受 | 云服务超出了其流量限制。 | 请在响应中的 Retry-After 标头值之后发送请求 |
410 消失 | 通道已过期。 | 记录请求的详细信息。 不要向此通道发送进一步通知。 让应用请求新的通道 URI。 |
410 域名已被阻止 | WNS 已阻止发送域。 | 不要向此通道发送进一步通知。 WNS 已因为滥用推送通知而阻止了发送域。 |
413 请求实体太大 | 通知有效负载超过 5000 字节大小限制。 | 记录请求的详细信息。 检查负载,确保其符合大小限制。 |
500 内部服务器错误 | 内部失败导致通知传递失败。 | 记录请求的详细信息。 通过开发人员论坛报告此问题。 |
503 服务不可用 | 服务器当前不可用。 | 记录请求的详细信息。 通过开发人员论坛报告此问题。 如果观察到 Retry-After 标头,请在响应中的 Retry-After 标头值之后发送请求。 |
不支持的 HTTP 功能
WNS Web 接口支持 HTTP 1.1,但不支持以下功能:
- 分块
- 管道处理 (POST 不是幂等的)
- 尽管受支持,但开发人员应禁用 Expect-100,因为发送通知时会引入延迟。