Обрабатывать полезную нагрузку PushKit без загрузки раскадровки или других интерактивных функций

У нас есть приложение, которое использует PushKit для получения уведомлений. (Это не приложение VoIP, но у нас есть разрешение от Apple использовать PushKit из-за того, что это особая категория приложений, которая имеет особые потребности в здравоохранении).

Когда приложение не запущено и приходит уведомление PushKit, система запускает приложение в фоновом режиме и вызывается процессор полезной нагрузки делегата push-набора (PKPushRegistryDelegate pushRegistry:didReceiveIncomingPushWithPayload:forType:). Затем приложение снова закрывается. Приложение никогда не достигает графического интерактивного состояния.

Это нормально и так и должно быть. Тем не менее, iOS выполняет полный запуск приложения, загружая раскадровку и все. Кроме того, в приложении UIApplicationDelegate:willFinishLaunchingWithOptions:, параметры запуска равны нулю, поэтому вы не знаете, что вас запускают для обработки push-комплектов, и вы не будете работать в интерактивном режиме.

Это вызывает у нас проблемы, поскольку наше приложение выполняет полную, "тяжелую" настройку ресурсов, подключений к серверу и т. Д., Которые не нуждаются и не должны настраиваться только для обработки уведомления PushKit. Это вызывает у нас некоторые проблемы, так как некоторые вещи, которые подключаются (соединения с сервером и т. Д.), Вызывают поведение, которое нам не нужно, когда обрабатывается PushKit (а затем приложение исчезает).

Есть ли способ узнать, что вы были запущены в целях pushkit, и не выполнять все настройки приложения, которые обычно происходят? (Если приложение затем перейдет в активное состояние, мы сможем использовать обычный переход в активное состояние для завершения настройки)

1 ответ

После того, как вы получили полезную нагрузку Pushkit в didReceiveIncomingPushWithPayload, вы должны запланировать локальное уведомление с информацией, основанной на полезной нагрузке pushkit. тогда вы можете сделать свое приложение интерактивным. вы также можете хранить подробности в NSUserDefault и проверять локальные события касания уведомлений и в didFinishLaunchingWithOption.

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

Дайте мне знать, если вам нужно больше разъяснений по этому же вопросу.

Другие вопросы по тегам