我使用UserNotifications做一个简单的通知进行测试,我在AppDelegate中编写了如下代码,当通知在后台触发时,它将在屏幕上显示该消息,但不会同时运行代码print(。 ..)和a.get()):
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
print("run in didReceive")
let a = ViewController()
a.get()
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
UNUserNotificationCenter.current().requestAuthorization(options: [.alert,.sound,.badge, .carPlay], completionHandler: { (granted, error) in
if granted {
print("granted")
}else{
print("not granted")
}
})
UNUserNotificationCenter.current().delegate = self
return true
}
我只想在后台运行应用程序时运行“ viewcontroller”功能...
答案 0 :(得分:0)
一个问题是这一行:
let a = ViewController()
您正在创建一个“松散”的视图控制器,然后将其扔掉。您可能想要的是对接口中已经存在的一些现有视图控制器的引用。
更广泛的问题可能是关于userNotificationCenter(_:didReceive:withCompletionHandler:)
的错误假设。不会调用它来指示出现了通知警报(即已触发通知)。它被调用以指示用户与通知进行了互动,例如点击或关闭警报(如果已配置)。仅出现并再次消失的横幅警报,无需用户干预,将不会导致userNotificationCenter(_:didReceive:withCompletionHandler:)
被调用。