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

Користувачі пропускають звичайні сповіщення, але Live Activities утримують увагу прямо на екрані блокування та в Dynamic Island. Ми розробляємо такі рішення на ActivityKit і SwiftUI, беручи на себе весь цикл — від концепції до підтримки. Наша команда реалізує проєкт під ключ, забезпечуючи стабільну роботу та подальший супровід.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Розробка Live Activities для iOS під ключ
Складний
~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
    1009
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    902
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1331
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1179
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1106
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    713