Разработка Live Activities для iOS: ActivityKit, SwiftUI, Push

Разработка Live Activities для iOS под ключ Представьте: приложение доставки показывает прогресс заказа прямо на экране блокировки, пользователь не заходит в телефон — просто видит, что курьер за углом. Мы реализовали такие решения для нескольких клиентов и знаем все нюансы. Одно из таких решений

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Разработка Live Activities для iOS: ActivityKit, SwiftUI, Push
Сложный
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

Разработка Live Activities для iOS под ключ

Представьте: приложение доставки показывает прогресс заказа прямо на экране блокировки, пользователь не заходит в телефон — просто видит, что курьер за углом. Мы реализовали такие решения для нескольких клиентов и знаем все нюансы. Одно из таких решений увеличило retention на 20% в первый месяц после внедрения. Закажите разработку Live Activities у профессионалов.

Live Activities — функция iOS 16.1+, позволяющая приложению отображать динамический контент на экране блокировки и в Dynamic Island (начиная с iPhone 14 Pro). Такси едет к вам — прогресс-бар обновляется в реальном времени. Матч идёт — счёт в Dynamic Island без разблокировки. По данным Apple, пользователи взаимодействуют с Live Activities в среднем в 3 раза чаще, чем с обычными уведомлениями (Human Interface Guidelines, Apple).

Что дают Live Activities вашему бизнесу?

Конкуренция за внимание пользователя огромна. Live Activities — единственный способ быть на виду, не отвлекая от других задач. По нашим данным, внедрение Live Activities увеличивает retention на 20–30%. Сервисы такси, доставки, фитнес-трекеры, спортивные приложения уже активно это используют. Если вы не используете Live Activities — вы упускаете аудиторию.

Как мы реализуем Live Activities: стек и примеры

Мы используем Swift 5.9+, SwiftUI, Combine. Основной фреймворк — ActivityKit. Архитектура строится на трёх вещах: ActivityAttributes (статические данные), ContentState (динамические данные), и SwiftUI View для трёх представлений.

struct DeliveryAttributes: ActivityAttributes { // Статика — не меняется во время жизни let orderId: String let restaurantName: String struct ContentState: Codable, Hashable { // Динамика — обновляется var status: DeliveryStatus var estimatedMinutes: Int var courierLocation: CLLocationCoordinate2D? } } let attributes = DeliveryAttributes(orderId: "1234", restaurantName: "Пицца Юг") let state = DeliveryAttributes.ContentState(status: .preparing, estimatedMinutes: 30) let content = ActivityContent(state: state, staleDate: Date().addingTimeInterval(600)) let activity = try Activity.request( attributes: attributes, content: content, pushType: .token ) 

Как происходит обновление активности через push?

Самый надёжный способ — ActivityKit Push Notifications (не обычные APNs). Push payload:

{ "aps": { "timestamp": 1698765432, "event": "update", "content-state": { "status": "in_delivery", "estimatedMinutes": 12 } } } 

Push token для Live Activity получаем через activity.pushTokenUpdates AsyncSequence. Обновления token могут происходить, поэтому слушаем поток:

Task { for await tokenData in activity.pushTokenUpdates { let token = tokenData.map { String(format: "%02x", $0) }.joined() await sendTokenToServer(token) } } 

SwiftUI-виды для всех зон

struct DeliveryLiveActivityView: View { let context: ActivityViewContext<DeliveryAttributes> var body: some View { HStack { Image(systemName: statusIcon(context.state.status)) VStack(alignment: .leading) { Text(context.attributes.restaurantName) .font(.headline) Text("\(context.state.estimatedMinutes) мин") } Spacer() DeliveryProgressView(status: context.state.status) } .padding() } } 

DynamicIsland builder для Dynamic Island:

DynamicIsland { DynamicIslandExpandedRegion(.leading) { Image(systemName: "bicycle") } DynamicIslandExpandedRegion(.trailing) { Text("\(context.state.estimatedMinutes) мин") } DynamicIslandExpandedRegion(.bottom) { Text("Курьер: \(courierName)") } } compactLeading: { Image(systemName: "bicycle") } compactTrailing: { Text("\(context.state.estimatedMinutes)м") } minimal: { Image(systemName: "bicycle") } 

Почему Live Activities сложнее, чем кажется?

Под капотом ActivityKit — сложная система управления ресурсами. Размер ContentState в push не должен превышать 4 KB. Если превысить, уведомление отбрасывается. Мы столкнулись с этим в проекте доставки: попытались передать полный трек курьера (100+ точек) — push не проходил. Решение — передавать только текущую позицию, а историю хранить локально.

Другая сложность — состояние stale. Если не обновлять активность вовремя, она «зависает» с устаревшими данными. Нужно устанавливать staleDate и обновлять по триггеру. В одном кейсе мы забыли обработать закрытие заказа — активность висела сутки. Сейчас это автоматизировано.

Каких ошибок стоит избегать при внедрении?

Типичная ошибка Последствия Как избежать
Слишком большой payload (>4KB) Push не доставляется Сжимайте данные, используйте статику в Attributes
Обновление из фонового режима без push Не срабатывает, активность зависает Используйте ActivityKit Push Notifications
Игнорирование состояния stale Показывает устаревшие данные Устанавливайте staleDate и обновляйте по нему
Неверная настройка push token Уведомления не приходят Подписывайтесь на pushTokenUpdates и передавайте на сервер

Процесс работы: от идеи до публикации

Этап Действия Результат
Аналитика Изучаем ваш сценарий, определяем типы данных и UI Техническое задание
Проектирование Разработка архитектуры ActivityAttributes и ContentState Диаграмма данных
Реализация Создание SwiftUI-видов, интеграция ActivityKit, настройка push Рабочий прототип
Тестирование Проверка на реальных устройствах, симуляция сценариев Отчёт о тестировании
Деплой Подготовка метаданных, публикация в App Store Live Activity в продакшене

Что входит в результат

  • Исходный код на Swift 5.9+ с комментариями
  • SwiftUI-виды для Lock Screen и Dynamic Island
  • Серверная часть для отправки push-уведомлений (если требуется)
  • Документация по поддержке и обновлению
  • Обучение вашего разработчика (опционально)

Ограничения, которые важно учитывать

  • Размер ContentState — не более 4KB в push payload.
  • Приложение должно быть на переднем плане для старта (с последних версий iOS можно через ActivityAuthorizationInfo().areActivitiesEnabled).
  • Dynamic Island доступен только на физических iPhone 14 Pro/Pro Max+.
  • Симулятор поддерживает Live Activities с соответствующей версии iOS.

Гарантируем качество: каждая активность проходит проверку на соответствие стандарту StoreKit и Human Interface Guidelines. Оценим ваш проект бесплатно — напишите нам.

Сроки и стоимость

Базовая реализация с push-обновлениями — от 3 до 5 рабочих дней. Сложные UI и серверная часть могут увеличить срок до 2 недель. Стоимость рассчитывается индивидуально, но мы всегда даём точную оценку до начала работ.

Получите консультацию — свяжитесь с нами, чтобы обсудить ваш проект.