我想通过本地通知启动我的应用,该通知会在主屏幕被锁定时显示,或者当用户在基于相似讨论{@ 3}}和here的其他应用中时显示我有以下内容我的AppDelegate中的代码:
func userNotificationCenter(_: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
switch response.actionIdentifier {
case "play":
var setAlarmVC = self.window?.rootViewController as? SettingAlarmViewController
if setAlarmVC == nil {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
setAlarmVC = storyboard.instantiateViewController(withIdentifier: "AlarmViewController") as? SettingAlarmViewController
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = setAlarmVC
self.window?.makeKeyAndVisible()
}
case "snooze":
print("I pressed pause")
default:
break
}
completionHandler()
}
在我的SettingAlarmViewController的viewDidLoad中,我设置了一些简单的打印输出
override func viewDidLoad() {
super.viewDidLoad()
print("Setting Alarm View Controller was instantiated")
}
当我在应用程序处于后台时从本地通知中按播放时,我按预期打印出控制台:
Setting Alarm View Controller was instantiated
但该应用程序实际上并未启动,并且未显示“设置警报视图控制器”。如果我然后点击应用程序,新的设置警报视图控制器是第一个可见的东西。我觉得我必须遗漏一些明显的东西,但我无法弄清楚它是什么。
编辑:做更多测试。当锁定屏幕上显示通知并且用户从锁定屏幕按下“播放”时,密码/解锁屏幕不会出现,但应用程序仍然启动,我打印出“设置警报视图控制器已实例化”< / p>
答案 0 :(得分:0)
好吧,我生命中的一天浪费在此,这是问题所以其他人没有同样的问题:developer.apple.com/documentation/usernotifications / ...你必须广告[.foreground]到你的通知行动,如在let playAction = UNNotificationAction(标识符:&#34;播放&#34;,标题:&#34;播放&#34;,选项:[.foreground])