У меня есть приложение UWP для установки Windows 10 для получения уведомлений Raw и Toast через WNS.Я могу правильно получать сообщения, находясь на переднем плане и в то время как в фоновом режиме.
На переднем плане я устанавливаю обработчик PushNotificaitonChannel.PushNotificationReceived, а в обработчике я устанавливаю args.Cancel == true после обработки сообщения.
Для фоновой обработки я регистрирую в процессефоновая задача с использованием PushNotificationTrigger ().Это прекрасно работает, за исключением одной сложной проблемы: я часто получаю дубликаты необработанных уведомлений.Количество дубликатов может варьироваться от 1 до 20+.
Я видел такое поведение на многих различных поколениях Windows, начиная со сборки 14393 и заканчивая последней выпущенной сборкой 17763.
Я могу воспроизвести дубликаты в Visual Studio и заметил, что стеки вызовов различаются междупервая квитанция и дубликаты квитанций.Я не нашел ни одного состояния, скрытого в собственных / COM структурах данных, которые указывают, как остановить дубликаты.Я могу опубликовать трассировки стека, если это поможет.
Я надеюсь, что кто-то другой знает, как это остановить - каким-то образом подтвердить получение необработанного сообщения WNS в фоновой задаче в процессе.
Большое спасибо за чтение и обдумывание этой проблемы.
РЕДАКТИРОВАТЬ: работая над минимальным примером, я обнаружил следующую модель поведения.
- тестовое приложение на переднем плане, отправка необработанного push-сообщения;получено нормально
- закрыть приложение с помощью обычной кнопки закрытия;приложение не запущено
- отправьте новый raw push;приложение запускается в фоновом режиме и получает сырой толчок;приложение переходит в состояние ожидания
- (приложение все еще приостановлено) отправка нового необработанного push-сообщения;приложение начинает работать;тот же грубый толчок получил ДВАЖДЫ;приложение возвращается к приостановленному
- , это может происходить любое количество раз, и необработанный толчок только когда-либо получен ДВАЖДЫМ
- уничтожением приложения (с помощью End Task в Task Manager);приложение не запущено
- отправьте новый raw push;приложение начинает работать;тот же грубый толчок получил ДВАЖДЫ (как в # 4);приложение возвращается к приостановленному
- и самое странное из всех: отправляет новый необработанный push-запрос, и приложение получает необработанный push-запрос ТРИ раза;приложение возвращается в режим ожидания
- сейчас, каждый необработанный пуш получает три раза;если я снова закрою приложение и отправлю статистический толчок, число дуплей увеличится на единицу.