3

I'm writing a windows desktop app that relies on notifications to work. However, the event handler code, PushNotificationReceived on the channel does not seem to actually fire when I receive a notification. The following code is called to get the channel before its uri is sent to my server:

internal async Task<PushNotificationChannel> GetChannel()
    {
        PushNotificationChannel pnc;
        try
        {
            pnc = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
            if (_channel == null || !pnc.Uri.Equals(_channel.Uri))
            {
                _channel = pnc;
                _channel.PushNotificationReceived += OnPushNotificationReceived;
                Debug.WriteLine(_channel.Uri);
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
            _channel = null;
        }
               dispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
        return _channel;
    }

Such that anytime the channel is created or updated (via a different channel uri), it should assign the new channel's PushNotificationReceived event to the following (which is basically lifted from msdn's example):

void OnPushNotificationReceived(PushNotificationChannel sender, PushNotificationReceivedEventArgs e)
    {
        string typeString = String.Empty;
        string notificationContent = String.Empty;
        switch (e.NotificationType)
        {
            //
            //other notification types omitted for brevity
            //
            case PushNotificationType.Toast:
                notificationContent = e.ToastNotification.Content.GetXml();
                typeString = "Toast";
                // Setting the cancel property prevents the notification from being delivered. It's especially important to do this for toasts:
                // if your application is already on the screen, there's no need to display a toast from push notifications.
                e.Cancel = true;
                break;
        }

        Debug.WriteLine("Received notification, with payload: {0}", notificationContent);

        string text = "Received a " + typeString + " notification, containing: " + notificationContent;

        var ignored = dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            MainPage.Current.ClearBanner();
        });
    }

Importantly, "MainPage.Current" is a reference to the app's main page as a static variable. The clear banner line simply removes a pink banner from the main page (just trying to get something simple working to start).

However, the code never seems to fire (no debug statement, pink banner remains). I am successfully getting the toast notification, and clicking on it will set focus to my app, so it's definitely not going to the wrong place.

Is there something I am doing wrong or some way to debug the notifications themselves?

Mike Evans
  • 31
  • 1

0 Answers0