Виджеты на экране iOS и Android: когда они нужны приложению
Основы3 минРедакция Innovialabs
Коротко
Виджет показывает одну актуальную вещь без открытия приложения и обновляется по правилам системы, а не в реальном времени; он полезен, когда у пользователя есть повод заглядывать часто — статус, баланс, расписание, прогресс.
Коротко: что такое виджет
Виджет — это небольшой блок приложения на главном экране (а в iOS ещё и на экране блокировки), который показывает одну полезную информацию без открытия приложения. Это не мини-версия приложения, а «окошко» с самым нужным.
Live Activities в iOS — отдельный формат: живая карточка на экране блокировки и в Dynamic Island для события, которое длится ограниченное время, — доставка, поездка, матч. В Android похожую задачу обычно решают постоянным уведомлением с прогрессом.
Виджет нужен приложению, если есть ответ на вопрос: что пользователь хочет видеть, не открывая приложение, несколько раз в день или неделю?
Что виджеты умеют и чего не умеют
| Умеют | Не умеют |
|---|---|
| Показывать текст, цифры, картинки, простые графики | Работать как полноценный интерфейс |
| Открывать нужный экран приложения по нажатию (deep link) | Принимать ввод с клавиатуры |
| Простые действия: кнопки, переключатели (в современных версиях систем) | Проигрывать видео и сложную анимацию |
| Иметь несколько размеров | Обновляться непрерывно в реальном времени |
Технические ограничения
iOS: WidgetKit
- Виджеты пишутся на SwiftUI с помощью WidgetKit, даже если основное приложение сделано на Flutter или React Native.
- Содержимое строится как timeline — набор заранее подготовленных состояний с временем показа. Система сама решает, когда их отрисовать.
- У каждого виджета есть бюджет на обновления: если просить обновлять слишком часто, система начнёт пропускать запросы.
- Данные из приложения передаются через общую область хранения (App Group).
Android: App Widgets и Jetpack Glance
- Классические виджеты используют RemoteViews — ограниченный набор элементов интерфейса.
- Jetpack Glance позволяет описывать виджеты в стиле Compose, но под капотом всё равно получаются RemoteViews со своими ограничениями.
- Периодическое обновление через
updatePeriodMillisне может быть чаще примерно раза в полчаса. Для другого графика используют WorkManager или обновляют виджет из приложения при изменении данных.
Live Activities
- Работают через ActivityKit, обновляются из приложения или через специальные push-уведомления.
- Ограничены по времени и объёму данных — это формат для конкретного события, а не постоянная панель.
Для кросс-платформенных приложений виджет — это отдельный нативный код под каждую платформу. Его стоит закладывать в оценку отдельно.
Где виджет полезен
| Тип приложения | Что показывать |
|---|---|
| Доставка, такси | Статус заказа или поездки (лучше Live Activity) |
| Финансы, банк | Баланс или лимит — со скрытием сумм по желанию пользователя |
| Задачи, заметки, календарь | Ближайшие дела, быстрая запись |
| Здоровье, фитнес, привычки | Прогресс за день, отметка выполнения |
| Транспорт | Ближайшие рейсы на выбранной остановке |
| Обучение | Слово дня, серия занятий подряд |
| Погода, курсы валют | Текущие значения |
Где виджет обычно не нужен: приложения, которые открывают раз в месяц, и виджеты-«баннеры» с рекламой акций — их быстро удаляют с экрана.
Как виджеты влияют на вовлечённость
Виджет напоминает о приложении каждый раз, когда человек разблокирует телефон, и сокращает путь к ключевому действию. Но эффект есть только при реальной пользе: если на виджете устаревшие или бесполезные данные, его убирают.
Что стоит измерять:
- сколько пользователей добавили виджет;
- сколько сессий начинается с нажатия на виджет;
- как отличается удержание у тех, кто пользуется виджетом, и у остальных.
Помните, что пользователи, добавившие виджет, изначально более вовлечены — сравнение не доказывает причинно-следственную связь само по себе.
Частые ошибки
- Переносят в виджет весь экран приложения — получается мелко и нечитаемо.
- Рассчитывают на обновление «каждую минуту» и удивляются устаревшим данным.
- Показывают личные данные на экране блокировки без возможности их скрыть.
- Не делают пустое состояние: что видит пользователь до входа в аккаунт.