简体   繁体   English

如何在macOS上访问aNotification.userInfo词典

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM