应用程序关闭时用户单击通知时如何获取用户信息?

Posted

技术标签:

【中文标题】应用程序关闭时用户单击通知时如何获取用户信息?【英文标题】:How to get userInfo when user click in notification when app is closed? 【发布时间】:2018-03-26 20:34:03 【问题描述】:

我正在做一个安排本地通知并保存用户信息的应用程序。这部分没关系。

但是当应用程序关闭时,会出现通知,但是当用户单击时,该方法没有被调用,我无法处理 userInfo。

我发现有一种通过UNUserNotificationCenter 接收通知的新方法。但也不起作用。

这是我在 AppDelegate 中的实现:

@available(ios 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) 

    let lNotification = UILocalNotification()
    lNotification.userInfo = response.notification.request.content.userInfo

    applicationWorker.manage(localNotification: lNotification)

有人帮我吗?我在这里看到了所有相关的问题,但没有找到任何东西。

谢谢!

编辑:

如果有人在寻找解决方案,我在didFinishLaunchingWithOptions 中添加了UNUserNotificationCenter.current().delegate = self,它成功了。

【问题讨论】:

@MarcusMenezes 我在didFinishLaunchingWithOptions 中添加了UNUserNotificationCenter.current().delegate = self,然后调用了方法。我希望它有帮助! tks @rafaela-lourenço @RafaelaLourenço 很高兴您通过设置委托使其正常工作。这可以解释为什么该方法没有被调用! :) 【参考方案1】:

从 iOS 10 开始,无论应用程序是从后台打开还是处于非活动状态,都应该调用您提到的方法。也许您没有正确访问 userInfo。下面的例子对我有用。

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) 

    let userInfo = response.notification.request.content.userInfo
    if let yourData = userInfo["yourKey"] as? String 
        // Handle your data here, pass it to a view controller etc.
    


编辑:根据问题的编辑,通知中心委托必须在didFinishLaunching()方法中设置,否则上面的方法将不会被调用。

UNUserNotificationCenter.current().delegate = self

【讨论】:

但是我的应用在关闭的时候并没有进入这个功能..我不知道为什么..还有另一种配置可以实现吗? 点击通知打开应用时会调用 您的 iOS 版本检查是否可能无法正常工作?除非定位到 iOS 10 以下,否则您可以忽略它。 尝试在方法的开头插入一个 print() 语句来检查它是否被调用。问题可能是其他代码位,这可能会使该方法看起来没有被调用。正如@vp2698 所指出的,用户必须点击通知,然后应用程序才会打开,并且应该调用此方法。 我试过这个,但对我不起作用。当应用程序关闭时,我无法在启动时获取 userInfo(在通知中触摸)。【参考方案2】:

当应用程序从通知打开时,您可以从启动选项中获取通知用户信息。这是代码

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

   if let notification = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [String: AnyObject] 
                if let aps = notification["aps"] as? NSDictionary
                    

                    
            

【讨论】:

我认为这已被弃用,不是吗? 不,它正在工作,您仍然可以从启动选项中获取信息,尝试一次 我试过这个,但对我不起作用。当应用程序关闭时,我无法在启动时获取 userInfo(在通知中触摸)。【参考方案3】:

使用UNUserNotificationCenter.current().getDeliveredNotifications 获取通知。

你可以在viewDidLoad()中使用

    UNUserNotificationCenter.current().getDeliveredNotifications  (notification) in

        if notification.count > 0 
            //your code
        

    

我希望这会有所帮助。

【讨论】:

以上是关于应用程序关闭时用户单击通知时如何获取用户信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何在基于文档的应用程序中单击关闭时设置保存通知

当用户在 Qt 应用程序中单击任务栏/停靠图标时获取事件或通知

如何在按钮单击时关闭 uwp 中的吐司

用户关闭应用程序时如何处理用户在 Xamarin iOS 上单击本地通知?

如何以编程方式关闭通知托盘

在 Ionic 中单击通知时如何打开详细信息页面