Notification Service Extension — paano gumagana ang pagproseso ng mga notification

May-akda: IT Sectr Nai-publish: 2026-06-16 Oras ng pagbabasa: 9 min

Notification Service Extension ay isang iOS extension na humaharap sa push notification kaagad pagkatapos matanggap, ngunit bago ito ipakita sa user. Ang extension ay maaaring mag-decrypt ng naka-encrypt na payload, mag-download at mag-attach ng media file, baguhin ang text o pamagat ng notification sa real-time. Ayon sa Apple Developer Documentation (2025), para i-activate ang extension, ang server ay dapat magpadala ng key na mutable-content:1 sa mga attribute ng notification — ito ang tanging kondisyon para mapatakbo ang UNNotificationServiceExtension.

Mga pangunahing punto

  • Notification Service Extension ay nagbabago ng push notification bago ito ipakita sa user sa iOS device
  • Para i-activate ang extension, kinakailangan ang parameter na mutable-content:1 sa payload ng notification mula sa server
  • Ang pangunahing protocol — UNNotificationServiceExtension na may mga method na didReceive(_:withContentHandler:) at serviceExtensionTimeWillExpire()
  • Ang extension ay maaaring mag-download ng mga media attachment mula sa network at i-attach ang mga ito sa notification sa pamamagitan ng UNNotificationAttachment
  • Ang oras ng pag-execute ay limitado — ang system ay naglalaan ng humigit-kumulang 30 segundo para sa buong pagproseso ng isang notification

Ano ang Notification Service Extension

Notification Service Extension ay isang app extension sa iOS na humaharap sa papasok na push notification sa gilid ng device at pinapayagan ang pagbabago ng nilalaman nito bago ito makita ng user. Ito ang tanging uri ng notification extension na gumagana sa nilalaman, hindi sa pagpapakita.

Ang pangunahing pagkakaiba sa Notification Content Extension: Ang Service Extension ay gumagana bago ipakita ang notification at maaaring baguhin ang pamagat, body, sound file, at mga attachment. Ang Content Extension ay gumagana pagkatapos ng pagpapakita at namamahala lamang sa visual na presentasyon ng natapos na notification. Ang dalawang extension na ito ay maaaring magtulungan: Nagda-download ng larawan ang Service Extension, at ipinapakita ito ng Content Extension sa custom na interface.

Awtomatikong naa-activate ang extension kapag nakatanggap ng push notification na may attribute na mutable-content:1 sa aps dictionary. Pinaandar ng iOS ang extension sa background, ipinapasa dito ang orihinal na UNNotificationRequest, at naghihintay ng binagong bersyon para ipakita.

Pagproseso ng mga push notification on the fly

UNNotificationServiceExtension ay tumatanggap ng kumpletong UNNotificationRequest na may orihinal na nilalaman. Maaaring baguhin ng extension ang anumang field ng UNNotificationContent: title, subtitle, body, userInfo, attachments, at sound. Ang mga pagbabago ay inilalapat bago ipakita ang notification.

Mga karaniwang senaryo ng paggamit

Pag-decrypt ng nilalaman — kung ang push notification ay naglalaman ng naka-encrypt na payload, ide-decrypt ito ng extension bago ipakita. Pag-download ng media — pag-attach ng larawan o video sa notification. Lokalisasyon — pag-aangkop ng text ng notification sa mga regional setting ng device. Pagpapayaman ng data — pagdaragdag ng karagdagang impormasyon mula sa lokal na storage o cache.

Ayon sa Apple, ang pinakakaraniwang senaryo sa mga app ay pag-download ng mga larawan para sa mayayamang media notification. Nagpapadala ang server ng URL ng larawan sa payload, dina-download ito ng extension sa isang pansamantalang direktoryo at gumagawa ng UNNotificationAttachment na ipinapakita ng system sa standard o custom na interface.

Pagbabago ng text at pamagat

Maaaring ganap na muling isulat ng extension ang text ng notification, palitan ang pamagat, o magdagdag ng subtitle. Halimbawa, ang isang messaging app ay maaaring makatanggap ng naka-encrypt na notification, i-decrypt ito sa extension, at magpakita ng nababasang text. O ang isang news app ay maaaring magdagdag ng kategorya ng balita sa subtitle bago ipakita.

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

Protocol ng UNNotificationServiceExtension

UNNotificationServiceExtension — ang base class na pinagmamana ng Service Extension. Ang klase ay tumutukoy ng dalawang lifecycle method: didReceive(_:withContentHandler:) — ang pangunahing method ng pagproseso, at serviceExtensionTimeWillExpire() — ang handler para sa pag-expire ng oras.

Method na didReceive:withContentHandler:

didReceive(_:withContentHandler:) ay tinatawag kapag nakatanggap ng notification. Ang extension ay tumatanggap ng UNNotificationRequest at ng contentHandler closure na dapat tawagin kasama ang binagong UNMutableNotificationContent. Ang extension ay obligadong tawagin ang contentHandler — kung hindi ito gagawin, ipapakita ng iOS ang orihinal na notification pagkatapos ng timeout.

Mahalaga: ang extension ay maaari lamang magproseso ng isang notification sa bawat pagkakataon. Kung maraming notification ang dumating nang sabay, gumagawa ang iOS ng magkakahiwalay na instance ng extension para sa bawat isa. Hindi maaaring gumamit ng global state para sa sequential processing.

Method na serviceExtensionTimeWillExpire:

serviceExtensionTimeWillExpire() ay tinatawag ng system kapag ang natitirang oras ng pag-execute ay malapit nang matapos. Sa method na ito, dapat agad na tawagin ang contentHandler gamit ang nilalaman na handa sa sandaling iyon — kahit na hindi pa nai-download ang media file. Kung hindi tatawagin ang contentHandler sa method na ito, ipapakita ng iOS ang orihinal na notification.

Inirerekomenda na mag-imbak ng minimal na katanggap-tanggap na nilalaman sa method na ito — halimbawa, isang notification na may text at pamagat, ngunit walang larawan na ang pag-download ay hindi natapos sa tamang oras.

Encryption at mga media attachment

UNNotificationAttachment — isang object na ginawa ng extension para mag-attach ng media file sa notification. Dina-download ng extension ang file mula sa network, sine-save ito sa isang pansamantalang direktoryo, at gumagawa ng UNNotificationAttachment na may specification ng uri ng nilalaman.

Paglikha ng attachment mula sa na-download na file

Ang UNNotificationAttachment ay ginagawa gamit ang initializer na init(identifier:url:options:). Ang URL ay dapat tumuro sa isang lokal na file sa pansamantalang direktoryo na naa-access ng extension. Pagkatapos malikha, ang attachment ay idinaragdag sa attachments array ng UNMutableNotificationContent.

Inirerekomenda ng Apple ang paggamit ng URLSession na may background configuration para sa pag-download — kapag gumagamit ng standard na URLSession, hinaharangan ng pag-download ang thread at kumokonsumo ng oras mula sa 30 segundong limit. Ang background URLSession ay nagpapatuloy sa pag-download kahit matapos na ang extension, at ang resulta ay maaaring gamitin sa susunod na pag-start.

Pag-decrypt ng naka-encrypt na payload

Kung ang server ay nagpapadala ng naka-encrypt na notification, ang extension ay dapat mag-decrypt ng payload bago tawagin ang contentHandler. Karaniwang kasama sa pag-decrypt ang paghingi ng key mula sa Keychain o App Group, decryption sa pamamagitan ng CommonCrypto, at pagpapalit ng body o userInfo ng notification. Kung may error sa pag-decrypt, dapat tawagin ang contentHandler gamit ang orihinal na nilalaman — upang makita man lang ng user na dumating ang notification, kahit na hindi ito nababasa.

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

Mga timeout at fallback mechanism

Notification Service Extension ay gumagana sa loob ng mahigpit na time frame. Naglalaan ang iOS ng nakapirming oras para sa pag-execute — humigit-kumulang 30 segundo mula sa sandali ng pag-activate. Kung hindi tinawag ng extension ang contentHandler sa oras na ito, puwersahang tatapusin ng system ang proseso at ipapakita ang orihinal na notification nang walang pagbabago.

Estratehiya ng graceful degradation

Inirerekomenda na magpatupad ng multi-level na fallback: subukan munang i-download ang media, kapag matagumpay — tawagin ang contentHandler na may kumpletong nilalaman; kapag nabigo — tawagin ang contentHandler na may text ngunit walang media; kapag critical error — ipasa ang orihinal na nilalaman. Ginagarantiyahan ng approach na ito na palaging makakakita ang user ng notification, hindi isang blangkong screen.

Ayon sa Apple, ang pinakakaraniwang dahilan ng mga timeout ay pag-download ng malalaking media file sa mabagal na koneksyon. Para mabawasan ang panganib, inirerekomenda na i-optimize ang laki ng mga larawan sa server — magpadala ng preview hanggang 300 KB sa halip na buong resolution. Ang mga larawang may buong resolution ay dapat i-download kapag binuksan ang app.

Pagsubaybay sa performance

Para sa pagsubaybay ng mga timeout at error ng extension, maaaring gamitin ang os_log para magsulat ng mga diagnostic message sa Unified Logging System. Bagaman mahirap ang direktang pag-log sa file sa extension, pinapayagan ng os_log ang pagsusuri ng performance sa pamamagitan ng Console.app sa device ng developer. Inirerekomenda ng Apple na magdagdag ng metrics sa bawat pagtawag ng didReceive — oras ng pag-download, laki ng file, resulta ng operasyon.

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

Mga madalas itanong

Paano ina-activate ng server ang Notification Service Extension?

Idinaragdag ng server ang key na mutable-content:1 sa aps dictionary ng push notification. Kung wala ang parameter na ito, binabalewala ng system ang extension at ipinapakita ang standard na notification.

Maaari bang gamitin ang extension nang walang mutable-content?

Hindi. Ang mutable-content:1 ay isang mandatoryong kondisyon para i-activate ang Service Extension. Kung ang key ay wala o nakatakda sa 0, ang notification ay ipinapakita nang hindi tinatawag ang extension.

Ano ang mangyayari kapag lumampas sa 30 segundong limit?

Puwersahang tatapusin ng iOS ang extension at ipapakita ang orihinal na notification nang walang pagbabago. Para maiwasan ito, ipatupad ang serviceExtensionTimeWillExpire() na may minimal na katanggap-tanggap na nilalaman.

Paano ipapasa ang mga encryption key sa extension?

Sa pamamagitan ng App Group (shared UserDefaults o file) o Keychain na may shared access sa pagitan ng app at extension. Ang direktang pagpapasa ng mga key sa payload ng notification ay hindi ligtas.

Ilang media file ang maaaring i-attach sa Service Extension?

Hanggang 4 na attachment bawat notification, bawat isa hanggang 50 MB. Ang kabuuang laki ng mga attachment ay nakakaapekto sa oras ng pag-download — mas maraming file, mas mataas ang panganib ng timeout.

Buod

  • Notification Service Extension ay nagbabago ng mga push notification sa device bago ipakita, nag-e-edit ng text, pamagat, at mga media attachment
  • Para i-activate, kinakailangan ang key na mutable-content:1 sa aps dictionary — kung wala, hindi tatakbo ang extension
  • Ang pangunahing protocol UNNotificationServiceExtension ay tumutukoy ng mga method na didReceive at serviceExtensionTimeWillExpire para sa pagproseso
  • Ang extension ay maaaring mag-download ng media mula sa network, mag-decrypt ng payload, at magdagdag ng hanggang 4 na attachment sa notification
  • Ang oras ng pag-execute ay limitado sa humigit-kumulang 30 segundo — kapag lumampas, ipinapakita ng iOS ang orihinal na notification
  • Inirerekomenda ang estratehiya ng graceful degradation na may multi-level na fallback para maiwasan ang mga blangkong notification

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din