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
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.
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.
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.
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 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.
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.
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.
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)
}
}
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 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.
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.
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.
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.
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.
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.
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.
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.
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)
}
}
}
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
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.
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.
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.
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.
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
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.
Basahin din