应用程序暂停时,WNS推送通知永远不会触发激活事件

时间:2015-03-03 19:47:23

标签: c# push-notification windows-phone-8.1 win-universal-app

我的头开始旋转:我有一个Windows Phone 8.1通用应用程序。在App.xaml.cs中,我实现了以下方法:

public sealed partial class App : Application
{
    public static bool isSuspended = false;

    public App()
    {
        this.InitializeComponent();
        this.Suspending += this.OnSuspending;
        this.Resuming += this.OnResuming;
    }

    private void OnSuspending(object sender, SuspendingEventArgs e)
    {
        SuspendingDeferral deferral = e.SuspendingOperation.GetDeferral();
        App.isSuspended = true;

        // TODO: Save application state and stop any background activity
        deferral.Complete();
    }

    private async void OnResuming(object sender, object e)
    {
        App.isSuspended = false;
    }
}

在我的MainPageVM(它是一个视图模型)中,我实现了以下方法:

private async void onPushNotificationReceived(PushNotificationChannel sender, PushNotificationReceivedEventArgs args)
{
    switch (args.NotificationType)
    {
        case PushNotificationType.Toast:
            if (App.isSuspended)
            {
                args.ToastNotification.Activated += this.toastNotification_Activated;
            }
            else
            {
                args.Cancel = true;
                this.manageNotification(args.ToastNotification.Content)
            }
            break;
        case PushNotificationType.Raw:
            break;
    }
}

private void toastNotification_Activated(ToastNotification sender, object args)
{
    ToastActivatedEventArgs tArgs = (ToastActivatedEventArgs)args;
    this.manageNotification(tArgs.Arguments);
}

当应用程序被杀或应用程序处于前台时,它运行良好。当应用程序处于后台时出现问题:当用户点击通知时,toastNotification_Activated永远不会被提升。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

当您的应用已暂停时,表示它未运行(app lifecycle at MSDN)。在这种情况下,当通知发出时,它不会被您声明的事件拦截,例如MSDN says

  

注意此过程仅适用于正在运行的应用。当应用程序未运行且未实现处理程序时系统发送的通知将正常传递 - 更新磁贴,显示toast,并将原始通知传递给后台任务(如果已实现)。

如果您想在后台处理通知,那么您可以考虑声明Background Task for it