Notification Extension: asosiy tushunchalar, kengaytma turlari va sozlash

Muallif: IT Sectr Nashr etilgan: 2026-03-20 O'qish vaqti: 8 daq

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

  • Service Extension — bildirishnomani ko'rsatishdan oldin ushlab qoladi, matnni o'zgartirish, media qo'shish va ma'lumotlarni 30 soniya cheklovi bilan shifrlash imkonini beradi.
  • Content Extension — storyboard yoki SwiftUI orqali ixtiyoriy UI, tugmalar va teginishlarni qayta ishlash bilan bildirishnoma uchun maxsus interfeys yaratadi.
  • Media qo'shimchalari — tasvirlar, video va audio UNNotificationAttachment orqali Service Extension da Content Extension ga uzatishdan oldin qo'shiladi.
  • Ro'yxatdan o'tish — ikkala kengaytma Info.plist da bildirishnoma kategoriyalari va NSExtensionPointIdentifier ko'rsatilgan holda alohida targetlar sifatida ro'yxatdan o'tkaziladi.
  • Cheklovlar — kengaytmalar asosiy ilovaga kirish imkoniga ega emas, 50 MB xotira cheklovi bilan izolyatsiyalangan qum qutisida ishlaydi.

Notification Extension nima

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.

Bildirishnoma kengaytmalarining ikki turi

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 bildirishnomalardan farqi

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.

Kengaytmaning hayotiy sikli

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: mazmunni o'zgartirish

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.

UNNotificationServiceExtension protokoli metodlari

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.

Misol: bildirishnomaga rasm qo'shish

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.

swift
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)
    }
}

Keshlashtirish va qayta foydalanish

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: maxsus interfeys

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.

Storyboard va bildirishnoma kategoriyalari

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.

Foydalanuvchi harakatlarini qayta ishlash

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.

Ishlash cheklovlari

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.

Media qo'shimchalari va UNNotificationAttachment

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.

Qo'llab-quvvatlanadigan formatlar

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.

Qo'shimchani tarmoqdan yuklab olish

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.

Swift da amalga oshirish misoli

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.

swift
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)
        }
    }
}

Kengaytma uchun Info.plist ni sozlash

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 Content Extension dan qanday farq qiladi?

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.

Service Extension da qayta ishlash uchun qancha vaqt beriladi?

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.

Content Extension da SwiftUI dan foydalanish mumkinmi?

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.

Qo'shimchalarni yuklashdagi xatolarni qanday qayta ishlash kerak?

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.

Notification Extension ning xotira cheklovlari qanday?

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

  • Notification Extension — push bildirishnomalarini o'zgartirish uchun iOS mexanizmi, Service Extension (mazmun) va Content Extension (interfeys) ni o'z ichiga oladi.
  • Service Extension bildirishnomani ko'rsatishdan oldin payload ni 30 soniya cheklovi bilan qayta ishlaydi, media qo'shimchalarini qo'shishi va ma'lumotlarni deshifrlashi mumkin.
  • Content Extension standart bannerni UIKit yoki SwiftUI orqali interaktiv tugmalarni qo'llab-quvvatlagan holda maxsus interfeys bilan almashtiradi.
  • UNNotificationAttachment bildirishnomaga tasvirlar, video va audio qo'shadi, JPEG, PNG, MP4, MP3 va boshqa formatlarni qo'llab-quvvatlaydi.
  • Kengaytmalarni ro'yxatdan o'tkazish NSExtensionPointIdentifier va faollashtirish uchun bildirishnoma kategoriyalarini ko'rsatgan holda Info.plist orqali amalga oshiriladi.
  • Cheklovlar — 50 MB xotira cheklovi, asosiy ilovaga kirish imkonisiz izolyatsiyalangan qum qutisi, cheklangan bajarish vaqti.
  • Notification Extension iOS da boy foydalanuvchi bildirishnomalarini yaratish, push kommunikatsiyalarida jalb qilish va funksionallikni oshirish uchun asosiy vositadir.

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.

Loyihani muhokama qilish

Shuningdek o'qing