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应用关闭时如何响应本地通知?的主要内容,如果未能解决你的问题,请参考以下文章