Notification Category (نوٹیفکیشن کیٹیگری) iOS کا ایک طریقہ کار ہے جو پش نوٹیفکیشنز کو قسم کے مطابق گروپ کرنے اور ان میں حسب ضرورت ایکشنز منسلک کرنے کے لیے ہے۔ کیٹیگری اس بات کا تعین کرتی ہے کہ نوٹیفکیشن پر 3D Touch یا لمبا دبانے پر کون سے بٹن دکھائے جائیں، نیز سسٹم اس قسم کے آنے والے نوٹیفکیشنز کو کیسے پروسیس کرتا ہے۔ Apple ڈویلپر دستاویزات کے مطابق، UNNotificationCategory کو UNUserNotificationCenter میں رجسٹر کیا جاتا ہے اور APNS پے لوڈ میں category فیلڈ کے ذریعے نوٹیفکیشن سے منسلک کیا جاتا ہے۔
اہم نکات
Notification Category iOS 8.0 سے دستیاب ایک فیچر ہے جو ڈویلپرز کو پش نوٹیفکیشنز کی درجہ بندی کرنے اور ان میں انٹرایکٹو ایکشنز شامل کرنے کی اجازت دیتا ہے۔ جب صارف کوئی نوٹیفکیشن وصول کرتا ہے اور زور سے دباتا ہے (3D Touch) یا لمبا دباتا ہے، تو کیٹیگری کے ذریعے متعین کردہ بٹن ظاہر ہوتے ہیں۔ یہ نوٹیفکیشنز کو انٹرایکٹو بناتا ہے اور صارفین کو ایپ کھولے بغیر کارروائی کرنے کی اجازت دیتا ہے۔
ایک کیٹیگری UNNotificationCategory آبجیکٹ کے ذریعے رجسٹر کی جاتی ہے، جس میں ایک شناخت کنندہ، ایکشنز کی ایک صف اور اختیاری ڈسپلے پیرامیٹرز ہوتے ہیں۔ سسٹم APNS پے لوڈ سے کیٹیگری شناخت کنندہ کا استعمال کرتے ہوئے رجسٹرڈ کیٹیگری تلاش کرتا ہے اور متعلقہ بٹن دکھاتا ہے۔
Android Notification Channel کے برعکس، iOS Category اہمیت، آواز یا وائبریشن کا انتظام نہیں کرتی۔ اس کا واحد مقصد نوٹیفکیشنز کے لیے انٹرایکٹو صلاحیتیں فراہم کرنا ہے: جواب، تصدیق، منسوخی یا ٹیکسٹ ان پٹ بٹن۔
iOS پر پش نوٹیفکیشنز دکھانے کے لیے کیٹیگریز لازمی نہیں ہیں۔ نوٹیفکیشن بہرحال ظاہر ہوگا — کیٹیگری رجسٹر ہونے پر بٹنوں کے ساتھ، یا بغیر بٹنوں کے۔ کیٹیگریز صرف نوٹیفکیشنز میں انٹرایکٹیویٹی شامل کرنے کے لیے ضروری ہیں۔
کیٹیگری میکانزم چار مراحل پر مشتمل ہے: کلائنٹ پر کیٹیگری رجسٹر کرنا، کیٹیگری کے ساتھ APNS پے لوڈ بھیجنا، سسٹم کا کیٹیگری کو پہچاننا، اور صارف کے ایکشن کو ہینڈل کرنا۔
کیٹیگری میں ایکشنز دو اقسام کی ہو سکتی ہیں: foreground (ایپ کھولتے ہیں) اور background (پس منظر میں عملدرآمد ہوتے ہیں)۔ پس منظر کے ایکشنز کے لیے، ایپ کو UNNotificationActionHandler میں پروسیس کرنے کے لیے محدود وقت (تقریباً 30 سیکنڈ) ملتا ہے۔
UNNotificationCategory options پیرامیٹر کے ذریعے کئی اختیارات کو سپورٹ کرتی ہے: customDismissAction — نوٹیفکیشن کو سوائپ کرنے پر ایونٹ حاصل کرنا، allowInCarPlay — CarPlay میں ایکشنز دکھانا، hiddenPreviewsBodyPlaceholder — پوشیدہ پیش نظاروں کے لیے حسب ضرورت پلیس ہولڈر ٹیکسٹ۔
iOS نوٹیفکیشن کیٹیگریز کے لیے دو اقسام کے ایکشنز فراہم کرتا ہے۔ ہر قسم کا اپنا مقصد اور صارف کے ساتھ بات چیت کا اپنا طریقہ ہے۔
| قسم | کلاس | وضاحت | مثال |
|---|---|---|---|
| سادہ ایکشن | UNNotificationAction | عنوان اور اختیارات (destructive, foreground, authenticationRequired) والا بٹن | «حذف کریں», «دیکھیں» |
| ٹیکسٹ ان پٹ | UNTextInputAction | ایک بٹن جو پلیس ہولڈر کے ساتھ ٹیکسٹ ان پٹ فیلڈ کھولتا ہے | «جواب دیں», «تبصرہ کریں» |
UNTextInputAction iOS کی ایک منفرد خصوصیت ہے۔ جب صارف «جواب دیں» بٹن دباتا ہے، سسٹم ایک ٹیکسٹ فیلڈ دکھاتا ہے جہاں صارف اپنا جواب ٹائپ کرتا ہے۔ درج کردہ ٹیکسٹ ایکشن شناخت کنندہ کے ساتھ ڈیلیگیٹ کو بھیجا جاتا ہے۔ یہ ایپ کھولے بغیر فوری جوابات لاگو کرنے کی اجازت دیتا ہے۔
ایکشن اختیارات: options.authenticationRequired — ڈیوائس انلاک کرنے کی ضرورت ہے، options.destructive — بٹن کو سرخ رنگ میں نمایاں کرتا ہے (خطرناک ایکشنز کے لیے)، options.foreground — دبانے کے بعد ایپ کھولتا ہے۔
کیٹیگریز ایپ لانچ ہونے پر رجسٹر کی جاتی ہیں، عام طور پر didFinishLaunchingWithOptions طریقہ میں۔ رجسٹریشن UNUserNotificationCenter کے ذریعے، نوٹیفکیشن کی اجازت مانگنے کے بعد کی جاتی ہے۔ کیٹیگریز ہر لانچ پر اپ ڈیٹ کی جا سکتی ہیں — پرانے ورژن نئے سے بدل دیے جاتے ہیں۔
import UserNotifications
class AppDelegate: UIResponder, UIApplicationDelegate {
func registerNotificationCategories() {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "جواب دیں",
options: [.foreground],
textInputButtonTitle: "بھیجیں",
textInputPlaceholder: "پیغام درج کریں..."
)
let deleteAction = UNNotificationAction(
identifier: "delete",
title: "حذف کریں",
options: [.destructive]
)
let messageCategory = UNNotificationCategory(
identifier: "message",
actions: [replyAction, deleteAction],
intentIdentifiers: [],
options: [.customDismissAction]
)
UNUserNotificationCenter.current()
.setNotificationCategories([messageCategory])
}
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
UNUserNotificationCenter.current().delegate = self
registerNotificationCategories()
return true
}
}
کیٹیگری رجسٹر کرنے کے بعد، APNS پے لوڈ میں category = «message» والا کوئی بھی نوٹیفکیشن «جواب دیں» اور «حذف کریں» بٹن دکھائے گا۔ ٹیپ ہینڈلنگ userNotificationCenter:didReceive response میں ہوتی ہے، جہاں actionIdentifier اس بات کا تعین کرتا ہے کہ کون سا بٹن دبایا گیا۔
جب صارف کیٹیگری بٹن دباتا ہے، iOS UNNotificationResponse آبجیکٹ کے ساتھ UNUserNotificationCenterDelegate کو کال کرتا ہے۔ response.actionIdentifier میں دبائے گئے بٹن کا شناخت کنندہ ہوتا ہے، اور response.notification.request.content.userInfo میں پے لوڈ سے حسب ضرورت ڈیٹا ہوتا ہے۔
Android نوٹیفکیشن چینلز سے واقف ڈویلپرز اکثر انہیں iOS نوٹیفکیشن کیٹیگریز کے ساتھ الجھا دیتے ہیں۔ ایک جیسے نام کے باوجود، یہ میکانزم مختلف کاموں کو حل کرتے ہیں اور مختلف طریقے سے کام کرتے ہیں۔
دونوں پلیٹ فارم دونوں میکانزم کو یکجا کر سکتے ہیں: Android پر، ایک نوٹیفکیشن NotificationCompat کے ایکشنز والے چینل سے تعلق رکھ سکتا ہے، جبکہ iOS پر، ایک کیٹیگری چینلز کی تکمیل کرتی ہے، جنہیں iOS میں thread-id کہا جاتا ہے اور نوٹیفکیشن سینٹر میں نوٹیفکیشنز کو گروپ کرنے کے لیے استعمال ہوتا ہے۔
نوٹیفکیشن کو کیٹیگری بٹنوں کے ساتھ ظاہر کرنے کے لیے، سرور کو APNS پے لوڈ میں category کلید شامل کرنی ہوگی۔ اس کلید کے بغیر، سسٹم کو نہیں معلوم ہوگا کہ نوٹیفکیشن پر کون سی کیٹیگری لاگو کرنی ہے۔
{
"aps": {
"alert": {
"title": "نیا پیغام",
"body": "انا: ہیلو! کیسے ہو؟"
},
"category": "message",
"thread-id": "chat_123",
"badge": 5,
"sound": "default"
}
}
category کلید کو کلائنٹ پر setNotificationCategories کے ذریعے رجسٹر کردہ شناخت کنندہ سے بالکل مماثل ہونا چاہیے۔ حروفِ کا فرق اہم ہے — «message» اور «Message» مختلف کیٹیگریز سمجھی جاتی ہیں۔ اگر کیٹیگری نہ ملے تو نوٹیفکیشن بٹنوں کے بغیر ظاہر ہوتا ہے، لاگ میں کوئی خرابی نہیں ہوتی۔
اگر سرور ایسی کیٹیگری کے ساتھ نوٹیفکیشن بھیجتا ہے جو کلائنٹ پر رجسٹر نہیں ہے، iOS کیٹیگری کو نظر انداز کرتا ہے اور نوٹیفکیشن کو بٹنوں کے بغیر دکھاتا ہے۔ خرابی لاگ نہیں ہوتی اور ایپ کو عدم مماثلت کے بارے میں پتہ نہیں چلتا۔ سرور اور کلائنٹ کے درمیان کیٹیگریز کی فہرست کو ہم آہنگ کرنے کی سفارش کی جاتی ہے۔
iOS میں نوٹیفکیشن کیٹیگریز ڈیزائن کرتے وقت، ایک کیٹیگری — ایک منظر نامہ کے اصول پر عمل کریں۔ ہر کیٹیگری کو ایک مخصوص قسم کے تعامل کے مطابق ہونا چاہیے: پیغام کا جواب دینا، کسی ایکشن کی تصدیق کرنا، درخواست کو مسترد کرنا۔ ایک ہی کیٹیگری میں مختلف منظرنامے نہ ملائیں۔
ان منظرناموں کے لیے UNTextInputAction استعمال کریں جہاں صارف کو ایپ کھولے بغیر ٹیکسٹ درج کرنا ہو: میسجنگ جوابات، تبصرے، فوری نوٹس۔ ٹیکسٹ ایکشنز مصروفیت بڑھاتے ہیں — صارف ایپ میں 5+ کے بجائے 2 ٹیپ میں ایک بامعنی ایکشن انجام دیتا ہے۔
خطرناک ایکشنز (حذف کرنا، بلاک کرنا) کے لیے destructive آپشن استعمال کریں۔ iOS ان بٹنوں کو سرخ رنگ میں نمایاں کرے گا، صارف کو ایکشن کی ناقابل واپسی سے آگاہ کرے گا۔ ان ایکشنز کے لیے جن میں ڈیوائس انلاک کرنا ضروری ہے (ذاتی ڈیٹا دیکھنا)، authenticationRequired متعین کریں۔
مختلف آلات پر کیٹیگریز کو آزمائیں: 3D Touch والے iPhone پر، 3D Touch کے بغیر iPhone (لمبا دبانا) پر، iPad پر اور Mac پر۔ Apple پلیٹ فارمز پر کیٹیگریز کا رویہ تھوڑا مختلف ہو سکتا ہے۔ CarPlay پر خاص توجہ دیں: کیٹیگری بٹن کار کی سکرین پر ظاہر ہوتے ہیں اور ڈرائیور کی حفاظت کے لیے کم سے کم ٹیکسٹ کے ساتھ ڈیزائن کیے جانے چاہئیں۔
اکثر پوچھے گئے سوالات
کوئی حد نہیں ہے — iOS UNNotificationCategory کی تعداد پر کوئی حد نہیں لگاتا۔ تاہم، عملی طور پر، ڈیلیگیٹ ہینڈلنگ کو پیچیدہ نہ کرنے کے لیے 10–15 سے زیادہ کیٹیگریز استعمال نہ کرنے کی سفارش کی جاتی ہے۔ ہر کیٹیگری میں زیادہ سے زیادہ 4 ایکشنز (بٹن) ہو سکتے ہیں۔ 4 سے زیادہ ایکشنز سسٹم کے ذریعے نظر انداز کر دیے جاتے ہیں۔
UNUserNotificationCenterDelegate پروٹوکول اور didReceive طریقہ لاگو کریں۔ response.actionIdentifier چیک کریں: UNNotificationDismissActionIdentifier — مسترد کرنے کے لیے سوائپ، UNNotificationDefaultActionIdentifier — باڈی پر ٹیپ، یا آپ کا حسب ضرورت بٹن شناخت کنندہ۔ ٹیکسٹ ان پٹ بٹنوں کے لیے، ٹیکسٹ response.userText کے ذریعے دستیاب ہے۔
Category — نوٹیفکیشن کے لیے انٹرایکٹو ایکشنز (بٹن) متعین کرتی ہے۔ Thread-id — نوٹیفکیشن سینٹر میں نوٹیفکیشنز کو موضوع کے مطابق گروپ کرتا ہے۔ دونوں کنجیاں APNS پے لوڈ میں متعین کی جاتی ہیں۔ Category اور thread-id کا آپس میں کوئی تعلق نہیں: نوٹیفکیشن میں کیٹیگری ہو سکتی ہے لیکن thread-id نہ ہو، اور اس کے برعکس۔
ہاں، UNNotificationCategory macOS 10.14+ (Mojave) پر UserNotifications فریم ورک استعمال کرنے والی ایپس میں سپورٹڈ ہے۔ macOS پر کیٹیگریز کا رویہ iOS جیسا ہے: نوٹیفکیشن پر کلک کرنے پر بٹن دکھائے جاتے ہیں اور ہینڈلنگ UNUserNotificationCenterDelegate کے ذریعے ہوتی ہے۔
setNotificationCategories کے ذریعے ہر ایپ لانچ پر کیٹیگریز رجسٹر کرنے کی سفارش کی جاتی ہے۔ سسٹم ہر کال پر پرانے کیٹیگری سیٹ کو نئے سے بدل دیتا ہے۔ اگر آپ اپ ڈیٹ نہیں کرتے، کیٹیگریز لانچ کے درمیان برقرار رہتی ہیں، لیکن جب کوڈ بدلتا ہے، پرانی کیٹیگریز غیر متوقع رویے کا سبب بن سکتی ہیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں