Я сталкиваюсь с очень глупой проблемой при использовании NotificationCenter
.
Введение: Я использую Firebase notification
в своем приложении, поэтому, как правило, как только любой пользователь получит notification
, нам нужно перевести пользователя на указанный экран c ViewController
.
Вот мой код:
@available(iOS 10, *)
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
if let paymentStatus = userInfo["message"] as? String {
if paymentStatus == "SUCCESS"{
// handle notification
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "PaymentSuccessfulNotification"), object: nil, userInfo: userInfo)
}
}
completionHandler()
}
}
ViewController.swift viewDidLoad метод :
NotificationCenter.default.addObserver(self,selector: #selector(paymentSuccessfulNotificationReceived),
name: NSNotification.Name(rawValue: "PaymentSuccessfulNotification"), object: nil)
И объявил этот метод также:
@objc func paymentSuccessfulNotificationReceived(notification: NSNotification){
DispatchQueue.main.async {
// Navigate code
let viewController = AppManager.VideoCallStoryBoard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
self.navigationController?.pushViewController(viewController, animated: false)
}
}
Проблема: Когда я получаю Firebase notification
, тогда мой AppDelegate's userNotificationCenter: didReceive response: method
вызывается , но мой ViewController.swift
метод класса не вызывается.
Пожалуйста, кто-нибудь, помогите мне в этом. Спасибо!
Примечание. Вместо этого, если я добавлю свой метод addObserver
к классу ViewController
, который я устанавливаю как window.rootViewController
, тогда все работает нормально. Мой метод вызывается.