Невозможно запланировать задачу из UNNotificationServiceExtension - Ошибка: ошибка BGTaskSchedulerErrorDomain 1 - PullRequest
1 голос
/ 15 октября 2019

Как говорится в заголовке, в настоящее время я не могу запланировать задачу из UNNotificationServiceExtension. Я хотел бы запланировать задачу, когда вызывается следующая функция и, таким образом, получен push:

func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void)

В настоящее время, как только я позвоню:

try BGTaskScheduler.shared.submit(request)

Введено предложение catch и возвращена следующая ошибка: «Операция не может быть завершена. (BGTaskSchedulerErrorDomain error 1.) '

Push-сообщения отправляются с облачным обменом сообщениями Firebase через следующий URL-адрес и прекрасно принимаются в моем приложении: https://fcm.googleapis.com/v1/{path to project}. Я называю этот URL изнутри POSTMAN. Я также указываю токен доступа и тело json.

Заголовок apns в push-сообщении имеет значение "apns-push-type": "background". И payload.aps имеет следующие значения: «apns-priority»: «5», «content-available»: 1, «mutable-content»: 1. Я думаю, что все это работает правильно, так как я это проверил.

Странно то, что я заставил фоновую задачу работать из самого приложения, не вызывая ее из UNNotificationServiceExtension. Я попробовал это, чтобы проверить, работает ли код вообще.

Я провел свое исследование и до сих пор пробовал следующее:
1. Я удостоверился, что 'Разрешенные идентификаторы планировщика фоновых задач' в info.plist заполнены правильным идентификатором задачи. Я трижды проверил, правильно ли используется эта строка в коде.
2. Включены следующие функции в приложении: «Фоновая выборка», «Удаленные уведомления», «Фоновая обработка».
3. В списке info.plist поддерживаются следующие режимы UIBackgroundMode: «аудио», «выборка», «обработка», «удаленное уведомление» и «voip». Эти же UIBackgroundModes также занесены в info.plist UNNotificationServiceExtension (я сделал это просто для уверенности).
4. Я удостоверился, что задача регистрируется в AppDelegate в 'didFinishLaunchingWithOptions'
5. Я вызываю 'expirationHandler' и 'setTaskCompleted' каждый раз, когдазадание фактически выполнено

Любая помощь или руководство высоко ценится!
Заранее спасибо; -)

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