title: FCM Push notifications do not work on iOS 11
body: <p>I use Firebase as a backend. I also use FCM as one of the provided features from Firebase. FCM worked well in iOS 10, but after switching to iOS 11, push notifications stopped coming to user devices, and I myself did not receive any push notifications sent from the cloud functions or the Notification section in the Firebase Console. How to fix this problem?</p>
  
  <p><strong>Update:</strong> I sent several push notifications from Firebase Notifcations, but they do not come.</p>
  
  <pre><code>// MARK: - Push notification
  
  extension AppDelegate: UNUserNotificationCenterDelegate {
  
      func registerPushNotification(_ application: UIApplication) {
          // For iOS 10 display notification (sent via APNS)
          UNUserNotificationCenter.current().delegate = self
  
          let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
          UNUserNotificationCenter.current().requestAuthorization(
              options: authOptions,
              completionHandler: {_, _ in })
  
          // For iOS 10 data message (sent via FCM)
          Messaging.messaging().delegate = self
      }
  
      func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
          //When the notifications of this code worked well, there was not yet.
          Messaging.messaging().apnsToken = deviceToken
      }
  
      // [START receive_message]
      func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
          // If you are receiving a notification message while your app is in the background,
          // this callback will not be fired till the user taps on the notification launching the application.
          // TODO: Handle data of notification
          // Print message ID.
          if let messageID = userInfo[gcmMessageIDKey] {
              debugPrint("Message ID: \(messageID)")
          }
  
          // Print full message.
          debugPrint(userInfo)
      }
  
      func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                       fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -&gt; Void) {
          // If you are receiving a notification message while your app is in the background,
          // this callback will not be fired till the user taps on the notification launching the application.
          // TODO: Handle data of notification
          // Print message ID.
          if let messageID = userInfo[gcmMessageIDKey] {
              print("Message ID: \(messageID)")
          }
  
          // Print full message.
          debugPrint(userInfo)
  
          completionHandler(.newData)
      }
  
      // showing push notification
  
      func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -&gt; Void) {
          if let userInfo = response.notification.request.content.userInfo as? [String : Any] {
              let routerManager = RouterManager()
              routerManager.launchRouting(userInfo)
          }
          completionHandler()
      }
  
      func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -&gt; Void) {
          if let userInfo = notification.request.content.userInfo as? [String : Any] {
              if let categoryID = userInfo["categoryID"] as? String {
                  if categoryID == RouterManager.Categories.newMessage.id {
                      if let currentConversation = ChatGeneralManager.shared.currentChatPersonalConversation, let dataID = userInfo["dataID"] as? String  {
                          // dataID is conversationd id for newMessage
                          if currentConversation.id == dataID {
                              completionHandler([])
                              return
                          }
                      }
                  }
              }
              if let badge = notification.request.content.badge {
                  AppBadgesManager.shared.pushNotificationHandler(userInfo, pushNotificationBadgeNumber: badge.intValue)
              }
          }
          completionHandler([.alert,.sound, .badge])
      }
  
  }
  
  // [START ios_10_data_message_handling]
  extension AppDelegate : MessagingDelegate {
  
      func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
          let pushNotificationManager = PushNotificationManager()
          pushNotificationManager.saveNotificationTokenInDatabase(token: fcmToken, success: nil, fail: nil)
      }
  
  
      // Receive data message on iOS 10 devices while app is in the foreground.
      func application(received remoteMessage: MessagingRemoteMessage) {
          debugPrint(remoteMessage.appData)
      }
  
  }
  </code></pre>