
Сохраняем push-уведомления в память телефона: полный гайд для React Native
notReadySir только что Сохраняем push-уведомления в память телефона: полный гайд для React Native Средний 6 мин 11 React Native * iOS * Android * Туториал В прошлой статье мы разбирали ситуации, которые мешают пушам...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: notReadySir только что Сохраняем push-уведомления в память телефона: полный гайд для React Native Средний 6 мин 11 React Native * iOS * Android * Туториал В прошлой статье мы разбирали ситуации, которые мешают пушам работать в killed state на iOS. Сегодня — чистая практика. Хочу отметить, что я намеренно написал код более вербозным, чтобы вы - мой читатель, могли внести что-то свое, свои обдуманные улучшение и свой взгляд, а не просто бездумно скопировать или пробежаться глазами.
Критический взгляд всегда полезен. Как это устроено под капотомДавайте сразу договоримся о главном: push сохраняется на нативном уровне ещё до того, как мост React Native вообще проснётся. JS не участвует в гонке «кто первый».
Технические детали
Он просто получает готовый массив — и рисует его. Вот как выглядит путь уведомления:APNs / FCM │ ▼ Нативный обработчик │ ▼ Локальное хранилище │ ▼ EventEmitter → JS │ ▼ FlatList на экране Немного деталей. На iOS, когда приложение убито, работает NotificationService Extension.
Когда живо — AppDelegate. На Android — FirebaseMessagingService. И каждый из этих ребят пишет данные в локальное хранилище, формируя один и тот же JSON.
Ниже покажу это в коде, но сначала — контракт. Единый формат, или почему мы не пишем if (Platform. OS === ‘ios’)В своей практике я сталкивался с проектами, где формат push-уведомлений был платформозависимый (не знаю зачем это делать, ну да ладно, у всех свои причины).
Отраслевые последствия
В данном примере мы уберем все платформенные ветвления. Данные, которые сохраняются на уровне натива, выглядят одинаково что на iOS, что на Android:{ "uniqueKey": "some-unique-id", "title": "Заголовок уведомления", "description": "Текст уведомления", "imageUrl": " "pushLink": " "payload": "{\"key\": \"value\"}", "receivedAt": 1716812345 } JS-слой вообще не знает, с какой платформы пришли данные. Никаких if (Platform.
OS === 'ios никаких отдельных парсеров под Android. Поменяли формирование JSON в двух местах — и всё, JS просто начинает его читать. iOS: два входа — одно хранилищеNotificationService ExtensionРасширение запускается системой при получении пуша с флагом mutable-content: 1, даже если приложение убито.
Именно здесь мы и ловим момент, пока никто не мешает. Метод didReceive дёргает saveNotification, та формирует JSON и кладёт его в общий UserDefaults через App Group. final class NotificationService: UNNotificationServiceExtension { static let suiteName = "group.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





