推送通知功能迁移

本主题包含推送通知功能区域中的迁移指南。

重要

当前仅支持原始推送通知。

API 和/或功能差异摘要

推送通知可以分为这四个独立的阶段。

阶段 UWP Windows 应用 SDK
标识 合作伙伴中心 (MSA) Azure 应用注册 (AAD)
通道请求 同步 异步
Azure 应用注册 ID
内置重试逻辑(重试 5 次)
激活 进程内, PushTrigger*, COM 激活* 进程内, PushTrigger*, COM 激活*, 协议激活
发送推送通知 使用 login.live.com 终结点接收访问令牌 使用 https://login.microsoftonline.com/common/oauth2/token 终结点进行令牌请求

* 支持 Windows 10 版本 2004(10.0;内部版本 19041)及更高版本。

标识设置

在 Windows 应用 SDK 中,推送通知功能使用来自 Azure应用注册 (AAD) 的标识,这样就无需为了使用推送通知而必须从合作伙伴中心获得包系列名称 (PFN)。

通道请求

通道请求是异步处理的,并且需要 GUID 作为参数的一部分(你在 AAD 应用注册中收到 GUID)。 你将使用 GUID 作为你的标识,代替 UWP 应用使用的 PFN。 如果请求遇到可重试错误,通知平台将尝试多次重试。

Windows 应用 SDK 应用可以检查通道请求的状态。

激活

与 UWP 类似,Windows 应用 SDK 中的推送通知支持通过 PushNotificationTrigger 和 COM Activation 激活后台任务(请参阅使用后台任务支持你的应用)。 目前仅对打包应用提供对这一功能的支持。

  • UWP 应用可以通过进程内或进程外后台任务激活。
  • 对于打包的 Windows 应用 SDK 应用,后台任务注册由 PushNotificationTrigger 的 Windows 应用 SDK 处理。
  • 如果你从 UWP 应用迁移到未打包的 Windows 应用 SDK 应用,那么你将通过协议激活来激活,而不是通过后台任务激活。

发送推送通知

Windows 应用 SDK 应用必须从 AAD 终结点(而不是 MSA 终结点)请求访问令牌。

访问令牌请求

对于 UWP 应用:

POST /accesstoken.srf HTTP/1.1
Host: login.live.com
Content-Type: application/x-www-form-urlencoded
Cookie: MSCC=73.140.231.96-US
Content-Length: 112

grant_type=client_credentials&client_id=<AppID_Here>&client_secret=<Client_Secret_Here>&scope=notify.windows.com

对于 Windows App SDK 应用(AAD 访问令牌请求):

POST /common/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
Cookie: fpc=Ar4SqAsP2l9DsWjyp3SGu3Gjwv2tAQAAAOe6sNgOAAAA
Content-Length: 160

grant_type=client_credentials&client_id=<Azure_App_Registration_AppId_Here>&client_secret=<Azure_App_Registration_Secret_Here>&resource=https://wns.windows.com/

HTTP 发布到 WNS

向 WNS 发送 HTTP POST 请求方面,UWP 没有任何变化。 访问令牌仍然在授权标头中传递。

POST /?token=[ChannelURI] HTTP/1.1
Host: dm3p.notify.windows.com
Content-Type: application/octet-stream
X-WNS-Type: wns/raw
Authorization: Bearer [your access token]
Content-Length: 46

{ Sync: "Hello from the Contoso App Service" }