Live Activity — ano ito, mga widget sa lock screen

May-akda: IT Sectr Nai-publish: 2026-02-15 Oras ng pagbabasa: 9 min

Live Activity — isang dynamic na widget sa lock screen ng iPhone at sa Dynamic Island na nagpapakita ng impormasyon sa real-time: status ng paghahatid, mga iskor sa sports, timer, at pag-playback ng musika. Ipinapatupad sa pamamagitan ng ActivityKit (Swift, iOS 16.1+) kasama ng WidgetKit. Ang Live Activity ay ina-update nang lokal o sa pamamagitan ng mga push notification, sumusuporta sa maraming estado, at tinatapos ng system pagkatapos ng kaganapan. Higit pa sa ActivityKit Documentation.

Mga pangunahing punto

  • Live Activity — real-time na widget sa Lock Screen at Dynamic Island
  • ActivityKit — framework para sa paglunsad at pamamahala ng Live Activities sa iOS 16.1+
  • Mga push update — nagpapadala ang server ng bagong estado sa pamamagitan ng ActivityKit push notification
  • Mga estado — bawat Activity ay sumusuporta sa aktibo at natapos na estado na may iba't ibang UI
  • Dynamic Island — compact na pagpapakita ng Live Activity sa iPhone 14 Pro at mas bago

Ano ang Live Activity — widget sa Lock Screen?

Live Activity — isang extension ng WidgetKit na nagpapakita ng dynamic na nilalaman sa lock screen ng iPhone at sa Dynamic Island. Hindi tulad ng static na widget na ina-update ayon sa system timer, ang Live Activity ay inilulunsad ng isang app at nabubuhay nang limitadong oras — hanggang 8 oras para sa aktibong Activity at hanggang 4 na oras pagkatapos makumpleto. Nakikita ng user ang kasalukuyang data nang hindi ina-unlock ang device: status ng order ng paghahatid, distansya sa destinasyon sa taxi, resulta ng laban, o progreso ng pag-eehersisyo.

ActivityKit — framework para sa pagtatrabaho sa Live Activities, ipinakilala sa iOS 16.1. Nagbibigay ito ng API para sa paghiling, pag-update, at pagtatapos ng Activity. Ang Activity ay isang bagay na may nilalaman at estado. Ang nilalaman (ActivityContent) ay tumutukoy sa static na data, at ang estado (ActivityState) — dynamic na data na nagbabago sa paglipas ng panahon. Ang system ang magpapasya kung kailan ire-render ang bagong estado — nakakatipid ito ng baterya at tinitiyak ang maayos na mga animation.

Ang bawat Live Activity ay natatanging nakikilala sa pamamagitan ng ActivityID at nakatali sa isang proseso — ang app na lumikha nito. Maaaring tapusin ng system ang Activity kapag kulang ang memory o mababa ang baterya. Ang developer ay makakatanggap ng abiso tungkol sa sapilitang pagtatapos sa pamamagitan ng ActivityKit delegate at maaaring i-save ang huling estado para sa pagpapanumbalik.

Arkitektura ng ActivityKit at WidgetKit

Ang arkitektura ng Live Activity ay binuo sa dalawang framework: Ang WidgetKit ay responsable para sa pag-render ng SwiftUI view, ang ActivityKit — para sa lifecycle ng Activity. Gumagawa ang developer ng WidgetBundle na may suporta para sa LiveActivityConfiguration. Ang bawat configuration ay tumutukoy sa uri ng data (Attributes at State) at SwiftUI View na ire-render ng system sa Lock Screen at Dynamic Island. Ang data ay inililipat sa pamamagitan ng ActivityAttributes — isang struct na may mga let field para sa nilalaman at var field para sa estado.

ComponentLayuninAPI
AttributesStatic na data ng buong Activitylet name: String, let icon: String
ContentStateDynamic na estado, nagbabago sa pag-updatevar progress: Double, var status: Status
ActivityBagay para sa paghiling at pamamahala ng ActivityActivity.request(attributes:content:)
PushTokenToken para sa server push updateactivity.pushToken publisher
ActivityUISwiftUI View para sa Lock Screen at Dynamic IslandLockScreenView, ExpandedView, CompactView

Ang lifecycle ng Activity ay may tatlong yugto: aktibo (system ay nagpapakita at nag-a-update), pinal (tapos na ang aktibidad ngunit nakikita pa ang UI sa loob ng 4 na oras), tinanggal (tinatanggal ng system ang UI). Maaaring tapusin ng app ang Activity anumang oras. Ang system ay nagtatapos din ng Activity nang sapilitan — halimbawa, sa pag-restart ng device o pag-expire ng 8-oras na limitasyon.

swift
import ActivityKit

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

WidgetBundle ay nagrerehistro ng Live Activity sa pamamagitan ng @main macro: ang widget ay nagbabalik ng listahan ng mga configuration, kabilang ang LiveActivityConfiguration. Batay sa configuration na ito, alam ng system kung anong mga uri ng data ang aasahan at kung paano ire-render ang UI sa iba't ibang estado — compact, minimal, at pinalawak para sa Dynamic Island.

Paglikha ng Live Activity gamit ang WidgetKit at SwiftUI

Ang paglikha ng Activity ay nagsisimula sa isang kahilingan sa ActivityKit. Ang app ay tumatawag ng Activity.request(attributes:content:pushType:) na may paunang data. Sinusuri ng system kung available ang Dynamic Island sa device at nagbabalik ng Activity object. Maaaring mabigo ang kahilingan kung lumampas sa limitasyon ng aktibong Activities — karaniwang hindi hihigit sa 5 nang sabay. Pagkatapos ng matagumpay na kahilingan, ipinapakita ng system ang widget sa Lock Screen at, kung posible, sa Dynamic Island.

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 para sa Live Activity ay gumagamit ng mga istrukturang LockScreenView, ExpandedView, at CompactView mula sa WidgetKit. Ang View ay tumatanggap ng konteksto (ActivityViewContext) na may kasalukuyang mga attribute at estado. Ang pag-update ng View ay awtomatikong nangyayari kapag nakatanggap ng bagong estado mula sa system. Ang Live Activity ay sumusuporta lamang sa limitadong hanay ng mga SwiftUI component — Text, Image, HStack, VStack, at ilang modifier.

Ang bawat Live Activity View ay dapat na magaan at mabilis — tumatanggi ang system na i-render ang mabibigat na view. Ang limitasyon sa oras ng pag-render — 30 ms bawat frame. Ang mga animation ay limitado sa mga system transition sa pagitan ng mga estado — hindi available ang mga custom na animation sa Live Activity. Ang rendering ay ginagawa sa background ng WidgetKit process na may priyoridad sa pagtugon ng Lock Screen.

Pag-update ng Live Activity nang lokal at sa pamamagitan ng push

Lokal na pag-update — ina-update ng app ang estado ng Activity sa pamamagitan ng pagtawag ng activity.update(using:). Ang method ay tumatanggap ng bagong ContentState at opsyonal na AlertConfiguration para magpakita ng notifikasyon sa pag-update. Ang mga lokal na pag-update ay mabilis — muling iginuhit ng system ang View sa susunod na rendering cycle, karaniwang sa loob ng 1–2 segundo. Para sa mga madalas na pag-update (timer, stopwatch) gamitin ang lokal na mode — ito ay mas maaasahan at mas mabilis kaysa 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"
    )
)

Mga push update — nagpapadala ang server ng ActivityKit push notification na may bagong estado sa JSON format. Para dito, kumukuha ang app ng pushToken mula sa activity.pushToken publisher at ipinapasa ito sa server. Nagpapadala ang server ng POST request sa APNs na may payload na naglalaman ng bagong ContentState. Natatanggap ng system ang push, dini-decode ang estado, at ina-update ang Live Activity nang walang partisipasyon ng app — pinapayagan nito ang pag-update ng Activity kahit sarado ang app.

Ang mga push update ay mas matipid kaysa lokal para sa mga bihirang pag-update (status ng paghahatid tuwing 5–10 minuto) — hindi kailangang panatilihin ng app ang koneksyon sa network. Para sa mga madalas na pag-update tuwing 1–2 segundo gamitin ang lokal na paraan. Ang server payload ay naglalaman lamang ng mga nababagong field ng ContentState — ang static na data ng Attributes ay ipinapadala lamang kapag gumagawa ng Activity.

Pagpapakita ng Live Activity sa Dynamic Island

Dynamic Island — isang hardware-software na lugar sa iPhone 14 Pro, 15 Pro, at mas bago na umaangkop sa nilalaman ng Live Activity. Awtomatikong ipinapakita ng system ang Activity sa tatlong mode: compact (icon + maikling teksto sa kaliwa ng cutout), minimal (icon lang), at pinalawak (rectangle na 300pt na may impormasyon). Hindi direktang pinamamahalaan ng developer ang mga mode na ito — pinipili ng system ang mode batay sa priyoridad at available na espasyo.

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)
            }
        }
    }
}

Sinusuportahan ng Dynamic Island ang interactivity — hinahawakan ng user ang lugar at pumapasok sa app o nagbubukas ng pinalawak na view. Ang pagpindot sa compact mode ay lumipat sa pinalawak na mode, at ang pag-swipe pakaliwa ay nagtatago ng Activity sa minimal mode. Ang mga button sa pinalawak na mode (pause/cancel) ay hinahawakan sa pamamagitan ng Link mula sa SwiftUI — inilulunsad ng system ang app na may deep link URL, ang paghawak ay ginagawa sa UIApplicationDelegate.

Mga limitasyon ng Dynamic Island: lapad ng pinalawak na mode — hanggang 300pt, compact na teksto — hanggang 30 character. Ang mga kulay at font ay tumutugma sa system theme — limitado ang pag-customize. Ang mga animation ng paglipat sa pagitan ng mga mode ay system at hindi nako-configure. Kung maraming app ang may aktibong Activity, ipinapakita ng Dynamic Island ang mga ito nang may priyoridad ayon sa oras ng pagsisimula at uri ng nilalaman.

Mga madalas itanong

Paano naiiba ang Live Activity sa ordinaryong widget?

Ang ordinaryong WidgetKit widget ay nagpapakita ng static na impormasyon at ina-update ayon sa system timer na may minimum na interval na 15–30 minuto. Ang Live Activity ay nagpapakita ng dynamic na data sa real-time sa lock screen at Dynamic Island. Ang Live Activity ay inilulunsad ng app, nabubuhay hanggang 8 oras, at tinatapos ng system pagkatapos ng kaganapan, hindi tulad ng widget na permanenteng umiiral.

Gaano kadalas ina-update ang Live Activity?

Sinusuportahan ng Live Activity ang dalawang mode ng pag-update: lokal — ina-update ng app ang estado sa pamamagitan ng ActivityKit API anumang oras, at push — nagpapadala ang server ng ActivityKit push notification na ginagawang bagong estado ng widget ng system. Kapag mababa ang baterya, maaaring i-freeze ng system ang Live Activity hanggang sa pagkonekta ng charger.

Sa anong mga device gumagana ang Live Activities?

Available ang Live Activities sa iPhone na may iOS 16.1 at mas bago. Sa iPhone 14 Pro at mas bago, ang Live Activity ay ipinapakita rin sa Dynamic Island. Sa iPad, ang Live Activity ay sinusuportahan lamang sa lock screen — walang Dynamic Island sa iPad. Hindi direktang sinusuportahan ng Apple Watch ang Live Activities, ngunit maaaring magpakita ng mga notification ng pagkumpleto.

Ilang Live Activities ang maaaring tumakbo nang sabay?

Nililimitahan ng system ang bilang ng aktibong Live Activities — karaniwang hindi hihigit sa 5 nang sabay para sa lahat ng app. Kapag sinubukang lumampas sa limitasyon, nagbabalik ang ActivityKit ng error. Ang bawat Live Activity ay maaaring magkaroon ng maraming estado — halimbawa, naghihintay, nasa biyahe, naihatid para sa order ng pagkain. Pagkatapos makumpleto, nananatili ang Activity sa UI para sa isa pang 4 na oras.

Kailangan ba ng pahintulot ng user para sa Live Activity?

Oo, ang app ay dapat humingi ng pahintulot na magpadala ng mga notification — ang Live Activity ay gumagamit ng system notification channel. Maaaring i-disable ng user ang Live Activity para sa isang partikular na app sa mga setting. Sa unang paglunsad, nagpapakita ang ActivityKit ng dialog na humihingi ng pahintulot. Kung walang pahintulot, nabigo ang kahilingan ng Activity na may error.

Buod

  • Live Activity — dynamic na widget sa Lock Screen at Dynamic Island na may real-time na pag-update
  • ActivityKit — iOS 16.1+ framework para sa pamamahala ng lifecycle ng Live Activities
  • Attributes and State — static na data at dynamic na estado ng Activity na ipinapasa sa SwiftUI View
  • Mga push update — nagpapadala ang server ng bagong estado sa pamamagitan ng APNs nang walang partisipasyon ng app
  • Dynamic Island — tatlong mode ng pagpapakita: compact, minimal, at pinalawak na rectangle
  • Mga limitasyon — hanggang 5 aktibong Activity, hanggang 8 oras na buhay, hanggang 4 na oras pagkatapos makumpleto
  • AlertConfiguration — opsyonal na notification kapag ina-update ang estado ng Activity

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din