Недавно я работал над приложением обмена сообщениями с использованием APN. При получении удаленного уведомления вызывается приложение функции делегата (_: didReceiveRemoteNotification: fetchCompletionHandler), и я отправляю некоторое уведомление в NotificationCenter, затем наблюдатель может добавить новое сообщение в мой локальный массив сообщений.
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
NotificationCenter.default.post(name: Notification.Name(rawValue: "com.rjt.Chao.messaging"), object: nil, userInfo: userInfo)
}
Это работает нормально, но когда я хочу добавить в приложение баннер с уведомлением, написав следующее:
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler([.badge, .alert, .sound])
}
Теперь я могу получить баннер в приложении, но приложение (_: didReceiveRemoteNotification: fetchCompletionHandler) не вызывается и не может отправить уведомление в NotificationCenter.
Почему это так? Как лучше всего реализовать приложение для обмена мгновенными сообщениями с помощью баннера уведомлений в приложении?