RequestAccessKindAsync из Desktop Bridge

У меня есть настольное мостовое приложение Win32, которое использует фоновую задачу для получения push-уведомлений от WNS. Я использую API фоновых задач UWP более C++-WinRT

Я хотел бы иметь возможность получать push-уведомления, даже когда ОС находится в спящем режиме, чтобы она просыпалась, и приложение обрабатывало push-уведомления. По умолчанию ОС не просыпается. Это произошло только после ручного изменения значения настроек в System->Battery->See which apps are affecting your battery life-> Щелкните мое приложение -> Снимите флажок Let Windows decide (по умолчанию он всегда отмечен) и установите флажок Allow the app to run background taks. Теперь я хотел бы сделать это вручную над кодом для лучшего взаимодействия с пользователем.

API RequestAccessKindAsync позволяет пользователю чтобы изменить указанное выше значение параметра, показав всплывающее уведомление пользователю, и я мог бы сделать это без проблем в примере приложения UWP C#. Но тот же код не отображает всплывающие уведомления с моста моего рабочего стола через C++-WinRT. Он просто возвращает ложное значение для кода ниже

auto result = co_await BackgroundExecutionManager::RequestAccessKindAsync(BackgroundAccessRequestKind::AlwaysAllowed, 
    L"App needs to use background to catch push notifications while device is in sleep");

Кто-нибудь может подтвердить, что RequestAccessKindAsync API работает с десктопным мостом? Если нет, то как я могу убедиться, что ОС и приложение всегда смогут выйти из спящего режима, когда оно получит push-уведомление?

UPD: Поднят запрос на включение этого API с рабочего стола здесь


person miradham    schedule 08.02.2019    source источник
comment
Хотя упакованные приложения могут регистрировать фоновые задачи, только полностью приложения UWP могут работать как фоновая задача. Таким образом, если вы вызываете этот API из настольного приложения, он не будет работать.   -  person Xie Steven    schedule 11.02.2019
comment
@XavierXie-MSFT, вы хотите сказать, что я могу запустить этот API из своей фоновой задачи? Я пытался сделать так и получил тот же результат   -  person miradham    schedule 11.02.2019


Ответы (1)


Это недостающая функция. Когда мы разрабатывали этот API пару релизов назад, мы не предполагали, что настольные мостовые приложения будут вызывать его, но очевидно, что для поддержки этого есть вариант использования. Я уведомил команду об этом пробеле, но я также рекомендую вам зарегистрировать запрос функции здесь: https://wpdev.uservoice.com/

Два возможных обходных пути:
(1) вы можете добавить фиктивное/пустое приложение переднего плана UWP в приложение моста для настольных ПК. Затем вы можете запустить это при запуске и запросить фоновый доступ оттуда. Это будет немного некрасиво, но вы можете сделать так, чтобы это выглядело как заставка :-) (2) вы можете указать пользователю зайти в приложение «Настройки», чтобы ваше приложение всегда было разрешено. Вы можете помочь им сделать это с помощью глубокой ссылки на настройки экономии заряда батареи, но им все равно придется переключаться вручную.

person Stefan Wick MSFT    schedule 13.02.2019
comment
Я пробовал вариант (1) ранее. Я добавил фиктивное приложение UWP в манифест настольного моста в качестве второго приложения, и это решило мою проблему. Но я не могу загрузить пакет приложений с 2 ​​приложениями в Магазин. Как вы думаете, есть ли другой способ добавить фиктивный UWP в настольный мост? - person miradham; 13.02.2019
comment
Вы установили AppListEntry=none для второго приложения в appxmanifest (чтобы оно не отображалось в списке приложений)? С этим вы должны быть в состоянии представить в магазин. Если вы получаете ошибку WACK, игнорируйте ее, они должны принять ваше приложение. Если нет, пришлите мне письмо (swick [@] microsoft.com), и я помогу вам его утвердить. - person Stefan Wick MSFT; 13.02.2019
comment
Я добавил <uap:VisualElements AppListEntry="none" во второе приложение и вижу, что установлено одно настольное приложение (ранее там также был UWP). Но все равно получаю ошибку The Microsoft Store does not support a package containing more than one applications. Попробую загрузить это в магазин. - person miradham; 13.02.2019
comment
Да, игнорируйте это сообщение. Приложения, которые объявляют «runFullTrust», освобождаются от этого правила для пакетов с несколькими приложениями. - person Stefan Wick MSFT; 13.02.2019
comment
При загрузке моего приложения в магазин я получил следующую ошибку xxx.appx specifies a headless app. You don't have permission to create a headless app. Please update AppListEntry="none" in the AppxManifest file and also ensure you have the waiver "HeadlessAppBypass" associated to this app. Знаете ли вы, есть ли способ обойти эту ошибку? - person miradham; 21.02.2019
comment
Пожалуйста, отправьте мне электронное письмо с указанием вашего приложения и имени учетной записи — swick [at] microsoft.com - person Stefan Wick MSFT; 21.02.2019
comment
Мы определили объявление appAlias ​​для приложения, чтобы исправить ошибку HeadlessAppBypass. Подробнее: advancedinstaller.com/forums/viewtopic.php?t =35515#p115673 - person Bogdan Mitrache; 10.04.2020