Обрабатывать полезную нагрузку 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.
Дайте мне знать, если вам нужно больше разъяснений по этому же вопросу.