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

Notifications 在Windows Phone 8.1上的推送通知中传递部分参数,notifications,push-notification,windows-phone-8.1,Notifications,Push Notification,Windows Phone 8.1,我正在尝试向Windows Phone 8.1设备发送带有参数的toast通知,因此当用户点击toast时,应用程序将显示应用程序中的特定页面,如本MSDN文章所述 这是我用来添加参数的代码段: <wp:Param>?cmd=command1 </wp:Param> 进行这些更改后,它将正常工作,但仅适用于第一次通知。在所有后续通知中,应用程序中读取的参数值与第一次通知中的值相同,无论我从服务器发送了什么 以下是一个例子: 我正在向通知负载中具有以下参数的设备发送通知:

我正在尝试向Windows Phone 8.1设备发送带有参数的toast通知,因此当用户点击toast时,应用程序将显示应用程序中的特定页面,如本MSDN文章所述

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

<wp:Param>?cmd=command1 </wp:Param>
进行这些更改后,它将正常工作,但仅适用于第一次通知。在所有后续通知中,应用程序中读取的参数值与第一次通知中的值相同,无论我从服务器发送了什么

以下是一个例子:

  • 我正在向通知负载中具有以下参数的设备发送通知:
    ?cmd=command1
    此.NavigationContext.QueryString(“cmd”)中的值应为command1
  • 然后我用这个参数发送第二个通知
    ?cmd=command2
    this.NavigationContext.QueryString(“cmd”)中的cmd值仍然作为“command1”而不是command2返回。在我强制重启应用程序之前,所有后续通知都是如此
  • 以下是我尝试过的:

  • 检查了OnNavigatedTo事件的NavigationEventArgs参数中的Uri值,该值与我在NavigationContext中看到的值相同
  • 仔细检查从服务器发送的通知有效负载(正确)
  • 选中msdn/stackoverflow/google
  • 已在8.1 emulator和设备上检查(其工作原理相同)
  • 问题:

  • 我是否必须在应用程序中执行某些操作(idk、clear NavigationContext或其他),以便在下次通知中有所不同
  • 是否有人拥有使用部分参数的live应用程序(不是带有完整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/>
        }
    }
    
    受保护的覆盖无效OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e){
    基地。导航到(e);
    if(e.NavigationMode==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/>
        }
    }