iOS10应用关闭时如何响应本地通知?

Posted

技术标签:

【中文标题】iOS10应用关闭时如何响应本地通知?【英文标题】:How to respond to local notification when app is closed in iOS10? 【发布时间】:2016-11-17 10:29:58 【问题描述】:

当应用程序完全关闭(不在后台)时如何响应本地通知?

当应用程序在后台或前台运行时,一切正常。但是当应用程序关闭并且我试图回复通知时,只有 "application didFinishLaunchingWithOptions" 被调用,"userNotificationCenter didRecive response" 没有回复。

我发现了这个问题 (How to handle UNNotificationAction when app is closed?),但就我而言,它在真实设备和模拟器中都不起作用。

我还注意到,当我在应用关闭时响应通知时,函数 "UNUserNotificationCenter.current().getDeliveredNotifications()" 返回 nil

【问题讨论】:

你现在有什么代码,你是如何设置通知的? 您是在didFinishLaunchingWithOptions 还是willFinishLaunchingWithOptions 中设置UNNotificationCenter 委托? 如果我理解正确,您必须检查“applicationdidFinishLaunchingWithOptions”方法中的 launchOptions 字典中的键 @“UIApplicationLaunchOptionsLocalNotificationKey”,如果成功则处理您的通知 我现在注意到我将委托从didFinishLaunchingWithOptions 移动到在didReceive response 函数中调用的单独函数。谢谢你们! 【参考方案1】:

对于application(_:didFinishLaunchingWithOptions:) 中的iOS 9 及更低版本,您将检查launchOptions 是否包含localNotification: UIApplicationLaunchOptionsKey。如果是这样,您会知道应用程序刚刚启动是因为本地通知(即用户点击了通知)。

对于iOS 10+,您必须application(_:willFinishLaunchingWithOptions:)application(_:didFinishLaunchingWithOptions:) 中注册您的UNUserNotificationCenterDelegate

您的代表的职能:

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

如果您的应用程序刚刚启动或者它只是在后台运行,将被调用。 这个新 API 的优点是只有一个地方可以处理本地通知操作。

【讨论】:

我们如何在函数中注册这个?你能把代码放在这里吗? 这并没有响应通知 - 您需要像以前那样在没有交互的情况下运行应用程序。

以上是关于iOS10应用关闭时如何响应本地通知?的主要内容,如果未能解决你的问题,请参考以下文章

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

ios - 应用程序关闭时本地通知不更新徽章编号

用户关闭应用时取消所有本地通知

应用程序激活时关闭本地通知

应用程序关闭时的本地通知处理

iOS 7 本地通知默认没有声音