Я тестирую background app refresh
с моим устройством, подключенным к компьютеру. Код выполняется нормально, и в didReceiveRemoteNotification
функция завершается до вызова обработчика завершения:
completionHandler(UIBackgroundFetchResult.newData)
Однако, когда я отключаю свое устройство от компьютера и пытаюсь сделать то же самое, фоновое обновление приложения не работает, и код в didReceiveRemoteNotification не запускается, пока приложение не выходит на передний план.
В обоих случаях, подключенных и не подключенных к компьютеру, тест проводится с приложением в фоновом режиме. то есть не прекращено и не на переднем плане.
В settings -> general -> background app refresh
я убедился, что он включен глобально и для моего приложения.
Трудно устранить неполадки, когда поведение точно такой же сборки относительно фонового обновления приложения отличается с устройством, подключенным к компьютеру и не подключенным. Мой код выглядит следующим образом:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
if userInfo["message_id"] as? String != nil {
MessageHelper().saveServerMessageToLocalDatabase(self.privateContext, serverMessage: userInfo as! [String : AnyObject] completion: { (message: Message?) in
if message != nil {
do {
try self.privateContext.save()
completionHandler(UIBackgroundFetchResult.newData)
} catch {
print("error saving context")
completionHandler(UIBackgroundFetchResult.newData)
}
} else {
completionHandler(UIBackgroundFetchResult.newData)
}
})
} else {
completionHandler(UIBackgroundFetchResult.newData)
}
}