我在做一个应用程序,安排本地通知,并保存用户信息的。这部分的确定。
但是,当应用程序被关闭,通知出现,但在用户点击,该方法不叫,我不能处理用户信息。
我看到有收到通知,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)
}
任何人都可以帮我吗?我看到这里所有相关的问题,并没有发现任何东西。
谢谢!
编辑:
如果有人正在寻找一个解决方案,我加入UNUserNotificationCenter.current().delegate = self
在didFinishLaunchingWithOptions
和它的工作。
从iOS的10起,你提到的方法应该被称为应用程序是否与背景或不活动状态下打开。也许你没有正确访问用户信息。下面的例子为我工作。
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
您可以得到了启动选项通知用户信息时,应用程序从通知打开。下面是代码
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
{
}
}
}
使用UNUserNotificationCenter.current().getDeliveredNotifications
得到通知。
您可以在viewDidLoad中使用()
UNUserNotificationCenter.current().getDeliveredNotifications { (notification) in
if notification.count > 0 {
//your code
}
}
我希望这有帮助。