didReceiveRemoteNotification, когда приложение в фоновом режиме работает только при подключении устройства к MacBook - PullRequest
0 голосов
/ 15 апреля 2019

Я тестирую 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)
    }
}

1 Ответ

0 голосов
/ 15 апреля 2019

Если вы используете тихие уведомления,

Существуют определенные ограничения для тихих уведомлений, когда приложение находится в фоновом режиме. Пожалуйста, смотрите документ Apple ниже.

enter image description here

Пожалуйста, ознакомьтесь с полным документом здесь: Тихо отправляйте обновления в ваше приложение

Все это не применимо, когда устройство подключено к вашему Mac. Приложение будет получать все уведомления, когда оно подключено.

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

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)

Надеюсь, это поможет.

...