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

Пользователи пропускают обычные уведомления, но Live Activities удерживают внимание прямо на экране блокировки и в Dynamic Island. Мы разрабатываем такие решения на ActivityKit и SwiftUI, беря на себя весь цикл — от концепции до поддержки. Наша команда реализует проект под ключ, обеспечивая стабильную работу и последующее сопровождение.

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

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

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

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

Разработка 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 недель. Стоимость рассчитывается индивидуально, но мы всегда даём точную оценку до начала работ.

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

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

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

  • Разработка мобильного приложения для компании FEEDME
    Разработка мобильного приложения для компании FEEDME
    1010
  • Разработка мобильного приложения для компании XOOMER
    Разработка мобильного приложения для компании XOOMER
    903
  • Разработка мобильного приложения для компании RHL
    Разработка мобильного приложения для компании RHL
    1332
  • Разработка мобильного приложения для компании ZIPPY
    Разработка мобильного приложения для компании ZIPPY
    1180
  • Разработка мобильного приложения для компании Affhome
    Разработка мобильного приложения для компании Affhome
    1107
  • Разработка мобильного приложения для компании FLAVORS
    Разработка мобильного приложения для компании FLAVORS
    714