Notification Service Extension: pagproseso ng nilalaman bago ipakita sa iOS

May-akda: IT Sectr Nai-publish: 2026-03-21 Oras ng pagbabasa: 8 min

Notification Service Extension — ay isang iOS extension na humaharang sa push notification bago ito ipakita sa user at nagpapahintulot sa pagbabago ng nilalaman. Maaaring i-decrypt ng extension ang naka-encrypt na data, mag-download ng mga media attachment, magbago ng text, o magdagdag ng custom na mga field. Ayon sa Apple Developer, 2025, ang Notification Service Extension ay may hanggang 30 segundo upang gawin ang gawain sa background.

Mga Pangunahing Punto

  • Notification Service Extension — iOS extension para sa pagproseso ng push notification bago ipakita.
  • Ang extension ay nagmamana mula sa UNNotificationServiceExtension at nagpapatupad ng didReceive method.
  • Available hanggang 30 segundo ng background execution para mag-download at magproseso ng data.
  • Mga pangunahing senaryo: pag-decrypt ng payload, pag-download ng mga larawan at video, pag-validate ng nilalaman.
  • Maaaring ipagpaliban ng extension ang pagpapakita ng notification o ganap itong kanselahin sa pamamagitan ng contentHandler.

Ano ang Notification Service Extension

Notification Service Extension — ay isang app extension sa iOS na tumatakbo bago ipakita ang push notification. Pinapayagan nito ang server na magpadala ng minimal na payload, at ang extension ay magdagdag ng nilalaman: mag-download ng mga larawan, mag-decrypt ng data, magpalit ng text. Nakikita ng user ang nakahanda at naprosesong notification.

Paano ito gumagana

Kapag nakatanggap ang iOS ng push notification, sinusuri ng system ang pagkakaroon ng extension para sa application na ito. Kung ang extension ay rehistrado, inilulunsad ito ng iOS sa isang background process at ipinapasa ang nilalaman ng notification sa pamamagitan ng didReceive(_:withContentHandler:) method. Pinoproseso ng extension ang nilalaman at tinatawagan ang contentHandler na may binagong nilalaman. Kung hindi matapos ang extension sa loob ng 30 segundo, ipapakita ng system ang orihinal na notification.

Kailan gagamitin ang Service Extension

Kinakailangan ang Service Extension sa mga senaryo kung saan ang nilalaman ng notification ay nangangailangan ng pagproseso sa device. Ligtas na komunikasyon: ang server ay nagpapadala ng naka-encrypt na payload, ang extension ay nagde-decrypt nito nang lokal. Mayamang media notification: ang server ay nagpapadala ng URL ng larawan, dina-download ng extension at ina-attach ito. Dynamic na lokalisasyon: pinapalitan ng extension ang text sa wika ng device.

SenaryoWalang extensionMay extension
LarawanHindi suportadoDina-download at ipinapakita
EncryptionServer ang nag-iingat ng susiPag-decrypt sa device
TextNakatakda sa serverDynamic na pagpapalit
ValidationHindi sinusuriPagkansela ng mapaminsalang notification

Mga limitasyon at oras ng pagpapatupad

Ang Notification Service Extension ay gumagana sa isang limitadong kapaligiran. Maximum na oras ng pagpapatupad — 30 segundo. Ang extension ay walang access sa pangunahing storage ng app (maliban sa App Group). Ang laki ng extension ay limitado sa 50 MB. Kapag lumampas sa oras, ang system ay tumatawag sa contentHandler na may orihinal na nilalaman at lahat ng pagbabago ay mawawala.

Paglikha ng extension at pag-configure ng Info.plist

Sa Xcode, ang Notification Service Extension ay idinaragdag sa pamamagitan ng paggawa ng bagong target ng uri Notification Service Extension. Gumagawa ang Xcode ng template ng klase NotificationService na nagmamana mula sa UNNotificationServiceExtension, na may dalawang pamamaraan: didReceive at serviceExtensionTimeWillExpire.

Pagdaragdag ng target sa proyekto

Sa Xcode piliin ang File → New → Target → Notification Service Extension. Tukuyin ang pangalan (hal. PushNotificationService) at ang wikang Swift. Tiyakin na ang target ay naidagdag sa pangunahing app at may tamang lagda. Pagkatapos malikha, ang klase NotificationService.swift ay bubuo na may pangunahing implementasyon.

Istruktura ng Info.plist ng extension

Ang Info.plist ng extension ay naglalaman ng key na NSExtension na may subkey na NSExtensionPointIdentifier (com.apple.usernotifications.service) at NSExtensionPrincipalClass (pangalan ng iyong controller). Opsyonal na maaaring tukuyin ang NSExtensionAttributes na may mga panuntunan sa pag-activate ng extension. Ang mga setting na ito ay awtomatikong nabubuo ng Xcode.

Halimbawa ng pangunahing extension

Ang pangunahing implementasyon ay nag-override sa didReceive, nagbabago ng nilalaman ng notification, at tumatawag sa contentHandler. Kung ang pagproseso ay masyadong matagal, ang serviceExtensionTimeWillExpire ay tinatawag, kung saan kailangan mong tapusin ang trabaho sa kasalukuyang estado.

swift
import UserNotifications

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(
        request: UNNotificationRequest,
        withContentHandler handler: @escaping (UNNotificationContent) -> Void
    ) {
        contentHandler = handler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

        if let bestAttemptContent = bestAttemptContent {
            bestAttemptContent.title = "[Naproseso] \(bestAttemptContent.title)"
            contentHandler?(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        if let contentHandler = contentHandler,
           let bestAttemptContent = bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }
}

Pag-decrypt ng naka-encrypt na payload

Isa sa mga pangunahing gamit ng Service Extension ay ang pag-decrypt ng nilalaman ng notification sa device. Ang server ay nagpapadala ng naka-encrypt na payload, at ang extension ay nagde-decrypt nito gamit ang isang susi na nakaimbak sa Keychain o App Group. Tinitiyak nito na ang nilalaman ay hindi maaaring harangin habang nagpapadala.

Arkitektura ng ligtas na paghahatid

Ini-encrypt ng server ang katawan ng notification gamit ang symmetrical key (AES-256). Ang encryption key ay napagkasunduan nang maaga sa pagitan ng client at server. Ang extension ay tumatanggap ng naka-encrypt na string sa data field ng payload, dina-decrypt ito, at inilalagay sa mga field ng notification. Susi ng user ay maaaring makuha mula sa Keychain pagkatapos ng authentication.

swift
override func didReceive(
    request: UNNotificationRequest,
    withContentHandler handler: @escaping (UNNotificationContent) -> Void
) {
    guard let content = request.content.mutableCopy()
        as? UNMutableNotificationContent else {
        handler(request.content)
        return
    }

    guard let encryptedData = content.userInfo["encrypted_data"]
        as? String else {
        handler(content)
        return
    }

    let decrypted = CryptoService.decrypt(encryptedData)
    content.body = decrypted.body
    content.title = decrypted.title
    handler(content)
}

Ligtas na pag-iimbak ng mga susi

Ang susi para sa pag-decrypt ay hindi dapat itago sa code ng extension o NSUserDefaults. Gamitin ang iOS Keychain na may access sa pamamagitan ng App Group, upang parehong mabasa ng app at extension ang susi. Para sa pagbuo ng susi sa client side, gamitin ang Security.framework na may AES-256-GCM algorithm.

Pag-download at pag-attach ng media

Ang pinakakaraniwang gamit ng Notification Service Extension — pag-download ng mga larawan, GIF, at video para sa pagpapakita sa notification. Ang server ay nagpapadala ng URL ng media file, at dina-download ito ng extension, ini-save sa temporary directory, at gumagawa ng UNNotificationAttachment.

Proseso ng pag-download at pag-attach ng media

Ang extension ay tumatanggap ng URL ng larawan mula sa payload field ng notification. Gamit ang URLSession, dina-download ng extension ang file sa temporary directory. Pagkatapos ng download, ang UNNotificationAttachment ay ginagawa na may lokal na URL. Ang attachment ay ipinapasa sa binagong nilalaman. Awtomatikong ipinapakita ng iOS ang larawan sa standard interface o sa Notification Content Extension.

swift
private func downloadAndAttachMedia(
    content: UNMutableNotificationContent,
    mediaUrl: String,
    handler: @escaping (UNNotificationContent) -> Void
) {
    guard let url = URL(string: mediaUrl) else {
        handler(content)
        return
    }

    let task = URLSession.shared.downloadTask(with: url) { localUrl, _, error in
        guard let localUrl = localUrl, error == nil else {
            handler(content)
            return
        }

        let attachment = try? UNNotificationAttachment(
            identifier: "media",
            url: localUrl,
            options: nil
        )

        if let attachment = attachment {
            content.attachments = [attachment]
        }
        handler(content)
    }
    task.resume()
}

Mga suportadong format ng media

Sinusuportahan ng iOS ang mga sumusunod na format para sa pagpapakita sa mga notification: JPEG, PNG, GIF (static), MPEG-4 video hanggang 50 MB. Para sa audio files, suportado ang MP3, AAC, at ALAC. Mahalaga: lahat ng media file ay dapat i-download sa loob ng 30 segundong limitasyon. Para sa malalaking file, inirerekomenda ang server-side cropping o progressive download.

Pamamahala ng oras at mga fallback scenario

Pamamahala ng 30 segundong limitasyon — pangunahing gawain sa pag-develop ng Notification Service Extension. Kung hindi matapos ng extension ang pagproseso, ang system ay tumatawag sa serviceExtensionTimeWillExpire at nagpapakita ng orihinal na nilalaman. Dapat maglaan ng fallback scenario para sa bawat uri ng pagproseso.

Istratehiya ng prayoridad

Hatiin ang mga gawain ayon sa prayoridad. Ang mga kritikal na pagbabago (pag-decrypt, pangunahing lokalisasyon) ay gawin muna. Ang mga opsyonal na pagpapabuti (pag-download ng larawan, pagpapayaman ng text) — sa pangalawang pagkakataon. Gamitin ang URLSession na may timeout para sa mga network request upang hindi maubos ang buong limitasyon sa isang operasyon.

Fallback sa mga error

Kung nabigo ang pag-download ng larawan o ang pag-decrypt ng payload ay nagbalik ng error, ang extension ay dapat tumawag sa contentHandler na may orihinal na nilalaman. Huwag tapusin ang extension nang hindi tinatawagan ang contentHandler — ito ay magdudulot ng pagkawala ng notification. Ligtas na fallback ay dapat laging nakalaan sa code ng extension.

swift
override func didReceive(
    request: UNNotificationRequest,
    withContentHandler handler: @escaping (UNNotificationContent) -> Void
) {
    let content = (request.content.mutableCopy()
        as? UNMutableNotificationContent) ?? request.content

    // Kritikal na gawain: pag-decrypt
    var decryptedContent = tryDecryptPayload(content)

    // Opsyonal na gawain: media
    guard let mediaUrl = decryptedContent.userInfo["media_url"]
        as? String else {
        handler(decryptedContent)
        return
    }

    downloadAndAttachMedia(
        content: decryptedContent,
        mediaUrl: mediaUrl,
        handler: handler
    )
}

Pag-test ng extension

Para sa pag-test ng Notification Service Extension gamitin ang Xcode: piliin ang target ng extension, patakbuhin sa simulator, at magpadala ng push notification sa pamamagitan ng terminal o Firebase Console. I-log ang bawat yugto ng pagproseso sa pamamagitan ng os_log — ito ay tumutulong sa pag-diagnose ng mga problema sa oras at mga error sa pag-load.

Mga Madalas Itanong

Ano ang mangyayari kung hindi matapos ang extension sa loob ng 30 segundo?

Tatawagan ng system ang serviceExtensionTimeWillExpire, pagkatapos ay ipapakita ang orihinal na notification nang walang pagbabago. Lahat ng na-download na file at pagbabago ay itatapon.

Maaari bang kanselahin ang pagpapakita ng notification mula sa extension?

Oo, kung tatawagan mo ang contentHandler na walang laman na nilalaman (UNNotificationContent na may walang laman na field), hindi ipapakita ang notification. Ito ay ginagamit para sa pag-filter ng spam notification o maling data.

Paano ipasa ang authorization token para sa pag-download ng media?

Ang token ay maaaring ipasa sa userInfo ng payload ng notification o makuha mula sa Keychain sa pamamagitan ng App Group. Hindi inirerekomenda ang pag-iimbak ng token sa UserDefaults ng extension.

Kailangan ba ng espesyal na configuration ng certificate para sa extension?

Ang extension ay dapat pirmahan ng parehong developer certificate gaya ng pangunahing app. Para sa produksyon, kinakailangan ang production certificate na may naka-enable na Push Notifications capability.

Paano i-debug ang extension sa isang tunay na device?

Ikonekta ang device sa Xcode, piliin ang target ng extension sa launch scheme, at magpadala ng push notification sa pamamagitan ng Firebase Console. Ang Breakpoints sa extension ay gumagana tulad ng sa pangunahing app.

Buod

  • Notification Service Extension — iOS extension para sa background processing ng push notification bago ipakita.
  • Maximum na oras ng pagpapatupad — 30 segundo, pagkatapos nito ay ipapakita ng system ang orihinal na nilalaman.
  • Pangunahing gamit: pag-decrypt ng payload, pag-download ng media, pag-validate at pag-localize ng nilalaman.
  • Ang extension ay nagmamana mula sa UNNotificationServiceExtension na may mga method na didReceive at serviceExtensionTimeWillExpire.
  • Gamitin ang URLSession para sa pag-download ng media, iOS Keychain para sa pag-iimbak ng mga susi.
  • Laging maglaan ng fallback — tawagan ang contentHandler na may orihinal na nilalaman sa mga error.
  • Pagsamahin ang Service Extension sa Content Extension para sa buong kontrol sa mga 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