Live Activity — mi ez, widgetek a zárolási képernyőn

Szerző: IT Sectr Megjelenés: 2026-02-15 Olvasási idő: 9 perc

Live Activity — egy dinamikus widget az iPhone zárolási képernyőjén és a Dynamic Islandben, amely valós időben jelenít meg információkat: szállítási állapot, sporteredmények, időzítők és zenelejátszás. Az ActivityKit (Swift, iOS 16.1+) segítségével valósul meg a WidgetKitkel együtt. A Live Activity helyben vagy push értesítéseken keresztül frissül, több állapotot támogat, és a rendszer befejezi az esemény befejezése után. Bővebben a ActivityKit Documentation oldalon.

Főbb pontok

  • Live Activity — valós idejű widget a Lock Screen-en és Dynamic Islandben
  • ActivityKit — keretrendszer Live Activities indításához és kezeléséhez iOS 16.1+ rendszeren
  • Push frissítések — a szerver új állapotot küld ActivityKit push értesítéseken keresztül
  • Állapotok — minden Activity támogatja az aktív és befejezett állapotokat eltérő UI-val
  • Dynamic Island — a Live Activity kompakt megjelenítése iPhone 14 Pro és újabb készülékeken

Mi az a Live Activity — widget a Lock Screen-en?

Live Activity — a WidgetKit kiterjesztése, amely dinamikus tartalmat jelenít meg az iPhone zárolási képernyőjén és a Dynamic Islandben. Ellentétben a statikus widgettel, amely a rendszer időzítője szerint frissül, a Live Activity-t egy alkalmazás indítja el, és korlátozott ideig él — akár 8 óráig aktív Activity esetén, és akár 4 óráig a befejezés után. A felhasználó a készülék feloldása nélkül látja az aktuális adatokat: szállítási rendelés állapota, távolság a célig taxiban, meccseredmény vagy edzés előrehaladása.

ActivityKit — keretrendszer a Live Activities kezeléséhez, bevezetve iOS 16.1-ben. API-t biztosít az Activity kéréséhez, frissítéséhez és befejezéséhez. Az Activity egy objektum tartalommal és állapottal. A tartalom (ActivityContent) a statikus adatokat határozza meg, az állapot (ActivityState) pedig a dinamikus, időben változó adatokat. A rendszer maga dönti el, mikor renderelje az új állapotot — ez kíméli az akkumulátort és garantálja az animációk simaságát.

Minden Live Activity egyedileg azonosítható ActivityID-vel, és egyetlen folyamathoz — az azt létrehozó alkalmazáshoz — van kötve. A rendszer befejezheti az Activity-t memória hiánya vagy alacsony akkumulátorszint esetén. A fejlesztő értesítést kap a kényszerített befejezésről az ActivityKit delegátuson keresztül, és elmentheti az utolsó állapotot a helyreállításhoz.

Az ActivityKit és WidgetKit architektúrája

A Live Activity architektúrája két keretrendszerre épül: a WidgetKit felel a SwiftUI nézetek rendereléséért, az ActivityKit pedig az Activity életciklusáért. A fejlesztő létrehoz egy WidgetBundle-t LiveActivityConfiguration támogatással. Minden konfiguráció meghatározza az adattípust (Attributes és State) és a SwiftUI View-t, amelyet a rendszer a Lock Screen-en és a Dynamic Islandben renderel. Az adatok ActivityAttributes-en keresztül kerülnek átadásra — egy struct let mezőkkel a tartalomhoz és var mezőkkel az állapothoz.

KomponensRendeltetésAPI
AttributesA teljes Activity statikus adatailet name: String, let icon: String
ContentStateDinamikus állapot, frissítéskor változikvar progress: Double, var status: Status
ActivityAz Activity kérésének és kezelésének objektumaActivity.request(attributes:content:)
PushTokenToken szerver oldali push frissítésekhezactivity.pushToken publisher
ActivityUISwiftUI View Lock Screen-hez és Dynamic IslandhezLockScreenView, ExpandedView, CompactView

Az Activity életciklusa három fázisból áll: aktív (a rendszer megjeleníti és frissíti), végleges (a tevékenység befejeződött, de az UI még 4 óráig látható), törölt (a rendszer eltávolítja az UI-t). Az alkalmazás bármikor befejezheti az Activity-t. A rendszer is kényszerítve befejezheti az Activity-t — például a készülék újraindításakor vagy a 8 órás korlát lejártakor.

swift
import ActivityKit

struct DeliveryAttributes: ActivityAttributes {
    public struct ContentState: Codable & Hashable {
        var status: DeliveryStatus
        var estimatedMinutes: Int
    }
    var orderNumber: String
    var restaurantName: String
}

WidgetBundle regisztrálja a Live Activity-t a @main makrón keresztül: a widget visszaadja a konfigurációk listáját, beleértve a LiveActivityConfiguration-t. E konfiguráció alapján a rendszer tudja, milyen adattípusokra számítson, és hogyan renderelje az UI-t különböző állapotokban — kompakt, minimális és kibővített a Dynamic Island számára.

Live Activity létrehozása WidgetKitkel és SwiftUI-val

Activity létrehozása az ActivityKit felé történő kéréssel kezdődik. Az alkalmazás meghívja az Activity.request(attributes:content:pushType:) függvényt a kezdeti adatokkal. A rendszer ellenőrzi, hogy a Dynamic Island elérhető-e a készüléken, és visszaad egy Activity objektumot. A kérés meghiúsulhat, ha túllépték az aktív Activity-k számának korlátját — általában nem több mint 5 egyidejűleg. Sikeres kérés után a rendszer megjeleníti a widgetet a Lock Screen-en és, ha lehetséges, a Dynamic Islandben.

swift
let attributes = DeliveryAttributes(
    orderNumber: "A-1234",
    restaurantName: "Pizza House"
)

let initialState = DeliveryAttributes.ContentState(
    status: DeliveryStatus.preparing,
    estimatedMinutes: 30
)

do {
    let activity = try await Activity<DeliveryAttributes>.request(
        attributes: attributes,
        content: ActivityContent(state: initialState, staleDate: nil),
        pushType: .token
    )
    print("Activity started: \(activity.id)")
} catch {
    print("Failed: \(error)")
}

SwiftUI View Live Activity-hez a WidgetKit LockScreenView, ExpandedView és CompactView struktúráit használja. A View kontextust kap (ActivityViewContext) az aktuális attribútumokkal és állapottal. A View frissítése automatikusan megtörténik, amikor új állapot érkezik a rendszertől. A Live Activity csak korlátozott SwiftUI komponenskészletet támogat — Text, Image, HStack, VStack és néhány módosítót.

Minden Live Activity View-nak könnyűnek és gyorsnak kell lennie — a rendszer megtagadja a nehéz nézetek renderelését. A renderelési idő korlátja — 30 ms képkockánként. Az animációk az állapotok közötti rendszerátmenetekre korlátozódnak — egyéni animációk nem érhetők el a Live Activity-ben. A renderelés a WidgetKit folyamatának hátterében történik a Lock Screen válaszkészségének prioritásával.

Live Activity frissítése helyben és push útján

Helyi frissítés — az alkalmazás frissíti az Activity állapotát az activity.update(using:) hívással. A metódus új ContentState-t és opcionális AlertConfiguration-t fogad a frissítéskor megjelenő értesítéshez. A helyi frissítések gyorsak — a rendszer a következő renderelési ciklusban újrarajzolja a View-t, általában 1–2 másodpercen belül. Gyakori frissítésekhez (időzítő, stopper) használja a helyi módot — ez megbízhatóbb és gyorsabb, mint a push.

swift
let updatedState = DeliveryAttributes.ContentState(
    status: DeliveryStatus.outForDelivery,
    estimatedMinutes: 10
)

await activity.update(
    ActivityContent<DeliveryAttributes.ContentState>(
        state: updatedState,
        staleDate: Date().addingTimeInterval(60)
    ),
    alertConfiguration: AlertConfiguration(
        title: "Order out for delivery",
        body: "Arriving in 10 min"
    )
)

Push frissítések — a szerver ActivityKit push értesítést küld az új állapottal JSON formátumban. Ehhez az alkalmazás lekéri a pushToken-t az activity.pushToken publisher-ből, és továbbítja a szervernek. A szerver POST kérést küld az APNs-nek az új ContentState-t tartalmazó payload-dal. A rendszer fogadja a push-t, dekódolja az állapotot, és frissíti a Live Activity-t az alkalmazás részvétele nélkül — ez lehetővé teszi az Activity frissítését még akkor is, ha az alkalmazás be van zárva.

A push frissítések gazdaságosabbak a helyinél ritka frissítések esetén (szállítási állapot 5–10 percenként) — az alkalmazásnak nem kell hálózati kapcsolatot fenntartania. Gyakori, 1–2 másodpercenkénti frissítésekhez használja a helyi módszert. A szerver payload csak a ContentState változó mezőit tartalmazza — az Attributes statikus adatai csak az Activity létrehozásakor kerülnek elküldésre.

Live Activity megjelenítése a Dynamic Islandben

Dynamic Island — egy hardver-szoftver terület az iPhone 14 Pro, 15 Pro és újabb készülékeken, amely alkalmazkodik a Live Activity tartalmához. A rendszer automatikusan három módban jeleníti meg az Activity-t: kompakt (ikon + rövid szöveg a kivágástól balra), minimális (csak ikon) és kibővített (300pt téglalap információkkal). A fejlesztő nem közvetlenül kezeli ezeket a módokat — a rendszer választja ki a módot prioritás és rendelkezésre álló hely alapján.

swift
struct DeliveryLiveActivity: Widget {
    var body: some WidgetConfiguration {
        ActivityConfiguration(for: DeliveryAttributes.self) { context in
            LockScreenView(context: context)
        } dynamicIsland: { context in
            DynamicIsland {
                DynamicIslandExpandedContent {
                    ExpandedView(context: context)
                }
            } compactLeading: {
                CompactLeadingView(context: context)
            } compactTrailing: {
                CompactTrailingView(context: context)
            } minimal: {
                MinimalView(context: context)
            }
        }
    }
}

A Dynamic Island támogatja az interaktivitást — a felhasználó megérinti a területet, és belép az alkalmazásba, vagy megnyitja a kibővített nézetet. A kompakt mód megérintése átvált kibővített módba, a balra húzás pedig minimális módba rejti az Activity-t. A kibővített mód gombjait (pause/cancel) a SwiftUI Link segítségével kezeljük — a rendszer elindítja az alkalmazást egy deep link URL-lel, a feldolgozás az UIApplicationDelegate-ben történik.

A Dynamic Island korlátai: a kibővített mód szélessége — legfeljebb 300pt, a kompakt szöveg — legfeljebb 30 karakter. A színek és betűtípusok megfelelnek a rendszertémának — a testreszabás korlátozott. A módok közötti átmeneti animációk rendszerszintűek és nem konfigurálhatók. Ha több alkalmazásnak van aktív Activity-je, a Dynamic Island ezeket prioritással jeleníti meg az indítási idő és a tartalom típusa alapján.

Gyakran ismételt kérdések

Miben különbözik a Live Activity a szokásos widgettől?

A szokásos WidgetKit widget statikus információkat jelenít meg, és a rendszer időzítője szerint frissül minimum 15–30 perces intervallumban. A Live Activity dinamikus adatokat mutat valós időben a zárolási képernyőn és a Dynamic Islandben. A Live Activity-t az alkalmazás indítja el, akár 8 óráig él, és a rendszer befejezi az esemény befejezése után, ellentétben a widgettel, amely állandóan létezik.

Milyen gyakran frissül a Live Activity?

A Live Activity két frissítési módot támogat: helyi — az alkalmazás az ActivityKit API-n keresztül bármikor frissíti az állapotot, és push — a szerver ActivityKit push értesítést küld, amelyet a rendszer a widget új állapotává alakít. Alacsony akkumulátorszint esetén a rendszer lefagyaszthatja a Live Activity-t a töltő csatlakoztatásáig.

Milyen eszközökön működnek a Live Activities?

A Live Activities iOS 16.1 és újabb rendszerű iPhone készülékeken érhetők el. iPhone 14 Pro és újabb készülékeken a Live Activity a Dynamic Islandben is megjelenik. iPaden a Live Activity csak a zárolási képernyőn támogatott — Dynamic Island iPaden nem létezik. Az Apple Watch nem támogatja közvetlenül a Live Activities-t, de megjelenítheti a befejezésről szóló értesítéseket.

Hány Live Activity működhet egyszerre?

A rendszer korlátozza az aktív Live Activities számát — általában legfeljebb 5 egyszerre az összes alkalmazás számára. A korlát túllépésére tett kísérletnél az ActivityKit hibát ad vissza. Minden Live Activity több állapottal rendelkezhet — például várakozás, úton, kézbesítve egy ételrendeléshez. A befejezés után az Activity további 4 óráig marad az UI-ban.

Szükséges-e a felhasználó engedélye a Live Activity-hez?

Igen, az alkalmazásnak engedélyt kell kérnie az értesítések küldéséhez — a Live Activity a rendszer értesítési csatornáját használja. A felhasználó kikapcsolhatja a Live Activity-t egy adott alkalmazáshoz a beállításokban. Az első indításkor az ActivityKit egy párbeszédablakot jelenít meg az engedély kérésével. Engedély nélkül az Activity kérés hibával meghiúsul.

Összefoglaló

  • Live Activity — dinamikus widget a Lock Screen-en és Dynamic Islandben valós idejű frissítéssel
  • ActivityKit — iOS 16.1+ keretrendszer a Live Activities életciklusának kezeléséhez
  • Attributes and State — az Activity statikus adatai és dinamikus állapota, átadva a SwiftUI View-nak
  • Push frissítések — a szerver új állapotot küld APNs-en keresztül az alkalmazás részvétele nélkül
  • Dynamic Island — három megjelenítési mód: kompakt, minimális és kibővített téglalap
  • Korlátok — legfeljebb 5 aktív Activity, akár 8 óra élettartam, akár 4 óra a befejezés után
  • AlertConfiguration — opcionális értesítés az Activity állapotának frissítésekor

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is