Я использую следующий код в AppDelegate для обработки определенного c типа удаленных уведомлений:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
if let notification = response.notification.request.content.userInfo as? [String:AnyObject] {
if let aps = notification["aps"] as? [String:AnyObject] {
if let target = aps["target-content-id"] {
switch (target as! String) {
case "ChatDetailViewController":
if let threadId = aps["thread-id"] {
if let rootView = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChatDetailViewController") as? ChatDetailViewController {
rootView.conversation = Int(threadId as! String)!
print("CHECKPOINT")
self.window = self.window ?? UIWindow()
self.window!.rootViewController = rootView
self.window!.makeKeyAndVisible()
}
}
default:
print("default")
}
}
}
}
completionHandler()
}
Кажется, все работает хорошо . Когда я нажимаю на уведомление, вызывается делегат didReceive
. Кажется, все выполнено так, как должно. Я вижу, что print("CHECKPOINT")
попадает в консоль, и дополнительный вывод консоли показывает, что код в ChatDetailViewController начинает работать (то есть может видеть, что он открывает сокет для разговора, который я передаю через thread-id
.
Хотя моя проблема в том, что на экране ничего не происходит. Вид не меняется , и я не знаю почему.
Я тоже используя тот же код для переключения на другой ViewController в SceneDelegates, и там, кажется, он работает просто отлично . Не уверен, что я делаю не так и могу использовать некоторую помощь. Большое спасибо всем !!!