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

时间:2015-10-08 04:03:43

标签: notifications push-notification windows-phone-8.1

我尝试向Windows Phone 8.1设备发送带有参数的Toast通知,因此当用户点击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(&#34; cmd&#34;)中的值为command1,as它应该是。
  2. 然后我使用此参数参数发送第二个通知 <wp:Param>?cmd=command2 </wp:Param> this.NavigationContext.QueryString(&#34; cmd&#34;)中的cmd值仍然作为&#34; command1&#34;返回。而不是命令2应该是。在我强行重启应用程序之前,它对所有后续通知都有效。
  3. 以下是我尝试的内容:

    1. 检查OnNavigatedTo事件的NavigationEventArgs参数中的Uri值,它与我在NavigationContext中看到的相同。
    2. 从服务器发送的双重检查通知有效负载(它是正确的)
    3. 已检查msdn / stackoverflow / google。
    4. 检查8.1仿真器和设备(它的工作原理相同)
    5. 问题:

      1. 我是否必须在应用程序中执行某些操作(idk,清除NavigationContext或其他内容),因此下一次通知会有所不同?
      2. 有没有人真的有一个使用部分参数的实时应用程序(不是服务器驱动导航的完整网址,而是部分网址传递给应用程序+应用程序内的相应导航),它适用于多个后续通知?< / LI>

1 个答案:

答案 0 :(得分:1)

找出问题所在。重新启动应用程序时会触发两个OnNavigated事件。第一个类型为System.Windows.Navigation.NavigationMode.Reset,它具有重置旧页面的数据(在我的情况下,使用旧通知中的数据)。第二个是System.Windows.Navigation.NavigationMode.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/>
    }
}