Это было определенно ошибка на стороне яблок. Они что-то сломали в операционной системе ios11. В прошлом году было несколько дискуссий об этом времени, и приложения не получали push-уведомлений в течение почти 1 месяца. Кстати, на этот вопрос ответили год назад, вы не можете ссылаться на текущую документацию

еялся, что в выпуске iOS11 будет исправлена ​​проблема «тихого пуша», которая была в последних бета-версиях и GM-версии iOS.

В настоящее время я пытаюсь понять, почему я не получаю никаких тихих push-сообщений, которые должны фактически разбудить мое приложение для выполнения некоторых необходимых задач в фоновом режиме.

В iOS 10 я просто использовал возможность фоновой выборки и реализовал «код пробуждения» в моем AppDelegate, как показано ниже.

В iOS 11 код регистрации по-прежнему работает нормально, и мой бэкэнд также доставляет push-уведомления серверам Apples DEV (песочница), а также серверам PROD (рабочий выпуск). К сожалению функцияfunc application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) никогда не вызывается тихими push-уведомлениями.

Я что-то упустил здесь для iOS 11?

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  // .. some variables here ...

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

       // register silent push notification in backend
       application.registerForRemoteNotifications()

       // ... some code here ... 


       // Set Background Fetch Intervall for background services / terminated app
       UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)

       // ... some code here ... 

       return true
   }

   func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
       let tokenParts = deviceToken.map { data -> String in
           return String(format: "%02.2hhx", data)
       }
       let token = tokenParts.joined()
       logger.log.debug("Device Token: \(token)")

       let realm = RealmController()
       let user = realm.getLoggedInUserObject()

       // Send push token to server
       if let user = user {
           let email = user.email!

           let serverController = ServerController.serverController
           serverController.sendPushToken(token: token, email: email) { status in
               if status == 201 {
                // ... some code here ...
               } else {
               // ... some code here ...
               }
           }
       }
   }
   func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
       logger.log.debug(error)
   }
   func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
       logger.log.debug(userInfo)

       let aps = userInfo["aps"] as! [String: AnyObject]
       if aps["content-available"] as? Int == 1 {
          // .... some silent push tasks here ....
       }
   }
}

Ответы на вопрос(2)

Ваш ответ на вопрос