0

我在使用 UWP 推送通知时遇到以下问题。

设想:

  1. Foreground 为推送通知注册了一个后台任务,但也希望收到传入推送的通知,因此它获取一个通道,使用该通道更新服务器,然后挂钩该通道上的事件。

  2. 推送通知进来

  3. 后台任务启动并正常工作。它还检查频道 URI 是否已更改,如果已更改,则使用新的 uri 更新服务器。

结果:

前台应用程序不再接收通道上的传入推送,因为后台任务使用与前台应用程序正在侦听的不同的通道 uri 更新了服务器。

在 uri 可能发生更改后,前台应用程序继续侦听推送通知的正确方法是什么?


更新的问题澄清:

第 1 步前台应用程序代码:

var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
channel.PushNotificationReceived += OnPushNotificationReceived;
//<update server with channel.Uri

步骤 2后台任务启动并检查新的频道 uri:

var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
//update server with channel uri

问题

如果第 2 步中的通道 uri 发生变化,则第 1 步中的偶数处理程序将不再被调用。

4

1 回答 1

0

因为后台任务使用与前台应用程序正在侦听的不同频道 uri 更新了服务器。

不,您的理解不正确。让我们首先检查如何发送推送通知的步骤:

  1. 您的应用从通用 Windows 平台请求推送通知通道。
  2. Windows 要求 WNS 创建一个通知通道。该通道以统一资源标识符 (URI) 的形式返回给调用设备。
  3. 通知通道 URI 由 Windows 返回到您的应用程序。
  4. 您的应用程序将 URI 发送到您自己的云服务。然后,您将 URI 存储在您自己的云服务上,以便在发送通知时可以访问 URI。
  5. 当您的云服务有更新要发送时,它会使用通道 URI 通知 WNS。这是通过通过安全套接字层 (SSL) 发出 HTTP POST 请求(包括通知负载)来完成的。此步骤需要身份验证。
  6. WNS 接收请求并将通知路由到适当的设备。

在此处输入图像描述

那么,如果你理解了这些步骤,你会发现向合适的设备发送通知的关键是你需要请求一个通知通道。无论通道 URI 是否更新,此通道 URI 对于每个设备都是唯一的。因此,即使你的 UWP 应用的后台任务更新了你的云服务上的通道 URI,也不会影响设备接收通知。只要您在使用此频道URI发送通知时,确保频道URI是最新的,那么您的设备将始终收到通知(除了某些特殊情况,例如,设备关机或设备在节电器等)。

请阅读Windows 推送通知服务 (WNS) 概述以获取更多详细信息。

在 uri 可能发生更改后,前台应用程序继续侦听推送通知的正确方法是什么?

你说的不对。“侦听推送通知”和“uri 可能已更改”之间没有关系。

如果您想在设备收到通知时执行一些操作,您可以使用通知侦听器在收到通知时执行特定操作。

于 2017-10-13T08:48:00.503 回答