Notification Service Extension — bildirishnomalarni qayta ishlash qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-06-16 O'qish vaqti: 9 daq

Notification Service Extension — bu iOS kengaytmasi bo'lib, push bildirishnomani qabul qilgandan so'ng darhol, ammo foydalanuvchiga ko'rsatishdan oldin tutib oladi. Kengaytma shifrlangan payloadni shifrdan chiqarishi, media faylni yuklab biriktirishi, bildirishnoma matni yoki sarlavhasini real vaqtda o'zgartirishi mumkin. Apple Developer Documentation (2025) ma'lumotlariga ko'ra, kengaytmani faollashtirish uchun server bildirishnoma atributlarida mutable-content:1 kalitini yuborishi kerak — bu UNNotificationServiceExtension ni ishga tushirishning yagona shartidir.

Asosiy nuqtalar

  • Notification Service Extension push bildirishnomani iOS qurilmasida foydalanuvchiga ko'rsatishdan oldin o'zgartiradi
  • Kengaytmani faollashtirish uchun serverdan bildirishnoma payloadida mutable-content:1 parametri talab qilinadi
  • Asosiy protokol — UNNotificationServiceExtension didReceive(_:withContentHandler:) va serviceExtensionTimeWillExpire() metodlari bilan
  • Kengaytma tarmoqdan media birikmalarini yuklab, UNNotificationAttachment orqali bildirishnomaga biriktirishi mumkin
  • Ijro vaqti cheklangan — tizim bitta bildirishnomani to'liq qayta ishlash uchun taxminan 30 soniya ajratadi

Notification Service Extension nima

Notification Service Extension — iOS da app kengaytmasi bo'lib, qurilmada kiruvchi push bildirishnomani tutib oladi va foydalanuvchi uni ko'rishidan oldin uning mazmunini o'zgartirishga imkon beradi. Bu mazmun bilan ishlaydigan, ko'rsatish bilan emas, yagona bildirishnoma kengaytma turidir.

Notification Content Extension dan asosiy farq: Service Extension bildirishnoma ko'rsatilishidan oldin ishlaydi va sarlavha, matn, ovoz fayli va birikmalarni o'zgartirishi mumkin. Content Extension ko'rsatilishdan keyin ishlaydi va faqat tayyor bildirishnomaning vizual taqdimotini boshqaradi. Bu ikki kengaytma birgalikda ishlashi mumkin: Service Extension rasmni yuklaydi, Content Extension esa uni maxsus interfeysda ko'rsatadi.

Kengaytma aps lug'atida mutable-content:1 atributi bo'lgan push bildirishnomasi olinganda avtomatik faollashadi. iOS kengaytmani fon rejimida ishga tushiradi, unga asl UNNotificationRequest ni uzatadi va ko'rsatish uchun o'zgartirilgan versiyani kutadi.

Push bildirishnomalarini joyida qayta ishlash

UNNotificationServiceExtension asl mazmun bilan to'liq UNNotificationRequest ni oladi. Kengaytma UNNotificationContent ning istalgan maydonini o'zgartirishi mumkin: title, subtitle, body, userInfo, attachments va sound. O'zgarishlar bildirishnoma ko'rsatilishidan oldin qo'llaniladi.

Odatiy foydalanish stsenariylari

Mazmunni shifrdan chiqarish — agar push bildirishnomasi shifrlangan payload ni o'z ichiga olsa, kengaytma uni ko'rsatishdan oldin shifrdan chiqaradi. Media yuklash — bildirishnomaga rasm yoki video biriktirish. Mahalliylashtirish — bildirishnoma matnini qurilmaning mintaqaviy sozlamalariga moslashtirish. Ma'lumotlarni boyitish — mahalliy saqlash yoki keshdan qo'shimcha ma'lumotlarni qo'shish.

Apple ma'lumotlariga ko'ra, ilovalar orasida eng keng tarqalgan stsenariy boy media bildirishnomalari uchun rasmlarni yuklashdir. Server payload da rasm URL ini yuboradi, kengaytma uni vaqtinchalik katalogga yuklab oladi va tizim standart yoki maxsus interfeysda ko'rsatadigan UNNotificationAttachment yaratadi.

Matn va sarlavhani o'zgartirish

Kengaytma bildirishnomaning text maydonini butunlay qayta yozishi, sarlavhani almashtirishi yoki subtitle qo'shishi mumkin. Masalan, messenjer ilovasi shifrlangan bildirishnoma olishi, uni kengaytmada shifrdan chiqarishi va o'qiladigan matn ko'rsatishi mumkin. Yangiliklar ilovasi ko'rsatishdan oldin subtitrga yangilik turkumini qo'shishi mumkin.

swift
override func didReceive(
    _ request: UNNotificationRequest,
    withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
) {
    let content = request.content.mutableCopy()
        as! UNMutableNotificationContent
    if let imageURL = content.userInfo["media-url"]
        as? String {
        downloadAndAttach(imageURL: imageURL,
            content: content,
            handler: contentHandler)
    }
}

UNNotificationServiceExtension protokoli

UNNotificationServiceExtension — Service Extension meros oladigan asosiy sinf. Sinf ikkita hayot sikli metodini belgilaydi: didReceive(_:withContentHandler:) — asosiy qayta ishlash metodi, va serviceExtensionTimeWillExpire() — vaqt tugashini boshqaruvchi.

didReceive:withContentHandler: metodi

didReceive(_:withContentHandler:) bildirishnoma olinganda chaqiriladi. Kengaytma UNNotificationRequest va o'zgartirilgan UNMutableNotificationContent bilan chaqirilishi kerak bo'lgan contentHandler closure ni oladi. Kengaytma contentHandler ni chaqirishi shart — agar buni qilmasa, iOS vaqt tugashidan keyin asl bildirishnomani ko'rsatadi.

Muhim: kengaytma bir vaqtning o'zida faqat bitta bildirishnomani qayta ishlashi mumkin. Agar bir vaqtning o'zida bir nechta bildirishnoma kelsa, iOS har biri uchun alohida kengaytma nusxalarini yaratadi. Ketma-ket qayta ishlash uchun global holatdan foydalanib bo'lmaydi.

serviceExtensionTimeWillExpire: metodi

serviceExtensionTimeWillExpire() tizim tomonidan qolgan ijro vaqti tugayotganda chaqiriladi. Bu metodda darhol hozirgi vaqtda tayyor bo'lgan mazmun bilan contentHandler ni chaqirish kerak — hatto media fayl hali yuklanmagan bo'lsa ham. Agar bu metodda contentHandler chaqirilmasa, iOS asl bildirishnomani ko'rsatadi.

Bu metodda minimal qabul qilinadigan mazmunni saqlash tavsiya etiladi — masalan, matn va sarlavhali, ammo yuklanishi o'z vaqtida tugamagan rasmsiz bildirishnoma.

Shifrlash va media birikmalari

UNNotificationAttachment — kengaytma tomonidan bildirishnomaga media fayl biriktirish uchun yaratilgan ob'ekt. Kengaytma faylni tarmoqdan yuklab oladi, vaqtinchalik katalogga saqlaydi va mazmun turini ko'rsatgan holda UNNotificationAttachment yaratadi.

Yuklab olingan fayldan birikma yaratish

UNNotificationAttachment init(identifier:url:options:) initsializatori yordamida yaratiladi. URL kengaytma uchun mavjud bo'lgan vaqtinchalik katalogdagi mahalliy faylga ishora qilishi kerak. Birikma yaratilgandan so'ng, UNMutableNotificationContent ning attachments massiviga qo'shiladi.

Apple yuklab olish uchun fon konfiguratsiyasi bilan URLSession dan foydalanishni tavsiya qiladi — standart URLSession dan foydalanganda yuklab olish oqimni bloklaydi va 30 soniyalik limitdan vaqt sarflaydi. Fon URLSession kengaytma tugagan bo'lsa ham yuklab olishni davom ettiradi va natija keyingi ishga tushirishda ishlatilishi mumkin.

Shifrlangan payload ni shifrdan chiqarish

Server shifrlangan bildirishnoma yuborsa, kengaytma contentHandler ni chaqirishdan oldin payload ni shifrdan chiqarishi kerak. Shifrdan chiqarish odatda Keychain yoki App Group dan kalitni so'rash, CommonCrypto orqali shifrni ochish va bildirishnomaning body yoki userInfo maydonini almashtirishni o'z ichiga oladi. Shifrdan chiqarish xatosi bo'lsa, contentHandler asl mazmun bilan chaqirilishi kerak — foydalanuvchi hech bo'lmasa bildirishnoma kelganini ko'rsin, hatto o'qib bo'lmasa ham.

swift
func downloadAndAttach(
    imageURL: String,
    content: UNMutableNotificationContent,
    handler: @escaping (UNNotificationContent) -> Void
) {
    let task = URLSession.shared.dataTask(with:
        URL(string: imageURL)!) { data, _, _ in
        let url = FileManager.default
            .temporaryDirectory
            .appendingPathComponent("image.jpg")
        try? data?.write(to: url)
        let attachment = try? UNNotificationAttachment(
            identifier: "image", url: url)
        content.attachments = [attachment].compactMap { $0 }
        handler(content)
    }
    task.resume()
}

Vaqt chegarasi va fallback mexanizmlari

Notification Service Extension qattiq vaqt chegaralarida ishlaydi. iOS faollashtirilgan paytdan boshlab taxminan 30 soniya qat'iy ijro vaqtini ajratadi. Agar kengaytma shu vaqt ichida contentHandler ni chaqirmasa, tizim jarayonni majburiy tugatadi va asl bildirishnomani o'zgarishsiz ko'rsatadi.

Graceful degradation strategiyasi

Ko'p darajali fallback ni amalga oshirish tavsiya etiladi: avval media yuklashga urinish, muvaffaqiyat bo'lsa — to'liq mazmun bilan contentHandler ni chaqirish; muvaffaqiyatsizlikda — matn bilan, ammo mediasiz contentHandler ni chaqirish; tanqidiy xatoda — asl mazmunni uzatish. Bunday yondashuv foydalanuvchining har doim bildirishnomani ko'rishini kafolatlaydi, bo'sh ekran emas.

Apple ma'lumotlariga ko'ra, vaqt chegarasining eng keng tarqalgan sababi sekin ulanishda katta media fayllarni yuklashdir. Xavfni kamaytirish uchun serverda rasmlar hajmini optimallashtirish tavsiya etiladi — to'liq rezolyusiya o'rniga 300 KB gacha bo'lgan prevyu yuborish. To'liq o'lchamdagi rasmlarni ilova ochilganda yuklash yaxshiroq.

Samaradorlik monitoringi

Vaqt chegaralari va kengaytma xatolarini kuzatish uchun Unified Logging System da diagnostik xabarlarni yozish uchun os_log dan foydalanish mumkin. Kengaytmada faylga to'g'ridan-to'g'ri log yozish qiyin bo'lsa-da, os_log Console.app orqali ishlab chiquvchi qurilmasida samaradorlikni tahlil qilish imkonini beradi. Apple har bir didReceive chaqiruviga metrikalar qo'shishni tavsiya qiladi — yuklash vaqti, fayl hajmi, operatsiya natijasi.

swift
override func serviceExtensionTimeWillExpire() {
    let fallback = bestEffortContent as?
        UNMutableNotificationContent
        ?? request.content.mutableCopy()
        as! UNMutableNotificationContent
    contentHandler(fallback)
}

Tez-tez beriladigan savollar

Server Notification Service Extension ni qanday faollashtiradi?

Server push bildirishnomasining aps lug'atiga mutable-content:1 kalitini qo'shadi. Bu parametrsiz tizim kengaytmani e'tiborsiz qoldiradi va standart bildirishnomani ko'rsatadi.

Kengaytmani mutable-content siz ishlatish mumkinmi?

Yo'q. mutable-content:1 Service Extension ni faollashtirish uchun majburiy shartdir. Agar kalit mavjud bo'lmasa yoki 0 ga o'rnatilgan bo'lsa, bildirishnoma kengaytma chaqirilmasdan ko'rsatiladi.

30 soniyalik limit oshib ketganda nima bo'ladi?

iOS kengaytmani majburiy tugatadi va asl bildirishnomani o'zgarishsiz ko'rsatadi. Buning oldini olish uchun minimal qabul qilinadigan mazmun bilan serviceExtensionTimeWillExpire() ni amalga oshiring.

Shifrlash kalitlarini kengaytmaga qanday uzatish mumkin?

App Group (umumiy UserDefaults yoki fayl) yoki ilova va kengaytma o'rtasida umumiy kirishga ega Keychain orqali. Kalitlarni to'g'ridan-to'g'ri bildirishnoma payloadida uzatish xavfsiz emas.

Service Extension da nechta media fayl biriktirish mumkin?

Bitta bildirishnoma uchun 4 ta birikmagacha, har biri 50 MB gacha. Birikmalarning umumiy hajmi yuklab olish vaqtiga ta'sir qiladi — qancha ko'p fayl bo'lsa, vaqt chegarasi xavfi shuncha yuqori.

Xulosa

  • Notification Service Extension push bildirishnomalarini qurilmada ko'rsatishdan oldin o'zgartiradi, matn, sarlavha va media birikmalarini tahrir qiladi
  • Faollashtirish uchun aps lug'atida mutable-content:1 kaliti talab qilinadi — usiz kengaytma ishga tushmaydi
  • Asosiy protokol UNNotificationServiceExtension qayta ishlash uchun didReceive va serviceExtensionTimeWillExpire metodlarini belgilaydi
  • Kengaytma tarmoqdan media yuklashi, payload ni shifrdan chiqarishi va bildirishnomaga 4 tagacha birikma qo'shishi mumkin
  • Ijro vaqti taxminan 30 soniya bilan cheklangan — limit oshib ketganda iOS asl bildirishnomani ko'rsatadi
  • Bo'sh bildirishnomalarning oldini olish uchun ko'p darajali fallback bilan graceful degradation strategiyasi tavsiya etiladi

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