Notification Extension iOS mexanizmi bo'lib, push-bildirishnomalarning mazmuni va ko'rinishini foydalanuvchiga ko'rsatilishidan oldin o'zgartirish imkonini beradi. Kengaytmalar operatsion tizim tomonidan alohida jarayonda ishlaydi: UNNotificationServiceExtension kiruvchi mazmunni qayta ishlaydi, UNNotificationContentExtension esa interfeysni boshqaradi. Apple Developer Documentation, 2026 ga ko'ra, Service Extension bildirishnomani ko'rsatishdan oldin vazifalarni bajarish uchun 30 soniyagacha vaqt oladi. Bu cheklov qo'shimchalarni yuklash yoki ma'lumotlarni shifrlashda muhim ahamiyatga ega.
Asosiy narsalar
Notification Extension bu iOS dasturiy komponenti bo'lib, push-bildirishnomalarning standart xatti-harakatini kengaytiradi, mazmunni o'zgartirish va interfeysni sozlash imkoniyatini qo'shadi. Oddiy bildirishnomalardan farqli o'laroq, tizim tomonidan standart shaklda ko'rsatiladigan bildirishnomalar o'rniga, kengaytmalar dasturchiga ko'rsatishdan oldin mazmunga ta'sir qilish va noyob foydalanuvchi interfeysini yaratish imkonini beradi.
Apple turli maqsadlar uchun ikki xil Notification Extension ni taqdim etadi: UNNotificationServiceExtension kiruvchi payload ni qayta ishlash uchun javobgar, UNNotificationContentExtension esa ko'rsatishni boshqaradi. Service Extension bildirishnomani ko'rsatishdan oldin ishga tushadi va Apple Developer Documentation ga ko'ra bajarish uchun cheklangan vaqt — 30 soniyagacha oladi. Content Extension foydalanuvchi bildirishnoma bilan o'zaro aloqada bo'lgandan keyin faollashadi va maxsus ko'rinishni namoyish qiladi.
Standart iOS push bildirishnomasi tizim tomonidan JSON-payload dagi alert, title va subtitle maydonlari asosida avtomatik ravishda ko'rsatiladi. Notification Extension boshqaruvni o'z qo'liga oladi: Service Extension xom payload ni oladi, uni o'zgartiradi va ko'rsatish uchun tizimga uzatadi. Content Extension standart bannerni istalgan boshqaruv elementlari bilan ixtiyoriy interfeys bilan almashtiradi.
Qurilma mutable-content: 1 kaliti bilan push bildirishnomasini olganida, tizim Service Extension ni alohida jarayonda ishga tushiradi. Kengaytma jarayoni asosiy ilovadan izolyatsiya qilingan va 50 MB xotira cheklovi bilan o'z qum qutisiga ega. Qayta ishlash tugagandan so'ng, kengaytma completion handler ni chaqiradi, o'zgartirilgan UNNotificationContent ni ko'rsatish uchun tizimga uzatadi.
UNNotificationServiceExtension push bildirishnomalarini foydalanuvchiga ko'rsatishdan oldin dasturiy o'zgartirish uchun asosiy vositadir. Kengaytma payloadida mutable-content: 1 bayrog'i o'rnatilgan bildirishnoma olinganda avtomatik ravishda faollashadi. 30 soniya ichida kengaytma media qo'shimchasini yuklab olishi, matnni o'zgartirishi, shifrlangan ma'lumotlarni deshifrlashi yoki mazmunni boyitishi mumkin.
Kengaytma UNNotificationServiceExtension protokolidan ikkita asosiy metodni amalga oshiradi. didReceive metodi xom UNNotificationRequest bilan kiruvchi so'rovni oladi va yangi UNNotificationContent bilan completion handler orqali uni o'zgartirish imkonini beradi. serviceExtensionTimeWillExpire metodi tizim tomonidan vaqt tugashiga bir soniya qolganda chaqiriladi — bu yerda qayta ishlashni tugatish va joriy (ehtimol qisman) natijani uzatish kerak.
Serverning maxsus maydonda rasm URL i bilan push yuborgan stsenariyni ko'rib chiqaylik. Service Extension bu rasmni tarmoq orqali yuklab oladi, UNNotificationAttachment yaratadi va uni mazmunga qo'shadi. UNNotificationAttachment mahalliy rasm, video yoki audio faylni qabul qiladi va avtomatik ravishda kengaytmaning qum qutisiga nusxalaydi. Attachment yaratilgandan so'ng, kengaytma yangilangan mazmunni tizimga uzatadi.
class NotificationService: UNNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest,
withContentHandler contentHandler:
@escaping (UNNotificationContent) -> Void) {
let userInfo = request.content.userInfo
guard let imageURL = URL(string: userInfo["image-url"] as! String)
else { contentHandler(request.content); return }
let attachment = try! UNNotificationAttachment(
identifier: "image", url: imageURL,
options: [UNNotificationAttachmentOptionsTypeHintKey: "jpg"])
let modifiedContent = request.content.mutableCopy()
as! UNMutableNotificationContent
modifiedContent.attachments = [attachment]
contentHandler(modifiedContent)
}
override func serviceExtensionTimeWillExpire() {
contentHandler?(bestAttemptContent ?? request.content)
}
}
Bir xil qo'shimchalar bilan bildirishnomalar tez-tez yuborilganda, yuklab olingan fayllarni qurilmada keshlashtirish tavsiya etiladi. FileManager kengaytmaning kesh katalogiga kirishni ta'minlaydi, bu katalog ishga tushirishlar orasida saqlanadi. Bu keyingi bildirishnomalarni qayta ishlash vaqtini qisqartiradi va tarmoq yukini kamaytiradi. Apple ga ko'ra, qo'shimchalarni keshlashtirish qayta ishlash vaqtini to'liq yuklash o'rniga 2–5 soniyagacha kamaytirishi mumkin.
UNNotificationContentExtension standart bildirishnoma bannerni Interface Builder yoki SwiftUI da yaratilgan maxsus interfeys bilan almashtirish imkonini beradi. Kengaytma foydalanuvchi bildirishnoma bilan harakat qilganda faollashadi: teginish, pastga surish yoki 3D Touch. Content Extension Service Extension tomonidan allaqachon qayta ishlangan mazmunni oladi va uni maxsus ko'rinishda namoyish qiladi.
Har bir Content Extension Info.plist orqali bir yoki bir nechta bildirishnoma kategoriyalariga bog'lanadi. Kategoriya server tomonidan APNS payload idagi category maydoni bilan aniqlanadi. Tizim olingan bildirishnomaning kategoriyasiga asoslanib kerakli kengaytmani avtomatik tanlaydi. Interfeys standart UIKit komponentlari yoki SwiftUI View yordamida storyboard orqali quriladi.
Content Extension UNNotificationAction da belgilangan maxsus tugmalar va teginishlar bilan ishlashni qo'llab-quvvatlaydi. UNNotificationAction kategoriyani ro'yxatdan o'tkazish bosqichida yaratiladi va UNTextInputNotificationAction orqali matn kiritish turida bo'lishi mumkin. Foydalanuvchi tugmani bosganda, kengaytma harakat identifikatori bilan didReceive callback ni oladi va tegishli mantiqni bajarishi mumkin — URL ochish, serverga so'rov yuborish yoki interfeysni yangilash.
Content Extension o'zining bajarish sikli va taxminan 50 MB xotira cheklovi bilan izolyatsiyalangan jarayonda ishlaydi. Kengaytmaning ishlashi muhim, chunki tizim watchdog cheklovlar oshib ketganda jarayonni to'xtatadi. Content Extension ichida og'ir hisob-kitoblardan, katta rasmlarni yuklashdan va uzoq tarmoq so'rovlaridan qochish tavsiya etiladi.
UNNotificationAttachment push bildirishnomasiga media fayl qo'shadigan ob'ektdir: rasm, video, audio yoki GIF. Qo'shimcha kengaytmaning qum qutisida bo'lishi kerak bo'lgan mahalliy fayl URL idan yaratiladi. Qo'shimchaning maksimal hajmi 10 MB dan oshmasligi kerak, aks holda tizim attachment yaratishni rad etadi.
Apple media qo'shimchalari uchun cheklangan formatlar to'plamini qo'llab-quvvatlaydi. Tasvirlar — JPEG, PNG, GIF (animatsiyalanganlarni o'z ichiga oladi), TIFF. Video — MPEG, MP4, MOV maksimal 30 soniya davomiylik bilan. Audio — MP3, AAC, WAV, CAF. Har bir format uchun turni UNNotificationAttachmentOptionsTypeHintKey orqali ko'rsatish mumkin, bu tizimga faylni to'g'ri qayta ishlashga yordam beradi.
Push payload faqat URL ni o'z ichiga olganligi sababli, faylning o'zini emas, qo'shimchani yuklab olish Service Extension ichida amalga oshirilishi kerak. Maksimal yuklash vaqti 30 soniya bilan cheklangan, shuning uchun minimal sozlamalar bilan URLSession dan foydalanish va zaif signalda yuklashni o'chirish tavsiya etiladi. Qo'shimcha o'z vaqtida yuklanmasa, bildirishnoma mediasiz ko'rsatiladi — bu tizimning standart xatti-harakatidir.
Notification Extension ning rasmni yuklaydigan, uni yuklab oladigan va bildirishnomaga qo'shadigan to'liq misolini ko'rib chiqaylik. NotificationService UNNotificationServiceExtension dan meros oladi va didReceive metodini bekor qiladi. Misolda ixtiyoriy maydonlarni qayta ishlash, attachment yaratish va o'zgartirilgan mazmun bilan completion handler ni chaqirish ko'rsatilgan.
import UserNotifications
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(
_ request: UNNotificationRequest,
withContentHandler contentHandler:
@escaping (UNNotificationContent) -> Void
) {
self.contentHandler = contentHandler
self.bestAttemptContent =
(request.content.mutableCopy()
as! UNMutableNotificationContent)
guard let attachmentURLString =
bestAttemptContent?.userInfo["attachment-url"] as? String,
let url = URL(string: attachmentURLString)
else {
contentHandler(request.content)
return
}
URLSession.shared.downloadTask(with: url) {
[weak self] localURL, _, error in
guard let localURL = localURL, error == nil
else {
contentHandler(request.content)
return
}
let attachment = try! UNNotificationAttachment(
identifier: "media", url: localURL)
self?.bestAttemptContent?.attachments = [attachment]
contentHandler(self?.bestAttemptContent
?? request.content)
}.resume()
}
override func serviceExtensionTimeWillExpire() {
if let content = bestAttemptContent {
contentHandler?(content)
}
}
}
Kengaytmaning to'g'ri ishlashi uchun bildirishnoma kategoriyalarini Info.plist da ro'yxatdan o'tkazish kerak. NSExtensionPointIdentifier kaliti Service Extension uchun com.apple.usernotifications.service yoki Content Extension uchun com.apple.usernotifications.content qilib o'rnatiladi. Kategoriyalar AppDelegate da ilova ishga tushirilganda UNUserNotificationCenter orqali aniqlanadi va kengaytma faqat payload da tegishli kategoriyaga ega bildirishnomalar uchun faollashadi.
Tez-tez beriladigan savollar
Service Extension bildirishnomani ko'rsatishdan oldin mazmunni o'zgartiradi — media qo'shadi, matnni o'zgartiradi, ma'lumotlarni deshifrlaydi. Content Extension foydalanuvchi o'zaro aloqasidan keyin bildirishnoma interfeysini maxsus bilan almashtiradi. Service Extension ko'rsatishdan oldin ishlaydi, Content Extension — keyin.
Tizim didReceive da kodni bajarish uchun 30 soniya ajratadi. Agar qayta ishlash bu vaqtda tugamasa, serviceExtensionTimeWillExpire chaqiriladi, unda joriy natijani uzatish kerak. Qo'shimchalarni yuklashni hisobga olgan holda 10–15 soniyaga sig'ish tavsiya etiladi.
Ha, SwiftUI iOS 16 dan boshlab Content Extension da qo'llab-quvvatlanadi. View UIHostingController ga o'raladi va storyboard ga qo'shiladi. Biroq, xotira cheklovlari tufayli SwiftUI dan faqat minimal elementlar bilan oddiy interfeyslar uchun foydalanish tavsiya etiladi.
Yuklash xatosi yoki vaqt limiti oshib ketganda, shunchaki attachmentsiz original mazmun bilan completion handler ni chaqiring. Tizim bildirishnomani mediasiz standart shaklda ko'rsatadi. Xatolarni diagnostika uchun OSLog orqali qayd eting, lekin bildirishnomaning ko'rsatilishini bloklamang.
Kengaytma taxminan 50 MB cheklovi bilan izolyatsiyalangan jarayonda ishlaydi. Cheklov oshib ketganda, tizim watchdog orqali jarayonni to'xtatadi. Katta fayllarni yuklashdan, rasmlarni xotirada saqlashdan va URLSession bilan ishlashda xotira oqishlaridan qoching.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.