当应用程序打包到 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 在内的许多版本中测试过)。
有一个简单的修复方法,但您需要修改组件源代码。发布到 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
注意:如果您决定修改源文件,建议先将文件复制到您的项目文件夹中,然后再进行修改。
我开发了一个 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 在内的许多版本中测试过)。
有一个简单的修复方法,但您需要修改组件源代码。发布到 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
注意:如果您决定修改源文件,建议先将文件复制到您的项目文件夹中,然后再进行修改。