Live Activity — bu nima, bloklash ekranidagi vidjetlar

Muallif: IT Sectr Nashr etilgan: 2026-02-15 O'qish vaqti: 9 daq

Live Activity — iPhone bloklash ekrani va Dynamic Island-da real vaqtda ma'lumot ko'rsatadigan dinamik vidjet: yetkazib berish holati, sport hisoblari, taymerlar va musiqa ijrosi. ActivityKit (Swift, iOS 16.1+) orqali WidgetKit bilan birga amalga oshiriladi. Live Activity mahalliy yoki push bildirishnomalari orqali yangilanadi, bir nechta holatlarni qo'llab-quvvatlaydi va voqea tugagandan so'ng tizim tomonidan yakunlanadi. Batafsil — ActivityKit Documentation.

Asosiy ma'lumotlar

  • Live Activity — Lock Screen va Dynamic Island-da real vaqt vidjeti
  • ActivityKit — iOS 16.1+ da Live Activities ishga tushirish va boshqarish freymvorki
  • Push yangilanishlari — server ActivityKit push bildirishnomalari orqali yangi holat yuboradi
  • Holatlar — har bir Activity turli UI bilan faol va yakunlangan holatlarni qo'llab-quvvatlaydi
  • Dynamic Island — iPhone 14 Pro va undan yangilarida Live Activity ixcham ko'rinishi

Live Activity nima — Lock Screen vidjeti?

Live Activity — WidgetKit kengaytmasi, iPhone bloklash ekrani va Dynamic Island da dinamik tarkibni ko'rsatadi. Tizim taymeri bo'yicha yangilanadigan statik vidjetdan farqli o'laroq, Live Activity ilova tomonidan ishga tushiriladi va cheklangan vaqt davomida yashaydi — faol Activity uchun 8 soatgacha va tugagandan so'ng 4 soatgacha. Foydalanuvchi qurilmani qulfdan ochmasdan dolzarb ma'lumotlarni ko'radi: yetkazib berish buyurtmasi holati, taksidagi manzilgacha masofa, o'yin natijasi yoki mashg'ulot jarayoni.

ActivityKit — iOS 16.1 da taqdim etilgan Live Activities bilan ishlash uchun freymvork. Activity so'rash, yangilash va yakunlash uchun API taqdim etadi. Activity — mazmun va holatga ega ob'ekt. Mazmun (ActivityContent) statik ma'lumotlarni, holat (ActivityState) esa vaqt o'tishi bilan o'zgaruvchi dinamik ma'lumotlarni belgilaydi. Tizim yangi holatni qachon render qilishni o'zi hal qiladi — bu batareyani tejaydi va animatsiyalarning silliqligini ta'minlaydi.

Har bir Live Activity noyob ActivityID bilan identifikatsiya qilinadi va uni yaratgan ilovaga bog'lanadi. Tizim xotira yetishmasligi yoki batareya past bo'lganda Activity ni yakunlashi mumkin. Ishlab chiquvchi ActivityKit delegati orqali majburiy yakunlash haqida xabarnoma oladi va tiklash uchun oxirgi holatni saqlashi mumkin.

ActivityKit va WidgetKit arxitekturasi

Live Activity arxitekturasi ikki freymvorkka asoslanadi: WidgetKit SwiftUI ko'rinishlarini render qilish uchun, ActivityKit esa Activity hayotiy sikli uchun javobgardir. Ishlab chiquvchi LiveActivityConfiguration qo'llab-quvvatlashi bilan WidgetBundle yaratadi. Har bir konfiguratsiya ma'lumot turini (Attributes va State) va tizim tomonidan Lock Screen va Dynamic Island da render qilinadigan SwiftUI View ni belgilaydi. Ma'lumotlar ActivityAttributes orqali uzatiladi — mazmun uchun let va holat uchun var maydonlariga ega struct.

KomponentMaqsadAPI
AttributesButun Activity ning statik ma'lumotlarilet name: String, let icon: String
ContentStateYangilanishda o'zgaruvchi dinamik holatvar progress: Double, var status: Status
ActivityActivity so'rovi va boshqaruvi ob'ektiActivity.request(attributes:content:)
PushTokenServer push yangilanishlari uchun tokenactivity.pushToken publisher
ActivityUILock Screen va Dynamic Island uchun SwiftUI ViewLockScreenView, ExpandedView, CompactView

Activity hayotiy sikli uch fazadan iborat: faol (tizim ko'rsatadi va yangilaydi), yakuniy (faoliyat tugagan, lekin UI 4 soat ko'rinadi), o'chirilgan (tizim UI ni olib tashlaydi). Ilova Activity ni istalgan vaqtda yakunlashi mumkin. Tizim ham Activity ni majburiy yakunlaydi — masalan, qurilma qayta ishga tushirilganda yoki 8 soatlik limit tugaganda.

swift
import ActivityKit

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

WidgetBundle Live Activity ni @main makrosi orqali ro'yxatdan o'tkazadi: vidjet LiveActivityConfiguration ni o'z ichiga olgan konfiguratsiyalar ro'yxatini qaytaradi. Tizim ushbu konfiguratsiyaga asoslanib, qanday ma'lumot turlarini kutishni va Dynamic Island uchun turli holatlarda — ixcham, minimal va kengaytirilgan — UI ni qanday render qilishni biladi.

WidgetKit va SwiftUI bilan Live Activity yaratish

Activity yaratish ActivityKit ga so'rov bilan boshlanadi. Ilova Activity.request(attributes:content:pushType:) ni boshlang'ich ma'lumotlar bilan chaqiradi. Tizim Dynamic Island qurilmada mavjudligini tekshiradi va Activity ob'ektini qaytaradi. Faol Activity lar limiti oshib ketganda so'rov xato bilan tugashi mumkin — odatda bir vaqtning o'zida 5 tadan ko'p bo'lmasligi kerak. Muvaffaqiyatli so'rovdan so'ng, tizim vidjetni Lock Screen da va iloji bo'lsa Dynamic Island da ko'rsatadi.

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

Live Activity uchun SwiftUI View WidgetKit dan LockScreenView, ExpandedView va CompactView strukturalaridan foydalanadi. View joriy atributlar va holat bilan kontekst (ActivityViewContext) oladi. View ning yangilanishi tizimdan yangi holat olinganda avtomatik ravishda sodir bo'ladi. Live Activity faqat cheklangan SwiftUI komponentlarini qo'llab-quvvatlaydi — Text, Image, HStack, VStack va bir nechta modifier.

Har bir Live Activity View engil va tez bo'lishi kerak — tizim og'ir ko'rinishlarni render qilishdan bosh tortadi. Render vaqti chegarasi — kadr uchun 30 ms. Animatsiyalar holatlar orasidagi tizim o'tishlari bilan cheklangan — Live Activity da maxsus animatsiyalar mavjud emas. Render WidgetKit fon jarayonida Lock Screen javob berish ustuvorligi bilan amalga oshiriladi.

Live Activity mahalliy va push orqali yangilash

Mahalliy yangilash — ilova activity.update(using:) chaqiruvi bilan Activity holatini yangilaydi. Metod yangi ContentState va yangilanishda bildirishnoma ko'rsatish uchun ixtiyoriy AlertConfiguration qabul qiladi. Mahalliy yangilanishlar tez — tizim keyingi render siklida View ni qayta chizadi, odatda 1-2 soniya ichida. Tez-tez yangilanishlar (taymer, sekundomer) uchun mahalliy rejimdan foydalaning — bu push dan ishonchliroq va tezroq.

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 yangilanishlari — server JSON formatida yangi holat bilan ActivityKit push bildirishnomasi yuboradi. Buning uchun ilova activity.pushToken publisher dan pushToken oladi va serverni uzatadi. Server APNs ga yangi ContentState ni o'z ichiga olgan payload bilan POST so'rovi yuboradi. Tizim push ni qabul qiladi, holatni dekodlaydi va ilova ishtirokisiz Live Activity ni yangilaydi — bu ilova yopiq bo'lganda ham Activity ni yangilash imkonini beradi.

Push yangilanishlari kamdan-kam yangilanishlar uchun (har 5-10 daqiqada yetkazib berish holati) tejamliroq — ilova tarmoq ulanishini ushlab turishi shart emas. Har 1-2 soniyada tez-tez yangilanishlar uchun mahalliy usuldan foydalaning. Server payload faqat o'zgaruvchan ContentState maydonlarini o'z ichiga oladi — Attributes statik ma'lumotlari faqat Activity yaratilganda yuboriladi.

Live Activity Dynamic Island da ko'rsatish

Dynamic Island — iPhone 14 Pro, 15 Pro va undan yangilarida Live Activity mazmuniga moslashadigan apparat-dasturiy maydoni. Tizim Activity ni avtomatik ravishda uch rejimda ko'rsatadi: ixcham (kesimning chap tomonida ikonka + qisqa matn), minimal (faqat ikonka) va kengaytirilgan (ma'lumotli 300pt to'rtburchak). Ishlab chiquvchi bu rejimlarni bevosita boshqarmaydi — tizim rejimni ustuvorlik va mavjud joyga qarab tanlaydi.

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

Dynamic Island interaktivlikni qo'llab-quvvatlaydi — foydalanuvchi maydonga tegadi va ilovaga kiradi yoki kengaytirilgan ko'rinishni ochadi. Ixcham rejimga tegish kengaytirilgan rejimga o'tadi, chapga surish esa Activity ni minimal rejimga yashiradi. Kengaytirilgan rejimdagi tugmalar (pause/cancel) SwiftUI dan Link orqali qayta ishlanadi — tizim ilovani deep link URL bilan ishga tushiradi, qayta ishlash UIApplicationDelegate da amalga oshiriladi.

Dynamic Island cheklovlari: kengaytirilgan rejim kengligi — 300pt gacha, ixcham matn — 30 belgigacha. Ranglar va shriftlar tizim mavzusiga mos keladi — sozlash cheklangan. Rejimlar orasidagi o'tish animatsiyalari tizimga oid va sozlanmaydi. Agar bir nechta ilovalar faol Activity larga ega bo'lsa, Dynamic Island ularni ishga tushirish vaqti va tarkib turiga qarab ustuvorlik bilan ko'rsatadi.

Tez-tez beriladigan savollar

Live Activity oddiy vidjetdan nimasi bilan farq qiladi?

Oddiy WidgetKit vidjeti statik ma'lumotlarni ko'rsatadi va tizim taymeri bo'yicha minimal 15-30 daqiqa intervalida yangilanadi. Live Activity bloklash ekrani va Dynamic Island da real vaqtda dinamik ma'lumotlarni ko'rsatadi. Live Activity ilova tomonidan ishga tushiriladi, 8 soatgacha yashaydi va voqea tugagandan so'ng tizim tomonidan yakunlanadi, doimiy mavjud vidjetdan farqli o'laroq.

Live Activity qanchalik tez-tez yangilanadi?

Live Activity ikki yangilash rejimini qo'llab-quvvatlaydi: mahalliy — ilova ActivityKit API orqali istalgan vaqtda holatni yangilaydi, va push — server tizim vidjetning yangi holatiga aylantiradigan ActivityKit push bildirishnomasini yuboradi. Batareya darajasi past bo'lganda, tizim zaryadlovchi ulanguncha Live Activity ni muzlatishi mumkin.

Live Activities qaysi qurilmalarda ishlaydi?

Live Activities iOS 16.1 va undan yangi iPhone larda mavjud. iPhone 14 Pro va undan yangilarida Live Activity Dynamic Island da ham ko'rsatiladi. iPad da Live Activity faqat bloklash ekranida qo'llab-quvvatlanadi — iPad da Dynamic Island mavjud emas. Apple Watch Live Activities ni to'g'ridan-to'g'ri qo'llab-quvvatlamaydi, lekin yakunlash haqidagi bildirishnomalarni ko'rsatishi mumkin.

Bir vaqtning o'zida nechta Live Activity ishlashi mumkin?

Tizim faol Live Activities sonini cheklaydi — odatda barcha ilovalar uchun bir vaqtning o'zida 5 tadan ko'p bo'lmasligi kerak. Limitdan oshib ketishga urinishda ActivityKit xato qaytaradi. Har bir Live Activity bir nechta holatga ega bo'lishi mumkin — masalan, kutish, yo'lda, yetkazilgan. Yakunlangandan so'ng, Activity UI da yana 4 soat qoladi.

Live Activity uchun foydalanuvchi ruxsati kerakmi?

Ha, ilova bildirishnomalarni yuborish uchun ruxsat so'rashi kerak — Live Activity tizim bildirishnomalar kanalidan foydalanadi. Foydalanuvchi sozlamalarda ma'lum bir ilova uchun Live Activity ni o'chirib qo'yishi mumkin. Birinchi ishga tushirishda ActivityKit ruxsat so'rovi bilan dialog oynasini ko'rsatadi. Ruxsatsiz Activity so'rovi xato bilan tugaydi.

Xulosa

  • Live Activity — Lock Screen va Dynamic Island da real vaqt yangilanishi bilan dinamik vidjet
  • ActivityKit — Live Activities hayotiy siklini boshqarish uchun iOS 16.1+ freymvorki
  • Attributes and State — SwiftUI View ga uzatiladigan statik ma'lumotlar va dinamik holat
  • Push yangilanishlari — server ilova ishtirokisiz APNs orqali yangi holat yuboradi
  • Dynamic Island — uchta ko'rsatish rejimi: ixcham, minimal va kengaytirilgan to'rtburchak
  • Limitlar — 5 faol Activity gacha, 8 soatgacha yashash, yakunlangandan so'ng 4 soatgacha
  • AlertConfiguration — Activity holati yangilanganda ixtiyoriy bildirishnoma

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing