Live Activity آئی فون کی لاک اسکرین اور Dynamic Island پر ایک ڈائنامک ویجٹ ہے جو ریئل ٹائم معلومات دکھاتا ہے: ڈیلیوری سٹیٹس، کھیلوں کے سکور، ٹائمرز اور موسیقی پلے بیک۔ یہ WidgetKit کے ساتھ ActivityKit (Swift، iOS 16.1+) کے ذریعے لاگو کیا جاتا ہے۔ Live Activity مقامی طور پر یا پش نوٹیفکیشنز کے ذریعے اپ ڈیٹ ہوتی ہے، متعدد حالتوں کو سپورٹ کرتی ہے اور ایونٹ ختم ہونے کے بعد سسٹم کے ذریعے ختم کر دی جاتی ہے۔ مزید معلومات کے لیے — ActivityKit Documentation دیکھیں۔
اہم نکات
Live Activity WidgetKit کی ایک توسیع ہے جو آئی فون کی لاک اسکرین اور 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 | سرور پش اپ ڈیٹس کے لیے ٹوکن | 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 سیکنڈ میں۔ بار بار اپ ڈیٹس (ٹائمر، سٹاپ واچ) کے لیے مقامی موڈ استعمال کریں — یہ پش سے زیادہ قابل اعتماد اور تیز ہے۔
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"
)
)
پش اپ ڈیٹس — سرور JSON فارمیٹ میں نئی حالت کے ساتھ ActivityKit پش نوٹیفکیشن بھیجتا ہے۔ اس کے لیے، ایپ activity.pushToken پبلشر سے pushToken وصول کرتی ہے اور سرور کو بھیجتی ہے۔ سرور نئے ContentState پر مشتمل پے لوڈ کے ساتھ APNs کو POST درخواست بھیجتا ہے۔ سسٹم پش وصول کرتا ہے، حالت ڈی کوڈ کرتا ہے اور ایپ کی شرکت کے بغیر Live Activity اپ ڈیٹ کرتا ہے — یہ ایپ بند ہونے پر بھی Activity کو اپ ڈیٹ کرنے کی اجازت دیتا ہے۔
پش اپ ڈیٹس کم بار بار اپ ڈیٹس (ہر 5-10 منٹ میں ڈیلیوری سٹیٹس) کے لیے زیادہ موثر ہیں — ایپ کو نیٹ ورک کنکشن برقرار رکھنے کی ضرورت نہیں ہے۔ ہر 1-2 سیکنڈ میں بار بار اپ ڈیٹس کے لیے مقامی طریقہ استعمال کریں۔ سرور پے لوڈ میں صرف 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 کے ذریعے حالت اپ ڈیٹ کرتی ہے، اور پش اپ ڈیٹ — سرور ActivityKit پش نوٹیفکیشن بھیجتا ہے جسے سسٹم ویجٹ کی نئی حالت میں تبدیل کرتا ہے۔ بیٹری کم ہونے پر، سسٹم 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں