Жизненный цикл push-уведомлений и его поведение - PullRequest
0 голосов
/ 01 февраля 2019

Я работаю над push-уведомлением iOS.Я зарегистрировался и получил удаленное уведомление.Где мне искать, чтобы получать и обрабатывать эти уведомления?Моя конечная цель - позвонить по номеру UIViewController, когда пользователь нажимает на уведомление.

В настоящее время я работаю на didReceiveRemoteNotification с функцией завершениеHandler на Appdelegate для достижения этой цели.didReceiveRemoteNotification метод вызывается в симуляторе и сбрасывается до некоторого UIViewController, когда пользователь нажимает на уведомление по желанию, но когда я запускаю свое приложение из TestFlight, я вижу, что didReceiveRemoteNotification функция вызывается без какого-либо уведомления.Это поведение по умолчанию для запуска приложения.Таким образом, в основном, когда мое приложение убито и перезапущено, я получаю didFinishLaunchingWithOptions, а затем сразу после этого вызывается функция didReceiveRemoteNotification, даже если уведомление не получено.

// MARK: AppDelegate function
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
   if UserSession.sharedSession.isLoggedIn()
        {
            self.showTabbar()
        }
        else {
            self.showLoginVC()
        } 

    self.registerNotification()
    return true
}

//MARK: delegate function 
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    switch(application.applicationState){
        case .active:                                 
          if (AppDelegate.topViewController() as? ChatRecentMessagesVC) != nil {
            completionHandler(.noData)
            return           
         }
         else if (AppDelegate.topViewController() as? ChatVC) != nil {
        // Here your topVC is MyViewController
             completionHandler(.noData)
             return
         }
         self.pushToRecentMessageVC()               
         break
       case .inactive:
         self.pushToRecentMessageVC() 
         break
       case .background:
         self.pushToContactListVC() 
         break
    }
}

При запуске этого кода на testflight специально назапуск приложения я взял в RecentMessageVC.Каким-то образом функция didReceiveRemoteNotification запускается и, в свою очередь, self.pushToRecentMessageVC() вызывается при запуске приложения.Любая идея, что происходит в этом случае.Я не вижу никого такого поведения в своем коде.

...