مقامی اطلاع ایک پیغام ہے جو ایپ ریموٹ سرور کی شرکت کے بغیر صارف کو بھیجتی ہے۔ تمام ڈیٹا وصول کنندہ کے آلے پر براہ راست پروسیس اور ظاہر کیا جاتا ہے۔ یہ طریقہ کار یاد دہانیوں، ٹائمرز اور الارموں کے لیے موزوں ہے جب ایپ بیک گراؤنڈ میں ہو یا بند ہو۔ Apple Developer Documentation کے مطابق، UNUserNotificationCenter iOS پر مقامی اطلاعات کا مرکزی انتظام فراہم کرتا ہے۔
اہم نکات
مقامی اطلاع ایک متحرک پیغام ہے جو آپریٹنگ سسٹم کے ذریعے اسی آلے پر تیار اور ظاہر کیا جاتا ہے جہاں ایپ انسٹال ہے۔ پش اطلاعات کے برعکس، مقامی اطلاعات بیرونی سرور سے نہیں گزرتیں — تمام شیڈولنگ منطق کلائنٹ پر چلتی ہے۔
یہ اطلاعات ایپ کی حالت سے قطع نظر کام کرتی ہیں: فعال، چھوٹا کیا ہوا یا مکمل طور پر بند۔ آپریٹنگ سسٹم مقررہ وقت پر ترسیل کا خیال رکھتا ہے، جبکہ ڈویلپر صرف مواد اور محرک کی وضاحت کرتا ہے۔
سسٹم نیٹ ورک کے بغیر بھی مقامی اطلاع کی ترسیل کی ضمانت دیتا ہے۔ یہ پش اطلاعات پر ایک اہم فائدہ ہے، جن کے لیے مستحکم انٹرنیٹ کنیکشن اور کام کرنے والے سرور کی ضرورت ہوتی ہے۔
ہر مقامی اطلاع تین حصوں پر مشتمل ہوتی ہے: مواد (عنوان، باڈی، آواز)، محرک (وقت یا مقام کی شرط) اور درخواست کی شناخت کنندہ۔ شناخت کنندہ ترسیل سے پہلے اطلاع کو منسوخ یا اپ ڈیٹ کرنے کی اجازت دیتا ہے۔
ایک ڈویلپر iOS پر فی ایپ 64 مقامی اطلاعات اور Android پر لامحدود تعداد شیڈول کر سکتا ہے۔ یہ فرق آپریٹنگ سسٹم کی تعمیری حدود کی وجہ سے ہے۔
دونوں پلیٹ فارم مقامی اطلاعات کے ساتھ کام کرنے کے لیے اپنے APIs فراہم کرتے ہیں۔ iOS پر، مرکزی جزو UNUserNotificationCenter ہے، Android پر — NotificationManager۔ مختلف انٹرفیس کے باوجود، منطق ایک جیسی ہے: ایپ ایک درخواست بناتی ہے، اسے سسٹم میں رجسٹر کرتی ہے، اور OS مقررہ وقت پر اطلاع پہنچاتا ہے۔
iOS کیلنڈر واقعات کے لیے UNCalendarNotificationTrigger، وقفوں کے لیے UNTimeIntervalNotificationTrigger اور مقام کے لیے UNLocationNotificationTrigger استعمال کرتا ہے۔ Android AlarmManager، WorkManager اور setExact کے ذریعے درست شیڈولنگ فراہم کرتا ہے۔
Android 12 سے — SCHEDULE_EXACT_ALARM کے لیے صارف سے خصوصی اجازت درکار ہے۔ iOS پر، اجازت UNUserNotificationCenter.requestAuthorization کے ذریعے ایک بار مانگی جاتی ہے اور صارف رسائی کی سطح منتخب کرتا ہے: بینرز، آوازیں، بیجز۔
مقامی اطلاعات کو مواد کے بجائے محرک کی قسم کے مطابق درجہ بند کیا جاتا ہے۔ ہر قسم یہ طے کرتی ہے کہ اطلاع صارف کو کب اور کن شرائط میں دکھائی جائے گی۔
iOS اور Android پر، محرک کی اقسام مختلف طریقے سے لاگو کی جاتی ہیں، اگرچہ منطقی درجہ بندی ایک جیسی ہے۔ iOS تاریخوں کے لیے UNCalendarNotificationTrigger، وقفوں کے لیے UNTimeIntervalNotificationTrigger اور مقام کے لیے UNLocationNotificationTrigger استعمال کرتا ہے۔ Android setExact اور setRepeating کے ساتھ AlarmManager، نیز تاخیری کاموں کے لیے WorkManager فراہم کرتا ہے۔
| محرک کی قسم | وضاحت | مثال |
|---|---|---|
| وقتی وقفہ | شروع ہونے کے N سیکنڈ بعد اطلاع | الٹی گنتی ٹائمر |
| کیلنڈر تاریخ | مخصوص وقت اور تاریخ پر اطلاع | میٹنگ کی یاد دہانی |
| مقام | علاقے میں داخل/خارج ہونے پر اطلاع | دکان پر یاد دہانی |
| فوری | API کال پر فوری ترسیل | ڈاؤن لوڈ کی اطلاع |
iOS UNNotificationAttachment کو بھی سپورٹ کرتا ہے — اطلاع کے باڈی میں تصویر، آڈیو یا ویڈیو منسلک کرنا۔ Android NotificationCompat.Style کے ذریعے بٹن اور بڑی تصاویر والے حسب ضرورت ٹیمپلیٹس کو سپورٹ کرتا ہے۔
محرک کا انتخاب منظرنامے پر منحصر ہے: کیلنڈر یاد دہانیاں کیلنڈر محرک کے ساتھ بہترین کام کرتی ہیں، مقامی یاد دہانیاں مقام کے ساتھ۔ وقفہ محرک مقررہ مدت کے ساتھ بار بار ہونے والے واقعات کے لیے موزوں ہیں۔
iOS پر، مقامی اطلاعات سسٹم کے ذریعے ایپ بند ہونے پر بھی پہنچائی جاتی ہیں — UNUserNotificationCenter آزادانہ طور پر قطار کا انتظام کرتا ہے۔ Android پر، ترسیل منتخب میکانزم پر منحصر ہے: AlarmManager اسکرین بند ہونے پر بھی کام کرتا ہے، جبکہ WorkManager بجلی کی بچت کو مدنظر رکھتا ہے۔
مقامی اطلاعات ان کاموں کو حل کرتی ہیں جہاں بیرونی بنیادی ڈھانچہ ضرورت سے زیادہ یا دستیاب نہیں ہوتا۔ اہم منظرنامے: یاد دہانیاں، ٹائمرز، آن بورڈنگ تجاویز اور تاخیری کارروائیاں۔
Localytics کی تحقیق سے پتہ چلتا ہے کہ مقامی یاد دہانیاں استعمال کرنے والی ایپس انسٹالیشن کے بعد پہلے ہفتے میں 35% زیادہ صارفین کو برقرار رکھتی ہیں۔ یہ مقامی اطلاعات کو ایک طاقتور آن بورڈنگ ٹول بناتا ہے۔
تکرار کو غلط استعمال نہ کرنا ضروری ہے — سسٹم خود ایک ہی ایپ سے اطلاعات کو گروپ کرتا ہے اور اگر وہ پریشان کن ہو جائیں تو صارف تمام مقامی اطلاعات کو غیر فعال کر سکتا ہے۔ غیر اہم واقعات کے لیے بہترین تکرار دن میں 2–3 اطلاعات سے زیادہ نہیں ہے۔
Android پر مقامی اطلاع شیڈول کرنے کے لیے، AlarmManager کے ساتھ NotificationManager استعمال کریں۔ Android 8+ پر، آپ کو پہلے ایک اطلاع چینل بنانا ہوگا، ورنہ اطلاع ظاہر نہیں ہوگی۔
val channelId = "reminder_channel"
val notificationId = "task_reminder_42"
val channel = NotificationChannel(
channelId,
"یاد دہانیاں",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "کاموں کی یاد دہانی کے لیے چینل"
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
val intent = Intent(this, ReminderReceiver::class.java).apply {
putExtra("notification_id", notificationId)
putExtra("channel_id", channelId)
}
val pendingIntent = PendingIntent.getBroadcast(
this, notificationId.hashCode(),
intent, PendingIntent.FLAG_UPDATE_CURRENT
)
val alarmManager = getSystemService(AlarmManager::class.java)
alarmManager.setExact(
AlarmManager.RTC_WAKEUP,
triggerTimeMillis,
pendingIntent
)
Android 12+ پر، setExact کال کرنے سے پہلے SCHEDULE_EXACT_ALARM کی اجازت چیک کریں۔ اگر اجازت نہیں دی گئی — setWindow استعمال کریں، جو وقت کی ونڈو کے اندر ترسیل کی ضمانت دیتا ہے۔
جب AlarmManager چالو ہوتا ہے، سسٹم ایک براڈکاسٹ Intent بھیجتا ہے جسے BroadcastReceiver وصول کرتا ہے۔ اس کے اندر، آپ کو NotificationManager کے ذریعے اطلاع بنانی اور دکھانی ہوتی ہے۔ یقینی بنائیں کہ PendingIntent FLAG_UPDATE_CURRENT استعمال کرتا ہے، ورنہ ڈیٹا تبدیل ہونے پر پرانی اطلاعات پرانے Intent کا استعمال جاری رکھیں گی۔
iOS پر، مقامی اطلاعات UNUserNotificationCenter کے ذریعے UNMutableNotificationContent اور ایک محرک کا استعمال کرتے ہوئے بنائی جاتی ہیں۔ شیڈولنگ سے پہلے، آپ کو صارف سے اجازت لینی ہوگی۔
import UserNotifications
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
guard granted else { return }
}
let content = UNMutableNotificationContent()
content.title = "کام کی یاد دہانی"
content.body = "18:00 بجے تک رپورٹ مکمل کرنا نہ بھولیں"
content.sound = .default
content.userInfo = ["task_id": "42"]
let trigger = UNTimeIntervalNotificationTrigger(
timeInterval: 3600,
repeats: false
)
let request = UNNotificationRequest(
identifier: "task_reminder_42",
content: content,
trigger: trigger
)
center.add(request)
iOS بیک وقت 64 مقامی اطلاع کی درخواستوں کو سپورٹ کرتا ہے۔ اگر حد سے تجاوز کیا جائے تو، سسٹم نئی درخواستوں کو اس وقت تک مسترد کرتا ہے جب تک فعال درخواستیں پہنچا یا منسوخ نہ ہو جائیں۔ موجودہ قطار چیک کرنے کے لیے getPendingNotificationRequests استعمال کریں۔
جب صارف iOS پر مقامی اطلاع کے ساتھ تعامل کرتا ہے، تو UNUserNotificationCenterDelegate کے userNotificationCenter:didReceive response طریقہ کو کال کیا جاتا ہے۔ یہ طریقہ درخواست کی شناخت کنندہ، actionIdentifier (کون سا بٹن دبایا گیا) اور حسب ضرورت userInfo فراہم کرتا ہے۔ یہ ایک سادہ اطلاع کھولنے اور کسی مخصوص ایکشن بٹن کو دبانے کے درمیان فرق کرنے کی اجازت دیتا ہے۔
مقامی اطلاعات کو پریشان کن ہونے کے بجائے مفید بنانے کے لیے، کئی اہم اصولوں پر عمل کریں۔ پہلا: تکرار کو کنٹرول کریں — غیر اہم واقعات کے لیے دن میں 2–3 اطلاعات سے زیادہ نہیں، ورنہ صارف تمام ایپ اطلاعات کو غیر فعال کر دے گا۔
دوسرا: صارف کو انتخاب دیں۔ انٹرفیس میں مخصوص اقسام کی مقامی اطلاعات کو غیر فعال کرنے کی صلاحیت شامل کریں۔ Android پر، اس کے لیے کم اہمیت کے ساتھ علیحدہ NotificationChannel استعمال کریں؛ iOS پر، ایپ کی ترتیبات میں علیحدہ زمرہ استعمال کریں۔
تیسرا: سیاقی مطابقت — اطلاع اس وقت ظاہر ہونی چاہیے جب صارف کو اس کی ضرورت ہو۔ مقام کے محرک گھر کے قریب یاد دہانیوں کے لیے مثالی ہیں، کیلنڈر محرک میٹنگز کے لیے، وقفہ محرک باقاعدہ سرگرمیوں جیسے پانی پینا یا اسٹریچنگ کے لیے موزوں ہیں۔ ضرورت کے بغیر اقسام کو نہ ملائیں۔
چوتھا: حقیقی آلات پر ٹیسٹ کریں۔ iOS سمیولیٹر مقامی اطلاعات کی ترسیل کے تمام منظرناموں کی نقل نہیں کرتا، خاص طور پر بیک گراؤنڈ میں۔ Android پر، شیڈول شدہ اطلاعات کی قطار اور ان کے پیرامیٹرز چیک کرنے کے لیے adb shell dumpsys notification استعمال کریں۔ پانچواں: ہمیشہ صارف کو ایپ انٹرفیس کے ذریعے اطلاعات کو غیر فعال کرنے کی صلاحیت فراہم کریں — یہ UX اور App Store Review Guidelines کی لازمی ضرورت ہے۔
اکثر پوچھے گئے سوالات
مقامی اطلاع سرور کی شرکت کے بغیر آلے کے ذریعے شیڈول اور پہنچائی جاتی ہے۔ پش اطلاع کے لیے بیرونی سروس (FCM, APNS) اور انٹرنیٹ کنیکشن درکار ہے۔ مقامی اطلاعات آف لائن کام کرتی ہیں، پش صرف نیٹ ورک تک رسائی کے ساتھ۔
iOS بیک وقت 64 شیڈول شدہ درخواستوں تک محدود کرتا ہے۔ Android کی کوئی سخت حد نہیں ہے، لیکن 500 سے زیادہ اطلاعات سسٹم کی کارکردگی کو کم کر سکتی ہیں اور ترسیل کے وقت کو متاثر کر سکتی ہیں۔
ہاں، iOS پر درخواست کی شناخت کنندہ کے ساتھ removePendingNotificationRequests استعمال کریں۔ Android پر، NotificationManager.cancel کال کریں یا AlarmManager کے ذریعے PendingIntent منسوخ کریں۔ منسوخی کے لیے منفرد شناخت کنندہ لازمی ہے۔
iOS پر، requestAuthorization کے ذریعے اجازت لازمی ہے۔ Android 13+ (Tiramisu) پر بھی POST_NOTIFICATIONS کی اجازت درکار ہے۔ Android کے پرانے ورژنز کو مقامی اطلاعات کے لیے واضح اجازت کی ضرورت نہیں ہے۔
iOS پر، UNNotificationAction بنائیں اور اسے UNNotificationCategory میں شامل کریں۔ Android پر، BroadcastReceiver کو ہدف بنانے والے PendingIntent کے ساتھ NotificationCompat.Builder.addAction استعمال کریں۔ ہر بٹن ایپ میں ایک علیحدہ کارروائی کو متحرک کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں