在 Windows Phone 8.1 上的推送通知中传递部分参数

Passing partial parameter in a push notification on Windows Phone 8.1

我正在尝试将带有参数的 toast 通知发送到 Windows Phone 8.1 设备,因此当用户点击 toast 时,应用程序将在应用程序中显示特定页面,如这篇 MSDN 文章 https://msdn.microsoft.com/library/windows/apps/jj662938(v=vs.105).aspx

中所述

这是我用来添加参数的片段:

<wp:Param>?cmd=command1 </wp:Param>

这是我在应用程序中阅读它的方式:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e){
            base.OnNavigatedTo(e);
            string strVal1 = this.NavigationContext.QueryString["cmd"];
        }

进行这些更改后它可以正常工作,但仅限于第一次通知。在所有后续通知中,应用程序中读取的参数值与第一个通知中的相同,无论我从服务器发送了什么。

这是一个例子:

  1. 我正在向通知负载中包含此参数的设备发送通知:<wp:Param>?cmd=command1 </wp:Param> this.NavigationContext.QueryString("cmd") 中的值是 command1,它应该是.
  2. 然后我用这个参数参数发送第二个通知 <wp:Param>?cmd=command2 </wp:Param> this.NavigationContext.QueryString("cmd") 中的 cmd 值仍返回为 "command1",而不是 command2,因为它应该是。在我强制重启应用程序之前,它对所有后续通知都是这样工作的。

这是我试过的方法:

  1. 检查了 OnNavigatedTo 事件的 NavigationEventArgs 参数中的 Uri 值,它与我在 NavigationContext 中看到的相同。
  2. 双重检查从服务器发送的通知负载(正确)
  3. 已检查msdn/Whosebug/google。
  4. 已在 8.1 模拟器和设备上进行检查(效果相同)

问题:

  1. 我是否必须在应用程序中执行某些操作(idk、清除 NavigationContext 或其他),以便下一次通知会有所不同?
  2. 是否有人真正拥有使用部分参数的实时应用程序(不是具有完整 url 的服务器驱动导航,而是传递给应用程序的部分 url + 从应用程序内部相应的导航) 并且它适用于多个后续通知?

找出问题所在。重新启动应用程序时会触发两个 OnNavigated 事件。第一个具有 System.Windows.Navigation.NavigationMode.Reset 类型,它具有重置旧页面的数据(在我的例子中,使用旧通知中的数据)。第二个是 System.Windows.Navigation.NavigationMode.New 并且包含来自新通知的数据。

对导航模式进行简单检查以确保其属于 .New 修复了该问题:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e){
        base.OnNavigatedTo(e);
    if (e.NavigationMode == System.Windows.Navigation.NavigationMode.New)){
    // custom navigation logic based on the data within <wp:Param/>
    }
}