[英]How to access aNotification.userInfo dictionary on macOS
I am trying to obtain the alert message details when my app is opened when the user clicks on the Notification Alert message on his MAC. 当用户单击其MAC上的Notification Alert消息时,我正在尝试打开我的应用程序时,我试图获取该消息的详细信息。
I have no problem getting the Alert when the app is opened. 我在打开应用程序时收到警报没有问题。 The following delegate works fine for when the App is already opened. 以下委托对于已经打开该应用程序的工作正常。
func application(_ application: NSApplication,
didReceiveRemoteNotification userInfo: [String : Any])
However when the App is opened via the clicking od the Alert Notification I have to get the userInfo from 但是,当通过单击od打开应用程序时,我必须从警报通知中获取userInfo。
func applicationDidFinishLaunching(_ aNotification: Notification)
I am unable to retrieve the alert userInfo
in this function. 我无法在此函数中检索警报userInfo
。
let mydictionary = aNotification.userInfo
let mydesc = mydictionary!.description
os_log("aNotification.userInfon= %{public}@", log: osLog, mydesc)
The output from os_log
, I can see the alert message in the description. os_log
的输出,我可以在描述中看到警报消息。
aNotification.userInfon= [AnyHashable("NSApplicationLaunchIsDefaultLaunchKey"): 0, AnyHashable("NSApplicationLaunchUserNotificationKey"): <UNNotificationResponse: 0x600003ac1480; actionIdentifier: com.apple.UNNotificationDefaultActionIdentifier, notification: <UNNotification: 0x600003ac1580; date: 2019-05-08 18:26:59 +0000, request: <UNNotificationRequest: 0x6000034cd560; identifier: E6D76BF3-6643-4627-BF38-3B11B5C3F0B3, content: <UNNotificationContent: 0x600000fe0780; title: (null), subtitle: (null), body: (14) - iPhone - Tom Owen, summaryArgument: , summaryArgumentCount: 0, categoryIdentifier: , launchImageName: , threadIdentifier: , attachments: ( ), badge: 0, sound: <UNNotificationSound: 0x600001ee92c0>,, trigger: <UNPushNotificationTrigger: 0x6000038fa780; contentAvailable: NO, mutableContent: NO>>>>]
I have tried many ways to access the "dictionary", the following is one way. 我尝试了许多访问“字典”的方法,以下是一种方法。
if let aps = aNotification.userInfo!["aps"] as? NSDictionary {
os_log(" aNotification.userInfo ok", log: osLog)
if let alert = aps["alert"] as? NSDictionary {
os_log("alert ok", log: osLog)
if let alertMessage = alert["body"] as? String {
os_log("body ok", log: osLog)
message = alertMessage
}
}
} else {
os_log("no aNotification.userInfo!", log: osLog)
}
However I keep getting "no aNotification.userInfo!" 但是我一直收到“没有aNotification.userInfo!”
How should I be accessing "body: (14) - iPhone - Tom Owen" from userInfo
? 我应该如何从userInfo
访问“ body:(14)-iPhone-Tom Owen”?
Please have a closer look at the log. 请仔细查看日志。 You have to get the user notification with the key launchUserNotificationUserInfoKey
. 您必须使用键launchUserNotificationUserInfoKey
来获取用户通知。 The value for that key is an UNNotificationResponse
instance. 该键的值是UNNotificationResponse
实例。
You get the body
with 你得到body
func applicationDidFinishLaunching(_ notification: Notification)
if let response = notification.userInfo?[NSApplication.launchUserNotificationUserInfoKey] as? UNNotificationResponse {
let content = response.notification.request.content
let body = content.body
message = body
}
}
However didReceiveRemoteNotification
passes the traditional userInfo
dictionary 但是didReceiveRemoteNotification
通过了传统的userInfo
字典
func application(_ application: NSApplication, didReceiveRemoteNotification userInfo: [String : Any]) {
if let aps = userInfo?["aps"] as? [String:Any] { // please use Swift native types
os_log(" aNotification.userInfo ok", log: osLog)
if let alert = aps["alert"] as? [String:Any] {
os_log("alert ok", log: osLog)
if let alertMessage = alert["body"] as? String {
os_log("body ok", log: osLog)
message = alertMessage
}
}
} else {
os_log("no aNotification.userInfo!", log: osLog)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.