当应用程序打包到 Appx 包中时,Toast 通知不起作用

Toast Notifications do not work when application packaged into Appx package

我开发了一个 Microsoft Store 应用程序,我想添加 Toast 通知。

该应用程序是使用 Delphi 10.2.3 开发的,我正在使用 "Desktop Bridge" 技术将其转换为适用于 Microsoft Store 的 Appx 包。 Toast Notifications 工作正常,直到我将应用程序打包到 Appx 包(用于商店或侧载)。

当从 appx 和 SideLoading 运行ning 时,Toast 通知不起作用,并且我的应用程序未作为通知发件人列在 Windows 设置中。我想一定有一些我需要定义的清单扩展。有一个(现已弃用)appxmanifest 设置 ToastCapable="true",但我读到它不再使用,也不再需要 Windows 10。

当我 运行 应用程序可执行文件时,我的 Toast Notification 工作得很好,但当我从 Appx 包安装它时却没有。我如何获得 Windows 10 以了解我的应用程序是通知发送者?

不幸的是,它无法使用提供的 TNotificationCenter 组件(我在包括 10.2.3 在内的许多版本中测试过)。

这个link中描述了原因:https://blogs.msdn.microsoft.com/universal-windows-app-model/2017/01/31/how-to-ensure-your-toast-notifications-continue-to-work-when-converting-your-win32-app-into-a-windows-store-app-using-project-centennial/

有一个简单的修复方法,但您需要修改组件源代码。发布到 Windows 商店时,TNotificationCenter 不应为您的应用程序创建快捷方式,并且在创建 IToastNotifier 实例时不应提供应用程序 ID。这将自动为您完成。

我最终编写了自己的库来管理 Windows 10 个通知,因为我想要更详细的场景和自定义 XML 有效负载然后提供什么,但我可以确认它在按照微软说明。

我将我的 类 与 System.Win.Notification(在源代码中找到\\rtl\common)进行了比较,这里有一些您可以尝试使其工作的技巧(未经测试):

#1 - TNotificationCenterWinRT

的构造函数
FToastNotifier := TToastNotificationManager.Statics.CreateToastNotifier(LWSAppID);

应该是...

FToastNotifier := TToastNotificationManager.Statics.CreateToastNotifier();

#2 - TNotificationCenterWinRT.DoPresentNotification

if CreateShortcut then

应该是...

if True then

注意:如果您决定修改源文件,建议先将文件复制到您的项目文件夹中,然后再进行修改。