Notification Extension: mga pangunahing konsepto, uri ng extension, at configuration

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

Ang Notification Extension ay isang mekanismo ng iOS na nagbibigay-daan sa pagbabago ng nilalaman at hitsura ng mga push notification bago ipakita ang mga ito sa user. Gumagana ang mga extension sa gilid ng operating system sa isang hiwalay na proseso: Pinoproseso ng UNNotificationServiceExtension ang papasok na nilalaman, habang ang UNNotificationContentExtension ay namamahala sa interface. Ayon sa Apple Developer Documentation, 2026, ang Service Extension ay may hanggang 30 segundo upang maisagawa ang mga gawain bago ipakita ang notification. Ang limitasyong ito ay kritikal kapag nag-load ng mga attachment o nagde-decrypt ng data.

Mga Pangunahing Punto

  • Service Extension — sinasalo ang notification bago ipakita, pinapayagan ang pagbabago ng teksto, pagdaragdag ng media, at pag-decrypt ng data na may limitasyong 30 segundo.
  • Content Extension — lumilikha ng custom na interface ng notification na may arbitrary UI, mga button, at pagproseso ng pagpindot sa pamamagitan ng storyboard o SwiftUI.
  • Mga attachment ng media — mga larawan, video, at audio ay idinaragdag sa pamamagitan ng UNNotificationAttachment sa Service Extension bago ipasa sa Content Extension.
  • Pagrehistro — ang parehong extension ay nirerehistro sa Info.plist bilang magkahiwalay na target na may pagtukoy ng mga kategorya ng notification at NSExtensionPointIdentifier.
  • Mga limitasyon — ang mga extension ay walang access sa pangunahing application, gumagana sa isang nakahiwalay na sandbox na may limitasyong memorya na 50 MB.

Ano ang Notification Extension

Notification Extension ay isang software component ng iOS na nagpapalawak ng karaniwang pag-uugali ng mga push notification, nagdaragdag ng kakayahang baguhin ang nilalaman at i-customize ang interface. Hindi tulad ng mga ordinaryong notification na ipinapakita ng system sa karaniwang anyo, pinapayagan ng mga extension ang developer na maimpluwensyahan ang nilalaman bago ipakita at lumikha ng kakaibang user interface.

Dalawang uri ng extension ng notification

Ang Apple ay nagbibigay ng dalawang uri ng Notification Extension para sa iba't ibang layunin: UNNotificationServiceExtension ay responsable para sa pagproseso ng papasok na payload, at ang UNNotificationContentExtension ay namamahala sa pagpapakita. Ang Service Extension ay inilulunsad bago ipakita ang notification at may limitadong oras para sa pagpapatupad — hanggang 30 segundo ayon sa Apple Developer Documentation. Ang Content Extension ay isinaaktibo pagkatapos makipag-ugnayan ang user sa notification at nagpapakita ng custom na view.

Pagkakaiba mula sa karaniwang notification

Ang karaniwang iOS push notification ay awtomatikong ipinapakita ng system batay sa mga field na alert, title, at subtitle mula sa JSON-payload. Notification Extension ang pumalit sa kontrol: Tinatanggap ng Service Extension ang raw payload, binabago ito, at ipinapasa sa system para ipakita. Pinapalitan ng Content Extension ang standard na banner ng isang arbitrary interface na may anumang elemento ng kontrol.

Lifecycle ng extension

Kapag nakatanggap ang device ng push notification na may key na mutable-content: 1, inilulunsad ng system ang Service Extension sa isang hiwalay na proseso. Ang proseso ng extension ay nakahiwalay sa pangunahing application at may sariling sandbox na may limitasyong memorya na 50 MB. Pagkatapos makumpleto ang pagproseso, tinatawag ng extension ang completion handler, na ipinapasa ang binagong UNNotificationContent sa system para ipakita.

UNNotificationServiceExtension: pagbabago ng nilalaman

UNNotificationServiceExtension ay ang pangunahing tool para sa programmatically na pagbabago ng mga push notification bago ipakita ang mga ito sa user. Ang extension ay awtomatikong isinaaktibo kapag nakatanggap ng notification na ang payload ay may flag na mutable-content: 1. Sa loob ng 30 segundo, ang extension ay maaaring mag-load ng media attachment, baguhin ang teksto, i-decrypt ang naka-encrypt na data, o pagyamanin ang nilalaman.

Mga pamamaraan ng protocol ng UNNotificationServiceExtension

Ang extension ay nagpapatupad ng dalawang pangunahing pamamaraan mula sa protocol ng UNNotificationServiceExtension. Ang pamamaraang didReceive ay tumatanggap ng papasok na kahilingan na may raw UNNotificationRequest at pinapayagan ang pagbabago nito sa pamamagitan ng completion handler na may bagong UNNotificationContent. Ang pamamaraang serviceExtensionTimeWillExpire ay tinatawag ng system isang segundo bago mag-expire ang timeout — dito dapat kumpletuhin ang pagproseso at ipasa ang kasalukuyang (posibleng bahagyang) resulta.

Halimbawa: pagdaragdag ng larawan sa notification

Isaalang-alang ang senaryo kung saan nagpapadala ang server ng push na may URL ng larawan sa isang custom na field. Ina-load ng Service Extension ang larawang ito sa pamamagitan ng network, gumagawa ng UNNotificationAttachment, at idinaragdag ito sa nilalaman. UNNotificationAttachment ay tumatanggap ng lokal na file ng larawan, video, o audio at awtomatikong kinokopya ito sa sandbox ng extension. Pagkatapos gawin ang attachment, ipinapasa ng extension ang na-update na nilalaman sa system.

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

Caching at muling paggamit

Sa madalas na pagpapadala ng mga notification na may parehong mga attachment, inirerekomenda na i-cache ang mga na-download na file sa device. FileManager ay nagbibigay ng access sa cache directory ng extension, na pinapanatili sa pagitan ng mga paglulunsad. Ito ay nagbabawas ng oras ng pagproseso ng mga susunod na notification at nagpapababa ng load ng network. Ayon sa Apple, ang pag-cache ng mga attachment ay maaaring bawasan ang oras ng pagproseso sa 2–5 segundo sa halip na buong pag-load.

UNNotificationContentExtension: custom na interface

UNNotificationContentExtension ay nagpapahintulot na palitan ang standard na banner ng notification ng isang custom na interface na ginawa sa Interface Builder o SwiftUI. Ang extension ay isinaaktibo kapag ang user ay nagsagawa ng aksyon sa notification: pagpindot, pag-swipe pababa, o 3D Touch. Ang Content Extension ay tumatanggap ng nilalaman na naproseso na ng Service Extension at ipinapakita ito sa isang custom na view.

Storyboard at mga kategorya ng notification

Ang bawat Content Extension ay nakatali sa isa o higit pang mga kategorya ng notification sa pamamagitan ng Info.plist. Ang kategorya ay tinutukoy sa server ng field na category sa APNS payload. Awtomatikong pinipili ng system ang tamang extension batay sa kategorya ng natanggap na notification. Ang interface ay binuo sa pamamagitan ng storyboard gamit ang mga standard na UIKit component o SwiftUI View.

Pagproseso ng mga aksyon ng user

Ang Content Extension ay sumusuporta sa custom na mga button at tagapangasiwa ng pagpindot na tinukoy sa UNNotificationAction. UNNotificationAction ay ginagawa sa yugto ng pagrehistro ng kategorya at maaaring input ng teksto sa pamamagitan ng UNTextInputNotificationAction. Kapag pinindot ng user ang isang button, natatanggap ng extension ang callback na didReceive na may identifier ng aksyon at maaaring magsagawa ng kaukulang lohika — magbukas ng URL, magpadala ng kahilingan sa server, o i-update ang interface.

Mga limitasyon sa pagganap

Ang Content Extension ay gumagana sa isang nakahiwalay na proseso na may sariling execution cycle at limitasyon ng memorya na humigit-kumulang 50 MB. Ang pagganap ng extension ay kritikal dahil tinatapos ng system watchdog ang proseso kapag lumampas sa mga limitasyon. Inirerekomenda na iwasan ang mabibigat na kalkulasyon, pag-load ng malalaking larawan, at mahabang network request sa loob ng Content Extension.

Mga attachment ng media at UNNotificationAttachment

UNNotificationAttachment ay isang bagay na nagdaragdag ng media file sa push notification: larawan, video, audio, o GIF. Ang attachment ay ginawa mula sa lokal na URL ng file na dapat nasa sandbox ng extension. Ang maximum na laki ng attachment ay hindi dapat lumampas sa 10 MB, kung hindi, tatanggihan ng system ang attachment sa paggawa.

Mga format na sinusuportahan

Sinusuportahan ng Apple ang isang limitadong hanay ng mga format para sa mga media attachment. Mga Larawan — JPEG, PNG, GIF (kabilang ang animated), TIFF. Video — MPEG, MP4, MOV na may maximum na tagal na 30 segundo. Audio — MP3, AAC, WAV, CAF. Para sa bawat format, maaaring tukuyin ang uri sa pamamagitan ng UNNotificationAttachmentOptionsTypeHintKey, na tumutulong sa system na maproseso nang tama ang file.

Pag-load ng attachment mula sa network

Dahil ang push payload ay naglalaman lamang ng URL, hindi ang file mismo, ang pag-load ng attachment ay dapat gawin sa loob ng Service Extension. Ang maximum na oras ng pag-load ay limitado sa 30 segundo, kaya inirerekomenda na gamitin ang URLSession na may pinakamababang setting at huwag paganahin ang pag-load kapag mahina ang signal. Kung ang attachment ay hindi na-load sa oras, ang notification ay ipinapakita nang walang media — ito ang default na pag-uugali ng system.

Halimbawa ng implementasyon sa Swift

Tingnan natin ang isang kumpletong halimbawa ng Notification Extension na naglo-load ng larawan, nagda-download nito, at idinaragdag sa notification. NotificationService ay nagmana mula sa UNNotificationServiceExtension at nag-override sa pamamaraang didReceive. Ipinapakita sa halimbawa ang pagproseso ng mga opsyonal na field, paggawa ng attachment, at pagtawag sa completion handler na may binagong nilalaman.

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

Pag-configure ng Info.plist para sa extension

Para sa tamang operasyon ng extension, dapat irehistro ang mga kategorya ng notification sa Info.plist. Ang key na NSExtensionPointIdentifier ay nakatakda sa com.apple.usernotifications.service para sa Service Extension o com.apple.usernotifications.content para sa Content Extension. Ang mga kategorya ay tinutukoy sa AppDelegate kapag inilunsad ang application sa pamamagitan ng UNUserNotificationCenter, at ang extension ay isinaaktibo lamang para sa mga notification na may kaukulang kategorya sa payload.

Mga Madalas Itanong

Ano ang pagkakaiba ng Service Extension at Content Extension?

Service Extension ay nagbabago ng nilalaman bago ipakita ang notification — nagdaragdag ng media, nagbabago ng teksto, nagde-decrypt ng data. Pinapalitan ng Content Extension ang interface ng notification ng custom pagkatapos ng interaction ng user. Ang Service Extension ay gumagana bago ipakita, Content Extension — pagkatapos.

Gaano karaming oras ang ibinibigay para sa pagproseso sa Service Extension?

Ang system ay naglalaan ng 30 segundo para sa pagpapatupad ng code sa didReceive. Kung hindi kumpleto ang pagproseso sa oras na ito, tinatawag ang serviceExtensionTimeWillExpire, kung saan dapat ipasa ang kasalukuyang resulta. Inirerekomenda na matapos sa loob ng 10–15 segundo, isinasaalang-alang ang pag-load ng mga attachment.

Maaari bang gamitin ang SwiftUI sa Content Extension?

Oo, ang SwiftUI ay sinusuportahan sa Content Extension simula sa iOS 16. Ang View ay binalot sa UIHostingController at idinaragdag sa storyboard. Gayunpaman, dahil sa mga limitasyon ng memorya, inirerekomenda na gamitin lamang ang SwiftUI para sa mga simpleng interface na may minimal na bilang ng mga elemento.

Paano haharapin ang mga error sa pag-load ng attachment?

Sa error sa pag-load o paglampas sa limitasyon ng oras, tawagan lamang ang completion handler na may orihinal na nilalaman na walang attachment. Ipapakita ng system ang notification sa standard na anyo na walang media. I-log ang mga error sa pamamagitan ng OSLog para sa diagnosis, ngunit huwag harangan ang pagpapakita ng notification.

Ano ang mga limitasyon ng memorya ng Notification Extension?

Ang extension ay gumagana sa isang nakahiwalay na proseso na may limitasyon na humigit-kumulang 50 MB. Kapag lumampas sa limitasyon, tinatapos ng system ang proseso sa pamamagitan ng watchdog. Iwasan ang pag-load ng malalaking file, pag-iimbak ng mga larawan sa memorya, at pagtagas ng memorya kapag nagtatrabaho sa URLSession.

Buod

  • Notification Extension — mekanismo ng iOS para sa pagbabago ng mga push notification, kabilang ang Service Extension (nilalaman) at Content Extension (interface).
  • Service Extension nagpoproseso ng payload bago ipakita ang notification na may limitasyong 30 segundo, maaaring magdagdag ng mga media attachment at mag-decrypt ng data.
  • Content Extension pinapalitan ang standard na banner ng custom na interface sa pamamagitan ng UIKit o SwiftUI na may suporta para sa mga interactive na button.
  • UNNotificationAttachment nagdaragdag ng mga larawan, video, at audio sa notification, sumusuporta sa mga format na JPEG, PNG, MP4, MP3, at iba pa.
  • Pagrehistro ng mga extension ay ginagawa sa pamamagitan ng Info.plist na may pagtukoy ng NSExtensionPointIdentifier at mga kategorya ng notification para sa activation.
  • Mga limitasyon — limitasyon ng memorya na 50 MB, nakahiwalay na sandbox na walang access sa pangunahing application, limitadong oras ng pagpapatupad.
  • Notification Extension ay isang pangunahing tool para sa paglikha ng mayayamang user notification, nagpapataas ng engagement at functionality ng push communication sa iOS.

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