
React Native iOS Push Notifications: почему push не сохраняются в background/killed state
notReadySir только что React Native iOS Push Notifications: почему push не сохраняются в background/killed state Средний 10 мин 10 React Native * iOS * Android * JavaScript * Swift * Кейс ВведениеМатериал написан на...
Значимый прорыв формирует отрасль ИИ: notReadySir только что React Native iOS Push Notifications: почему push не сохраняются в background/killed state Средний 10 мин 10 React Native * iOS * Android * JavaScript * Swift * Кейс ВведениеМатериал написан на основе реального кейса интеграции Mindbox SDK в React Native приложение, но все описанные проблемы и решения универсальны - они касаются любого push-провайдера и любого проекта, где уведомления должны работать в killed state на iOS. Полагаю, вы законно спросите: А какая задача вообще стояла? Отвечаю, необходимо было не просто показать пользователю push-сообщение, а нужно было эти пуши сохранить в памяти телефона, да ещё и в состоянии, когда приложение закрыто.
Я не буду писать о том, как это сделать, так как это выходит за рамки статьи, а расскажу о проблемах, когда казалось бы, что все обработчики написаны, React-компоненты созданы, push-сообщения отправлены и даже отображаются на экране мобильного телефона, но вот незадача - они никак не обрабатываются и где искать проблему совершенно непонятно, так как логи пусты. Сценарий, через который рано или поздно проходит почти каждый React Native разработчик, выглядит примерно так: push-уведомления отлично работают на Android; на iOS всё нормально, пока приложение открыто. А теперь сценарий, когда приложение работает в background: push приходит, но данные не сохраняются.
Технические детали
Аналитика не отправляется. React Native не получает событие. Кастомный payload теряется.
Local storage пустой. Бизнес-логика не выполняется. Первая реакция обычно такая: «Наверное, опять React Native что-то сломал».
Но проблема почти никогда не находится на уровне JavaScript. Настоящая причина лежит гораздо глубже: iOS process lifecycle, Notification Service Extensions, App Groups, shared storage, sandbox architecture, Xcode targets, APNS delivery pipeline. Именно в этот момент многие React Native разработчики впервые сталкиваются с тем, что mobile engineering — это не только JS.
Отраслевые последствия
В этой статье разберём: почему Android и iOS ведут себя по-разному; как на самом деле работает push pipeline на iOS; почему AppDelegate не всегда вызывается; зачем нужен Notification Service Extension; почему App Groups критически важны; как правильно сохранять push в killed state; какие ошибки ломают всё чаще всего. Почему на Android всё работает «само»Скажу сразу, что я немного лукавлю - в Android всё не работает само, но я осознанно пошёл на это допущение, так как сегодня мы говорим про iOS. Возможно, я напишу ещё одну статью о проблемах интеграции push-сервисов в Android-приложение, ну а пока так.
Android гораздо более либерален в background execution. Даже если приложение убито, Android всё ещё может запускать background services, будить process, выполнять Headless JS, обрабатывать FCM payload, писать данные в storage. React Native разработчик привыкает к тому, что push пришёл - JS получил данные — всё сохранилось.
На iOS архитектура совершенно другая.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





