【问题标题】:How to respond to local notification when app is closed in iOS10?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 函数中调用的单独函数。谢谢你们!

标签: ios swift uilocalnotification ios10


【解决方案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 的优点是只有一个地方可以处理本地通知操作。

【讨论】:

  • 我们如何在函数中注册这个?你能把代码放在这里吗?
  • 这并没有响应通知 - 您需要像以前那样在没有交互的情况下运行应用程序。
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多