如何在 appdelegate 中获取传递的通知详细信息

Posted

技术标签:

【中文标题】如何在 appdelegate 中获取传递的通知详细信息【英文标题】:How to get delivered notification details in appdelegate 【发布时间】:2018-11-07 04:07:11 【问题描述】:

当应用程序打开时,我已经设法通过点击通知获取通知详细信息,但如果用户通过单击应用程序图标打开应用程序,是否有任何方法可以在应用程序内获取传递的通知详细信息

func applicationWillResignActive(_ application: UIApplication) 

        if #available(ios 10.0, *) 

            let center = UNUserNotificationCenter.current()
            center.getDeliveredNotifications  (notification) in
                print(notification.count) 

            

         else 
            // Fallback on earlier versions
        

    

在这里我得到了通知计数,但我不知道如何从这里获取通知的详细信息(用户信息)

【问题讨论】:

【参考方案1】:

我找到了答案

func applicationDidBecomeActive(_ application: UIApplication) 
        if #available(iOS 10.0, *) 

            let center = UNUserNotificationCenter.current()


            center.getDeliveredNotifications  (receivedNotifications) in


                for notification in receivedNotifications 
                    let content = notification.request.content
                    print(" Body \(content.body)")
                    print(" Title \(content.title)")
                    print(content.userInfo as NSDictionary)

                    self.session.saveCallRequest(content.userInfo as NSDictionary)

                

            
    

【讨论】:

【参考方案2】:

如果您的应用被强制关闭(向上滑动)并且用户点击通知打开应用,您仍然可以在AppDelegate didFinishLaunchingWithOptions 方法中获取此信息:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
    // Override point for customization after application launch.

    if let userInfo = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [String: AnyObject]
        //Here you can use the notification payload information.
    

    return true

【讨论】:

以上是关于如何在 appdelegate 中获取传递的通知详细信息的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 appdelegate 传递到视图控制器?

如何在 AppDelegate 中使用 stringByEvaluatingJavaScript

没有 AppDelegate 的 SwiftUI 远程推送通知(Firebase 云消息传递)

如何在另一个不是 AppDelegate 的类中获取 devicetoken?

如何处理视图控制器上的远程通知(而不是 AppDelegate)[关闭]

如何将 CoreLocation 值从一个 VIewController 传递到 iOS 中的 AppDelegate?