Notification Content Extension ایک iOS ایکسٹینشن ہے جو معیاری push نوٹیفکیشن انٹرفیس کو کسٹم UIView سے تبدیل کرنے کی اجازت دیتی ہے۔ ڈیولپر مواد کی نمائش پر مکمل کنٹرول حاصل کرتا ہے: تصاویر، ویڈیوز، اینیمیشنز، کسٹم فونٹس اور انٹرایکٹو عناصر۔ Apple Developer، 2025 کے مطابق، Notification Content Extension نوٹیفکیشن کی محدود جگہ میں کسی بھی UIKit انٹرفیس کو سپورٹ کرتا ہے۔
اہم نکات
Notification Content Extension iOS میں ایک ایپ ایکسٹینشن ہے جو push نوٹیفکیشن کے معیاری ڈسپلے ٹیمپلیٹ کو کسٹم UIView سے بدل دیتی ہے۔ عام نوٹیفکیشن کے برعکس، جہاں مواد عنوان، ذیلی عنوان اور باڈی تک محدود ہوتا ہے، ایکسٹینشن کسی بھی UIKit انٹرفیس کو ڈسپلے کر سکتی ہے: کوآرڈینیٹ کے ساتھ نقشہ، گراف، تصویری گیلری یا ان پٹ فارم۔
جب iOS مخصوص categoryIdentifier کے ساتھ push نوٹیفکیشن وصول کرتا ہے، تو سسٹم چیک کرتا ہے کہ آیا اس زمرے کے لیے کوئی ایکسٹینشن رجسٹرڈ ہے۔ اگر ہے تو — سسٹم ایکسٹینشن کو علیحدہ عمل میں شروع کرتا ہے اور اسے نوٹیفکیشن کا مواد بھیجتا ہے۔ ایکسٹینشن معیاری کے بجائے اپنا انٹرفیس ڈسپلے کرتی ہے۔ صارف مرکزی ایپلیکیشن کھولے بغیر کسٹم انٹرفیس کے ساتھ تعامل کرتا ہے۔
Notification Content Extension کو Notification Service Extension کے ساتھ الجھانا نہیں چاہیے۔ Service Extension نوٹیفکیشن ڈسپلے ہونے سے پہلے مواد پر کارروائی کرتی ہے (اٹیچمنٹ ڈاؤن لوڈ، ڈکرپشن)۔ Content Extension تیار مواد ملنے کے بعد انٹرفیس بدلتی ہے۔ دونوں ایکسٹینشنز مل کر کام کر سکتی ہیں: Service Extension ڈیٹا تیار کرتی ہے، Content Extension اسے ڈسپلے کرتی ہے۔
| خصوصیت | Content Extension | Service Extension |
|---|---|---|
| مقصد | کسٹم نوٹیفکیشن UI | ڈسپلے سے پہلے مواد میں تبدیلی |
| عملدرآمد کا وقت | جب تک صارف نوٹیفکیشن دیکھتا ہے | پس منظر میں 30 سیکنڈ تک |
| انٹرفیس | مکمل UIKit UIView | کوئی انٹرفیس نہیں |
| API | UNNotificationContentExtension | UNNotificationServiceExtension |
Notification Content Extension محدود وسائل کے ساتھ الگ تھلگ عمل میں کام کرتی ہے۔ ایکسٹینشن کو App Group کے علاوہ NSUserDefaults کے ذریعے مرکزی ایپلیکیشن کے اسٹوریج تک رسائی نہیں ہے۔ ایکسٹینشن کا سائز کھلی ہوئی حالت میں 50 MB تک محدود ہے۔ مواد ڈسپلے کرنے کا وقت بھی محدود ہے — اگر ایکسٹینشن معقول وقت میں اپ ڈیٹ مکمل نہیں کرتی، سسٹم اسے بند کر دیتا ہے۔
Xcode میں ایکسٹینشن بنانے کے لیے Notification Content Extension قسم کا نیا target شامل کرنا ضروری ہے۔ Xcode خود بخود MainInterface.storyboard بنائے گا جس میں ایک کنٹرولر ہوگا جو UIViewController سے وراثت پاتا ہے اور UNNotificationContentExtension کو لاگو کرتا ہے۔
Xcode میں File → New → Target → Notification Content Extension منتخب کریں۔ ایکسٹینشن کا نام، زبان (Swift یا Objective-C) بتائیں اور یقینی بنائیں کہ پروجیکٹ اسی ڈیولپر ٹیم سے منسلک ہے۔ target بننے کے بعد تین فائلوں والا فولڈر ظاہر ہوگا: MainInterface.storyboard، Info.plist اور کنٹرولر فائل۔
ایکسٹینشن کے Info.plist میں UNNotificationExtensionCategory کلید کے ساتھ NSExtensionAttributes array بتانا لازمی ہے۔ اس array میں نوٹیفکیشن زمرہ جات کے شناخت کنندگان ہوتے ہیں جن کے لیے ایکسٹینشن فعال ہوگی۔ اختیاری کلید UNNotificationExtensionInitialContentSizeRatio درست پوزیشننگ کے لیے کسٹم انٹرفیس کا ابتدائی پہلو تناسب متعین کرتی ہے۔
target ایکسٹینشن میں صاف ستھرا آرکیٹیکچر برقرار رکھنے کی سفارش کی جاتی ہے: کنٹرولرز کے لیے علیحدہ فولڈر، کسٹم View کے لیے علیحدہ فولڈر۔ چونکہ ایکسٹینشن ایک علیحدہ بائنری ہے، مرکزی ایپلیکیشن کا کوڈ براہ راست قابل رسائی نہیں ہے۔ کوڈ شیئر کرنے کے لیے علیحدہ framework بنائیں یا ڈیٹا کے لیے App Group استعمال کریں۔
UNNotificationContentExtension وہ پروٹوکول ہے جسے Notification Content Extension میں کنٹرولر کو لاگو کرنا چاہیے۔ واحد لازمی میتھڈ didReceive(_:with:) ہے، جو نوٹیفکیشن موصول ہونے پر کال ہوتی ہے۔ کنٹرولر نوٹیفکیشن اور تیار ویو کنٹرولر وصول کرتا ہے جسے ڈیٹا سے اپ ڈیٹ کرنا ہوتا ہے۔
ایکسٹینشن کنٹرولر کو UIViewController سے وراثت پانا چاہیے اور UNNotificationContentExtension کو لاگو کرنا چاہیے۔ Storyboard یا xib اس کنٹرولر سے منسلک ہوتا ہے۔ نوٹیفکیشن موصول ہونے پر didReceive میتھڈ مواد بھیجتی ہے اور کنٹرولر اپنے ویوز کو اپ ڈیٹ کرتا ہے۔
import UIKit
import UserNotifications
import UserNotificationsUI
class CustomNotificationViewController: UIViewController {
@IBOutlet var titleLabel: UILabel!
@IBOutlet var customImageView: UIImageView!
func didReceive(
notification: UNNotification
) {
let content = notification.request.content
titleLabel.text = content.title
loadAttachment(content.attachments.first)
}
private func loadAttachment(attachment: UNNotificationAttachment?) {
guard let url = attachment?.URL else { return }
if let image = UIImage(contentsOfFile: url.path) {
customImageView.image = image
}
}
}
extension CustomNotificationViewController: UNNotificationContentExtension {
func didReceive(
notification: UNNotification
) {
didReceive(notification: notification)
}
}
سسٹم Info.plist میں UNNotificationExtensionInitialContentSizeRatio کلید اور موجودہ مواد کی بنیاد پر کسٹم انٹرفیس کا سائز متعین کرتا ہے۔ کم سے کم ابتدائی سائز کے لیے اس کلید کو 0.1 پر سیٹ کرنے اور مواد لوڈ ہونے کے بعد preferredContentSize کے ذریعے سائز تبدیل کرنے کی سفارش کی جاتی ہے۔
Notification Content Extension انٹرفیس بنانے میں مکمل آزادی دیتی ہے۔ UITableView، MKMapView، WKWebView، UIStackView سمیت کوئی بھی UIKit اجزاء استعمال کیے جا سکتے ہیں۔ تاہم، نوٹیفکیشن کی محدود جگہ کو مدنظر رکھنا اور کارکردگی کو بہتر بنانا ضروری ہے۔
مقبول منظرناموں میں سے ایک مقام کے ساتھ نقشہ ڈسپلے کرنا ہے۔ اس کے لیے ایکسٹینشن کے Storyboard میں MKMapView شامل کیا جاتا ہے اور کنٹرولر نوٹیفکیشن کے مواد سے کوآرڈینیٹ بھیجتا ہے۔ ایکسٹینشن کے target میں MapKit شامل کرنا نہ بھولیں۔ نقشہ استعمال کرتے وقت ایکسٹینشن کی میموری کی حد کو مدنظر رکھیں — پیچیدہ ٹائلز لوڈ کرنا دستیاب وسائل سے تجاوز کر سکتا ہے۔
Notification Content Extension UIView اینیمیشنز کو سپورٹ کرتی ہے، بشمول سائز تبدیل کرنا، منتقل کرنا اور عناصر کی شفافیت۔ نوٹیفکیشن کے توسیعی موڈ میں داخل ہوتے وقت مواد کے ظاہر ہونے کی اینیمیشن شروع کی جا سکتی ہے۔ اینیمیشنز مختصر ہونی چاہئیں (0.5 سیکنڈ تک) اور صارف کے نوٹیفکیشن کے ساتھ تعامل میں رکاوٹ نہیں بننی چاہئیں۔ لامتناہی اینیمیشنز سے گریز کریں — یہ بیٹری خرچ کرتی ہیں اور کارکردگی کم کرتی ہیں۔
چونکہ ایکسٹینشن ایک مکمل UIViewController ہے، آپ جیسچرز اور ٹیپ ہینڈلرز شامل کر سکتے ہیں۔ UIKit جیسچرز (UITapGestureRecognizer، UIButton) معیاری طور پر کام کرتے ہیں۔ ایسے اقدامات کے لیے جن میں ایپلیکیشن کھولنے کی ضرورت ہو، ایکسٹینشن ڈیلیگیٹ یا userNotificationCenter استعمال کریں۔ انٹرایکٹو عناصر محدود جگہ میں آرام دہ ٹیپ کے لیے کافی بڑے ہونے چاہئیں — Apple کی سفارشات کے مطابق کم از کم ٹچ ٹارگٹ سائز 44x44 پوائنٹس ہے۔
میڈیا مواد Notification Content Extension کی کلیدی صلاحیت ہے۔ نوٹیفکیشن میں تصاویر، GIF، آڈیو اور ویڈیو شامل ہو سکتے ہیں جو کسٹم انٹرفیس میں ڈسپلے ہوتے ہیں۔ اٹیچمنٹس UNNotificationAttachment کے ذریعے پہنچائے جاتے ہیں، جسے سرور payload کے ذریعے یا Notification Service Extension ڈاؤن لوڈ کے بعد شامل کر سکتا ہے۔ JPEG، PNG، MPEG-4 اور MP3 فارمیٹس سپورٹ ہیں۔
تصویر ڈسپلے کرنے کے لیے نوٹیفکیشن کے مواد سے UNNotificationAttachment حاصل کرنا اور اسے مقامی URL سے لوڈ کرنا کافی ہے۔ یاد رکھیں کہ ایکسٹینشن کی صرف مقامی فائلوں تک رسائی ہے — دور دراز وسائل کو پہلے Service Extension کے ذریعے ڈاؤن لوڈ کیا جانا چاہیے۔ زیادہ سے زیادہ سائز — iOS 15+ پر 50 MB، بعد کی اپ ڈیٹس میں حد بدلتی ہے۔ متعدد تصاویر کو سپورٹ کرنے کے لیے مختلف شناخت کنندگان کے ساتھ UNNotificationAttachment استعمال کریں اور انہیں UIPageViewController کے ذریعے ڈسپلے کریں۔
کسٹم انٹرفیس میں تصویر ڈسپلے کرنے کے لیے ایکسٹینشن نوٹیفکیشن کے مواد سے UNNotificationAttachment حاصل کرتی ہے اور اسے مقامی URL سے لوڈ کرتی ہے۔ اٹیچمنٹ پہلے Notification Service Extension کے ذریعے ڈاؤن لوڈ کیا جانا چاہیے — Content Extension کو نیٹ ورک تک رسائی نہیں ہے۔ میڈیا اٹیچمنٹ کا زیادہ سے زیادہ سائز — iOS 15+ پر 50 MB، پچھلے ورژنز میں حد 10 MB تھی۔ ایکسٹینشن کو اٹیچمنٹ کی عدم موجودگی کو صحیح طریقے سے ہینڈل کرنا چاہیے اور فال بیک انٹرفیس ڈسپلے کرنا چاہیے۔ کم ریزولیوشن والی تصاویر کو پری لوڈ کرنے کے لیے، Service Extension کے ذریعے اٹیچمنٹ سے پہلے بنائے گئے تھمب نیل ورژن استعمال کریں۔
iOS AVPlayerLayer کے ذریعے Notification Content Extension میں ویڈیو پلے بیک کو سپورٹ کرتا ہے۔ ایکسٹینشن نوٹیفکیشن میں کنٹرول بٹنوں کے ساتھ ویڈیو پلیئر ڈسپلے کر سکتی ہے۔ یہ خاص طور پر نگرانی ایپلی کیشنز، سٹریمنگ یا مواد کے پیش نظارہ کے لیے مفید ہے۔ اگر صارف اس نوٹیفکیشن میں میڈیا مواد کی توقع رکھتا ہے تو آٹو پلے بغیر آواز کے اجازت ہے۔ ویڈیو پلیئر لاگو کرتے وقت کنٹرول عناصر شامل کریں: پلے/پاز، پیش رفت بار اور بند کرنے کا بٹن۔ یقینی بنائیں کہ ویڈیو خود بخود آواز کے ساتھ شروع نہ ہو — یہ Apple کے صارف تجربے کی سفارشات کی خلاف ورزی ہے۔ متعدد تصاویر کی سلائیڈ شو کے لیے UIView.transition کے ذریعے صفحہ پلٹنے کے ٹرانزیشن آپشن کے ساتھ اینی میٹڈ ٹرانزیشن استعمال کریں۔
Notification Content Extension تقریباً 50 MB میموری کی حد کے ساتھ محدود ماحول میں کام کرتی ہے۔ کارکردگی بہتر بنانے کے لیے تصاویر کی سست لوڈنگ استعمال کریں، مرکزی تھریڈ پر بھاری حساب کتاب سے گریز کریں اور سادہ کنسٹرینٹس کے ساتھ Auto Layout لگائیں۔ تصویر پروسیسنگ یا ڈیٹا پارسنگ جیسے بھاری آپریشنز بیک گراؤنڈ کیو (DispatchQueue.global) میں انجام دیں۔ اگر میموری کی حد سے تجاوز ہو جائے تو سسٹم ایکسٹینشن بند کر دے گا اور صارف معیاری نوٹیفکیشن دیکھے گا۔ اشاعت سے پہلے Instruments (Allocations اور Time Profiler) کے ذریعے ایکسٹینشن کو پروفائل کرنے اور مختلف iOS ورژنز والے حقیقی آلات پر میموری استعمال چیک کرنے کی سفارش کی جاتی ہے۔
اکثر پوچھے گئے سوالات
جی ہاں، iOS 16 سے Notification Content Extension UIHostingController کے ذریعے SwiftUI کو سپورٹ کرتی ہے۔ تاہم، ایکسٹینشنز میں SwiftUI کی محدود سپورٹ کی وجہ سے پیچیدہ انٹرفیسز کے لیے UIKit زیادہ مستحکم انتخاب ہے۔
چیک کریں کہ نوٹیفکیشن کے payload میں categoryIdentifier ایکسٹینشن کے Info.plist میں UNNotificationExtensionCategory سے مماثل ہے۔ نیز یقینی بنائیں کہ ایکسٹینشن مین ایپ target میں شامل ہے اور صحیح طریقے سے سائن کی گئی ہے۔
App Group — مشترکہ اسٹوریج (UserDefaults suite) یا فائل کنٹینر استعمال کریں۔ مرکزی ایپلیکیشن اور ایکسٹینشن ایک ہی ڈیولپر گروپ میں ہونی چاہئیں اور App Groups کی صلاحیت فعال ہونی چاہیے۔
میڈیا کنٹرول کے لیے didReceive(_:with:) with UNNotificationContentExtensionMediaPlayPauseButtonType میتھڈ استعمال کریں یا ڈیلیگیٹ کے ذریعے اپ ڈیٹ کی درخواست کریں۔ نئے نوٹیفکیشن کے بغیر مکمل مواد اپ ڈیٹ ممکن نہیں ہے۔
Xcode میں ایکسٹینشن کا target منتخب کریں اور سمیلیٹر پر چلائیں۔ عام ایپلیکیشن کی طرح lldb اور بریک پوائنٹس استعمال کریں۔ جانچ کے لیے Firebase Console کے ذریعے یا مقامی طور پر Pusher کے ذریعے push نوٹیفکیشن بھیجیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں