如何解决MacOS分布式通知在后台应用程序Swift中丢失
我正在尝试从具有焦点的应用程序app1向另一个应用程序app2发送分布式通知。在app2获得焦点之前,不会执行该通知。要修复它,我激活了另一个应用程序,然后发送通知。这是不对的。首先,另一个应用程序保持焦点,其次,除非另一个应用程序处于活动状态,否则丢失该通知将毫无意义。请注意,这是使用AppKit的Mac App,而不是使用UIKit的IOS应用
let yes = NSRunningApplication.runningApplications(withBundleIdentifier: "Lip.Balance20")
if yes.count > 0 {
yes[0].activate( ) // Shift focus to the Balance app and send notification
print ("*** App is running!")
distributedNotificationCenter.default.post(name: .checkAdded,object: nil,userInfo: ["Application Name" : Bundle.main.bundleIdentifier!,"CheckToAdd": r,"Account": a])
}
解决方法
在处理分布式通知时,您应该注意一个名为SuspensionBehaviour的选项。
deliverImmediately
文档指出:
无论是否调用了
true
参数挂起,服务器都会发送与该注册匹配的通知。
您必须指定发送通知时立即发送通知(无论接收应用程序的暂停状态如何)(此方法略有不同,请注意最后一个参数):
DistributedNotificationCenter.default().postNotificationName(
.checkAdded,object: nil,userInfo: [...],deliverImmediately: true
)
或确保在订阅通知时指定它:
DistributedNotificationCenter.default().addObserver(
self,selector: ...,name: ...,suspensionBehavior: .deliverImmediately
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。