我有Win32桌面桥应用程序,它使用后台任务从WNS接收推送通知。我在C++-WinRT
上使用UWP后台任务API
我希望能够在操作系统处于睡眠状态时接收推送通知,以便它唤醒并且应用程序处理推送通知。默认情况下,OS不会唤醒。只有在System
-> Battery
-> See which apps are affecting your battery life
-中手动更改设置值后才能执行此操作。单击我的应用程序 - >取消选中Let Windows decide
选项(默认情况下始终选中)并检查Allow the app to run background taks
。现在我想做的是手动编写代码以获得更好的用户体验。
RequestAccessKindAsync API允许用户通过向用户显示弹出通知来更改上面的设置值,我可以在UWP
C#
示例应用程序中毫无问题地执行此操作。但是相同的代码不会通过C++-WinRT
从我的桌面桥显示弹出通知。它只是为下面的代码返回false值
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可以在桌面桥上运行吗?如果没有,那么我如何确保操作系统和应用程序在收到推送通知时始终能够从睡眠状态唤醒?
UPD:提出了从桌面brige here启用此API的请求
这是一个缺失的功能。当我们在几个版本之前设计这个API时,我们并不认为桌面桥接应用程序会调用它 - 但显然有一个用例来支持它。我已经通知团队这个差距,但我也鼓励你在这里记录一个功能请求:https://wpdev.uservoice.com/
两种可能的解决方法: (1)您可以在桌面桥应用程序中添加虚拟/空UWP前台应用程序。然后,您可以在启动时启动它,并从那里请求后台访问。这会有点难看,但你可以让它看起来像一个闪屏:-)(2)你可以指示用户进入设置应用程序,将你的应用程序设置为始终允许。你可以通过电池保存设置的深层链接帮助他们做到这一点,但他们仍然需要手动翻转开关。