Live Activity iPhone लॉक स्क्रीन और Dynamic Island पर एक डायनामिक विजेट है जो रीयल-टाइम जानकारी दिखाता है: डिलीवरी स्थिति, खेल स्कोर, टाइमर और संगीत प्लेबैक। इसे ActivityKit (Swift, iOS 16.1+) के माध्यम से WidgetKit के साथ लागू किया जाता है। Live Activity स्थानीय रूप से या push सूचनाओं के माध्यम से अपडेट होती है, कई स्थितियों का समर्थन करती है और ईवेंट समाप्त होने के बाद सिस्टम द्वारा समाप्त कर दी जाती है। अधिक जानकारी के लिए — ActivityKit Documentation देखें।
मुख्य बिंदु
Live Activity WidgetKit का एक विस्तार है जो iPhone लॉक स्क्रीन और Dynamic Island पर डायनामिक सामग्री प्रदर्शित करता है। स्थैतिक विजेट के विपरीत जो सिस्टम टाइमर पर अपडेट होता है, Live Activity ऐप द्वारा शुरू की जाती है और सीमित समय तक चलती है — सक्रिय Activity के लिए 8 घंटे तक और समाप्ति के बाद 4 घंटे तक। उपयोगकर्ता डिवाइस को अनलॉक किए बिना अद्यतित डेटा देखता है: डिलीवरी ऑर्डर की स्थिति, टैक्सी में गंतव्य की दूरी, मैच के परिणाम या वर्कआउट प्रगति।
ActivityKit Live Activities के साथ काम करने का फ्रेमवर्क है, जिसे iOS 16.1 में पेश किया गया। यह Activities के अनुरोध, अद्यतन और समाप्ति के लिए API प्रदान करता है। Activity सामग्री और स्थिति वाली एक वस्तु है। सामग्री (ActivityContent) स्थैतिक डेटा को परिभाषित करती है, जबकि स्थिति (ActivityState) समय के साथ बदलने वाले डायनामिक डेटा को परिभाषित करती है। सिस्टम स्वयं तय करता है कि नई स्थिति कब प्रस्तुत करनी है — इससे बैटरी बचती है और स्मूथ एनिमेशन सुनिश्चित होते हैं।
प्रत्येक Live Activity विशिष्ट रूप से ActivityID द्वारा पहचानी जाती है और एक प्रक्रिया से बंधी होती है — वह ऐप जिसने इसे बनाया। सिस्टम मेमोरी कम होने या बैटरी चार्ज कम होने पर Activity को समाप्त कर सकता है। डेवलपर को ActivityKit डेलीगेट के माध्यम से जबरन समाप्ति की सूचना मिलती है और वह बहाली के लिए अंतिम स्थिति सहेज सकता है।
Live Activity वास्तुकला दो फ्रेमवर्क पर बनी है: WidgetKit SwiftUI व्यू रेंडरिंग के लिए जिम्मेदार है, ActivityKit Activity जीवनचक्र के लिए जिम्मेदार है। डेवलपर LiveActivityConfiguration समर्थन के साथ WidgetBundle बनाता है। प्रत्येक कॉन्फ़िगरेशन डेटा प्रकार (Attributes और State) और SwiftUI व्यू को परिभाषित करता है जिसे सिस्टम लॉक स्क्रीन और Dynamic Island पर प्रस्तुत करता है। डेटा ActivityAttributes के माध्यम से पारित किया जाता है — सामग्री के लिए let फ़ील्ड और स्थिति के लिए var फ़ील्ड वाली एक संरचना।
| घटक | उद्देश्य | API |
|---|---|---|
| Attributes | पूरी Activity का स्थैतिक डेटा | let name: String, let icon: String |
| ContentState | डायनामिक स्थिति, अपडेट पर बदलती है | var progress: Double, var status: Status |
| Activity | Activity अनुरोध और प्रबंधन वस्तु | Activity.request(attributes:content:) |
| PushToken | सर्वर push अपडेट के लिए टोकन | activity.pushToken publisher |
| ActivityUI | लॉक स्क्रीन और Dynamic Island के लिए SwiftUI व्यू | LockScreenView, ExpandedView, CompactView |
Activity जीवनचक्र में तीन चरण शामिल हैं: सक्रिय (सिस्टम प्रदर्शित और अपडेट करता है), अंतिम (Activity समाप्त हो गई लेकिन UI अभी भी 4 घंटे दिखता है), हटाया गया (सिस्टम UI हटा देता है)। ऐप किसी भी समय Activity समाप्त कर सकता है। सिस्टम भी Activities को जबरन समाप्त करता है — उदाहरण के लिए, डिवाइस रीस्टार्ट करने या 8 घंटे की सीमा समाप्त होने पर।
import ActivityKit
struct DeliveryAttributes: ActivityAttributes {
public struct ContentState: Codable & Hashable {
var status: DeliveryStatus
var estimatedMinutes: Int
}
var orderNumber: String
var restaurantName: String
}
WidgetBundle @main मैक्रो के माध्यम से Live Activity पंजीकृत करता है: विजेट LiveActivityConfiguration सहित कॉन्फ़िगरेशन की एक सूची लौटाता है। इस कॉन्फ़िगरेशन के आधार पर, सिस्टम जानता है कि किस डेटा प्रकार की अपेक्षा करनी है और विभिन्न स्थितियों में UI कैसे प्रस्तुत करना है — Dynamic Island के लिए कॉम्पैक्ट, न्यूनतम और विस्तारित।
Activity बनाना ActivityKit को अनुरोध भेजने से शुरू होता है। ऐप प्रारंभिक डेटा के साथ Activity.request(attributes:content:pushType:) को कॉल करता है। सिस्टम जाँचता है कि डिवाइस पर Dynamic Island उपलब्ध है या नहीं और Activity ऑब्जेक्ट लौटाता है। यदि सक्रिय Activity की सीमा पार हो गई है तो अनुरोध विफल हो सकता है — आमतौर पर एक साथ 5 से अधिक नहीं। सफल अनुरोध के बाद, सिस्टम लॉक स्क्रीन पर और यदि उपलब्ध हो तो Dynamic Island में विजेट प्रदर्शित करता है।
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 के लिए SwiftUI व्यू WidgetKit से LockScreenView, ExpandedView और CompactView संरचनाओं का उपयोग करता है। व्यू को वर्तमान विशेषताओं और स्थिति के साथ संदर्भ (ActivityViewContext) प्राप्त होता है। सिस्टम से नई स्थिति आने पर व्यू स्वचालित रूप से अपडेट होता है। Live Activity केवल SwiftUI घटकों के सीमित सेट का समर्थन करता है — Text, Image, HStack, VStack और कुछ मॉडिफ़ायर।
प्रत्येक Live Activity व्यू हल्का और तेज़ होना चाहिए — सिस्टम भारी व्यू प्रस्तुत करने से मना कर देता है। रेंडरिंग समय सीमा 30 ms प्रति फ्रेम है। एनिमेशन स्थितियों के बीच सिस्टम संक्रमणों तक सीमित हैं — Live Activity में कस्टम एनिमेशन उपलब्ध नहीं हैं। रेंडरिंग लॉक स्क्रीन प्रतिक्रिया प्राथमिकता के साथ WidgetKit की पृष्ठभूमि प्रक्रिया में की जाती है।
स्थानीय अपडेट — ऐप activity.update(using:) कॉल करके Activity स्थिति अपडेट करता है। यह विधि नया ContentState और अपडेट पर सूचना दिखाने के लिए वैकल्पिक AlertConfiguration स्वीकार करती है। स्थानीय अपडेट तेज़ होते हैं — सिस्टम अगले रेंडर चक्र पर व्यू को फिर से खींचता है, आमतौर पर 1–2 सेकंड के भीतर। बार-बार अपडेट (टाइमर, स्टॉपवॉच) के लिए स्थानीय मोड का उपयोग करें — यह push से अधिक विश्वसनीय और तेज़ है।
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 अपडेट — सर्वर JSON प्रारूप में नई स्थिति के साथ ActivityKit push सूचना भेजता है। इसके लिए, ऐप activity.pushToken publisher से pushToken प्राप्त करता है और इसे सर्वर को भेजता है। सर्वर नए ContentState वाले payload के साथ APNs को POST अनुरोध भेजता है। सिस्टम push प्राप्त करता है, स्थिति डिकोड करता है और ऐप की भागीदारी के बिना Live Activity अपडेट करता है — यह Activity को तब भी अपडेट करने की अनुमति देता है जब ऐप बंद हो।
Push अपडेट दुर्लभ अपडेट के लिए अधिक कुशल हैं (डिलीवरी स्थिति हर 5–10 मिनट) — ऐप को नेटवर्क कनेक्शन बनाए रखने की आवश्यकता नहीं है। हर 1–2 सेकंड में बार-बार अपडेट के लिए स्थानीय विधि का उपयोग करें। सर्वर payload में केवल ContentState के परिवर्तनीय फ़ील्ड शामिल हैं — स्थैतिक Attributes डेटा केवल Activity बनाते समय भेजा जाता है।
Dynamic Island iPhone 14 Pro, 15 Pro और नए पर एक हार्डवेयर-सॉफ्टवेयर क्षेत्र है जो Live Activity सामग्री के अनुकूल होता है। सिस्टम स्वचालित रूप से Activity को तीन मोड में प्रदर्शित करता है: कॉम्पैक्ट (कटआउट के बाईं ओर आइकन + छोटा टेक्स्ट), न्यूनतम (केवल आइकन) और विस्तारित (जानकारी के साथ 300pt आयत)। डेवलपर इन मोड को सीधे नियंत्रित नहीं करता — सिस्टम प्राथमिकता और उपलब्ध स्थान के आधार पर मोड चुनता है।
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 इंटरैक्टिविटी का समर्थन करता है — उपयोगकर्ता क्षेत्र को टैप करता है और ऐप में प्रवेश करता है या विस्तारित दृश्य खोलता है। कॉम्पैक्ट मोड पर टैप करने से विस्तारित मोड में स्विच होता है, और बाईं ओर स्वाइप करने से Activity न्यूनतम मोड में आ जाती है। विस्तारित मोड में बटन (pause/cancel) SwiftUI से Link के माध्यम से संभाले जाते हैं — सिस्टम डीप लिंक URL के साथ ऐप लॉन्च करता है, प्रसंस्करण UIApplicationDelegate में किया जाता है।
Dynamic Island सीमाएँ: विस्तारित मोड की चौड़ाई 300pt तक, कॉम्पैक्ट टेक्स्ट 30 वर्णों तक। रंग और फ़ॉन्ट सिस्टम थीम से मेल खाते हैं — अनुकूलन सीमित है। मोड के बीच संक्रमण एनिमेशन सिस्टम-परिभाषित हैं और अनुकूलित नहीं किए जा सकते। यदि कई ऐप्स में सक्रिय Activities हैं, तो Dynamic Island उन्हें लॉन्च समय और सामग्री प्रकार के आधार पर प्राथमिकता के साथ प्रदर्शित करता है।
अक्सर पूछे जाने वाले प्रश्न
WidgetKit का सामान्य विजेट स्थैतिक जानकारी प्रदर्शित करता है और न्यूनतम अंतराल 15–30 मिनट के साथ सिस्टम टाइमर पर अपडेट होता है। Live Activity लॉक स्क्रीन और Dynamic Island पर वास्तविक समय में डायनामिक डेटा दिखाती है। Live Activity ऐप द्वारा शुरू की जाती है, 8 घंटे तक चलती है और ईवेंट समाप्त होने के बाद सिस्टम द्वारा समाप्त कर दी जाती है, उस विजेट के विपरीत जो स्थायी रूप से मौजूद रहता है।
Live Activity दो अपडेट मोड का समर्थन करती है: स्थानीय — ऐप किसी भी समय ActivityKit API के माध्यम से स्थिति अपडेट करता है, और push अपडेट — सर्वर ActivityKit push सूचना भेजता है जिसे सिस्टम विजेट की नई स्थिति में बदल देता है। बैटरी कम होने पर, सिस्टम Live Activity को चार्जिंग कनेक्ट होने तक फ़्रीज़ कर सकता है।
Live Activities iOS 16.1 और नए वाले iPhone पर उपलब्ध हैं। iPhone 14 Pro और नए पर, Live Activity Dynamic Island में भी प्रदर्शित होती है। iPad पर, Live Activity केवल लॉक स्क्रीन पर समर्थित है — iPad पर Dynamic Island उपलब्ध नहीं है। Apple Watch सीधे Live Activities का समर्थन नहीं करता, लेकिन समाप्ति सूचनाएँ प्रदर्शित कर सकता है।
सिस्टम सक्रिय Live Activities की संख्या सीमित करता है — आमतौर पर सभी ऐप्स के लिए एक साथ 5 से अधिक नहीं। सीमा से अधिक शुरू करने का प्रयास करने पर ActivityKit त्रुटि लौटाता है। प्रत्येक Live Activity में कई स्थितियाँ हो सकती हैं — उदाहरण के लिए, लंबित, पारगमन में, खाद्य ऑर्डर के लिए वितरित। समाप्ति के बाद, Activity UI में अगले 4 घंटे तक रहती है।
हाँ, ऐप को सूचनाएँ भेजने की अनुमति माँगनी चाहिए — Live Activity सिस्टम सूचना चैनल का उपयोग करता है। उपयोगकर्ता सेटिंग्स में किसी विशिष्ट ऐप के लिए Live Activity बंद कर सकता है। पहली बार लॉन्च करने पर, ActivityKit अनुमति माँगने वाला संवाद दिखाता है। अनुमति के बिना, Activity अनुरोध विफल हो जाता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें