Как подтвердить получение необработанного сообщения WNS в фоновой задаче в процессе? - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть приложение UWP для установки Windows 10 для получения уведомлений Raw и Toast через WNS.Я могу правильно получать сообщения, находясь на переднем плане и в то время как в фоновом режиме.

На переднем плане я устанавливаю обработчик PushNotificaitonChannel.PushNotificationReceived, а в обработчике я устанавливаю args.Cancel == true после обработки сообщения.

Для фоновой обработки я регистрирую в процессефоновая задача с использованием PushNotificationTrigger ().Это прекрасно работает, за исключением одной сложной проблемы: я часто получаю дубликаты необработанных уведомлений.Количество дубликатов может варьироваться от 1 до 20+.

Я видел такое поведение на многих различных поколениях Windows, начиная со сборки 14393 и заканчивая последней выпущенной сборкой 17763.

Я могу воспроизвести дубликаты в Visual Studio и заметил, что стеки вызовов различаются междупервая квитанция и дубликаты квитанций.Я не нашел ни одного состояния, скрытого в собственных / COM структурах данных, которые указывают, как остановить дубликаты.Я могу опубликовать трассировки стека, если это поможет.

Я надеюсь, что кто-то другой знает, как это остановить - каким-то образом подтвердить получение необработанного сообщения WNS в фоновой задаче в процессе.

Большое спасибо за чтение и обдумывание этой проблемы.

РЕДАКТИРОВАТЬ: работая над минимальным примером, я обнаружил следующую модель поведения.

  1. тестовое приложение на переднем плане, отправка необработанного push-сообщения;получено нормально
  2. закрыть приложение с помощью обычной кнопки закрытия;приложение не запущено
  3. отправьте новый raw push;приложение запускается в фоновом режиме и получает сырой толчок;приложение переходит в состояние ожидания
  4. (приложение все еще приостановлено) отправка нового необработанного push-сообщения;приложение начинает работать;тот же грубый толчок получил ДВАЖДЫ;приложение возвращается к приостановленному
  5. , это может происходить любое количество раз, и необработанный толчок только когда-либо получен ДВАЖДЫМ
  6. уничтожением приложения (с помощью End Task в Task Manager);приложение не запущено
  7. отправьте новый raw push;приложение начинает работать;тот же грубый толчок получил ДВАЖДЫ (как в # 4);приложение возвращается к приостановленному
  8. и самое странное из всех: отправляет новый необработанный push-запрос, и приложение получает необработанный push-запрос ТРИ раза;приложение возвращается в режим ожидания
  9. сейчас, каждый необработанный пуш получает три раза;если я снова закрою приложение и отправлю статистический толчок, число дуплей увеличится на единицу.
...