Notification Content Extension — ay isang iOS extension na nagbibigay-daan sa iyo na palitan ang standard na interface ng push notification ng isang custom na UIView. Ang developer ay nakakakuha ng buong kontrol sa pagpapakita ng nilalaman: mga larawan, video, animation, custom na font at interactive na elemento. Ayon sa Apple Developer, 2025, ang Notification Content Extension ay sumusuporta sa anumang UIKit interface sa limitadong espasyo ng notipikasyon.
Mga pangunahing punto
Notification Content Extension — ay isang app extension sa iOS na nag-o-override sa standard na template ng pagpapakita ng push notification ng isang custom na UIView. Hindi tulad ng ordinaryong notification kung saan ang nilalaman ay limitado sa pamagat, sub-title at katawan, ang extension ay nagbibigay-daan sa pagpapakita ng anumang UIKit interface: mapa na may coordinates, graph, gallery ng mga larawan o input form.
Kapag ang iOS ay nakatanggap ng push notification na may tinukoy na categoryIdentifier, sinusuri ng system kung ang extension ay nakarehistro para sa kategoryang ito. Kung oo — inilulunsad ng system ang extension sa isang hiwalay na proseso at ipinapadala dito ang nilalaman ng notification. Ang extension ay nagpapakita ng sarili nitong interface sa halip na standard. Ang user ay nakikipag-ugnayan sa custom na interface nang hindi binubuksan ang pangunahing application.
Mahalagang huwag malito ang Notification Content Extension sa Notification Service Extension. Ang Service Extension ay nagpoproseso ng nilalaman bago ipakita ang notification (pag-download ng mga attachment, pag-decrypt). Ang Content Extension ay pinapalitan ang interface pagkatapos matanggap ang handa na nilalaman. Ang parehong extension ay maaaring magtrabaho nang magkasama: ang Service Extension ay naghahanda ng data, ang Content Extension ay nagpapakita nito.
| Katangian | Content Extension | Service Extension |
|---|---|---|
| Layunin | Custom na UI ng notification | Pagbabago ng nilalaman bago ipakita |
| Oras ng pagpapatupad | Habang nakikita ng user ang notification | Hanggang 30 segundo sa background |
| Interface | Buong UIKit UIView | Walang interface |
| API | UNNotificationContentExtension | UNNotificationServiceExtension |
Ang Notification Content Extension ay gumagana sa isang isolated na proseso na may limitadong resources. Ang extension ay walang access sa pangunahing storage ng application sa pamamagitan ng NSUserDefaults, maliban sa App Group. Ang laki ng extension ay limitado sa 50 MB sa naka-unpack na anyo. Ang oras para sa pagpapakita ng nilalaman ay limitado rin — kung hindi natapos ng extension ang pag-update sa makatwirang oras, isasara ito ng system.
Upang gawin ang extension sa Xcode, kailangan mong magdagdag ng bagong target ng uri Notification Content Extension. Awtomatikong gagawa ang Xcode ng MainInterface.storyboard na may controller na nagmamana ng UIViewController at nagpapatupad ng UNNotificationContentExtension.
Sa Xcode piliin ang File → New → Target → Notification Content Extension. Tukuyin ang pangalan ng extension, wika (Swift o Objective-C) at tiyakin na ang proyekto ay konektado sa parehong team ng developer. Pagkatapos gawin ang target, lilitaw ang isang folder na may tatlong file: MainInterface.storyboard, Info.plist at file ng controller.
Sa Info.plist ng extension, dapat na tinukoy ang array NSExtensionAttributes na may key na UNNotificationExtensionCategory. Ang array na ito ay naglalaman ng mga identifier ng mga kategorya ng notification kung saan ang extension ay i-activate. Ang opsiyonal na key na UNNotificationExtensionInitialContentSizeRatio ay nagtatakda ng initial aspect ratio ng custom na interface para sa tamang pagpoposisyon.
Inirerekomenda na panatilihin ang malinis na arkitektura sa target-extension: hiwalay na folder para sa mga controller, hiwalay para sa custom na view. Dahil ang extension ay isang hiwalay na binary file, ang code ng pangunahing application ay hindi direktang ma-access. Para sa pagbabahagi ng code, gumawa ng hiwalay na framework o gumamit ng App Group para sa data.
UNNotificationContentExtension — protocol na dapat ipatupad ng controller sa Notification Content Extension. Ang tanging mandatoryong method ay didReceive(_:with:), na tinatawag kapag nakatanggap ng notification. Ang controller ay tumatanggap ng notification at handa na view controller na kailangang i-update gamit ang data.
Ang controller ng extension ay dapat magmana ng UIViewController at magpatupad ng UNNotificationContentExtension. Ang Storyboard o xib ay naka-link sa controller na ito. Kapag nakatanggap ng notification, ang didReceive method ay nagpapadala ng nilalaman, at ang controller ay nag-a-update ng mga view nito.
import UIKit
import UserNotifications
import UserNotificationsUI
class CustomNotificationViewController: UIViewController {
@IBOutlet var titleLabel: UILabel!
@IBOutlet var customImageView: UIImageView!
func didReceive(
notification: UNNotification
) {
let content = notification.request.content
titleLabel.text = content.title
loadAttachment(content.attachments.first)
}
private func loadAttachment(attachment: UNNotificationAttachment?) {
guard let url = attachment?.URL else { return }
if let image = UIImage(contentsOfFile: url.path) {
customImageView.image = image
}
}
}
extension CustomNotificationViewController: UNNotificationContentExtension {
func didReceive(
notification: UNNotification
) {
didReceive(notification: notification)
}
}
Tinutukoy ng system ang laki ng custom na interface batay sa key na UNNotificationExtensionInitialContentSizeRatio sa Info.plist at kasalukuyang nilalaman. Inirerekomenda na itakda ang key na ito sa halagang 0.1 para sa minimum na paunang laki, pagkatapos ay baguhin ang laki sa pamamagitan ng preferredContentSize pagkatapos ng pag-load ng nilalaman.
Notification Content Extension ay nagbibigay ng buong kalayaan sa paggawa ng interface. Maaari kang gumamit ng anumang UIKit component: UITableView, MKMapView, WKWebView, UIStackView. Gayunpaman, mahalagang isaalang-alang ang limitadong espasyo ng notification at i-optimize ang performance.
Isa sa mga sikat na scenario ay ang pagpapakita ng mapa na may lokasyon. Para dito, sa Storyboard ng extension ay idinadagdag ang MKMapView, at ang controller ay nagpapadala ng coordinates mula sa nilalaman ng notification. Mahalagang huwag kalimutang idagdag ang MapKit sa target ng extension. Kapag gumagamit ng mapa, isaalang-alang ang limitasyon ng memorya ng extension — ang pag-load ng kumplikadong tiles ay maaaring lumagpas sa available na resources.
Ang Notification Content Extension ay sumusuporta sa UIView animation, kabilang ang pagbabago ng laki, paglipat at transparency ng mga elemento. Kapag pumapasok sa extended mode ng notification, maaari mong simulan ang animation ng paglitaw ng nilalaman. Ang animation ay dapat maikli (hanggang 0.5 segundo) at hindi makagambala sa user sa pakikipag-ugnayan sa notification. Iwasan ang walang katapusang animation — nauubos nito ang baterya at binabawasan ang performance.
Dahil ang extension ay isang ganap na UIViewController, maaari kang magdagdag ng gestures at paghawak ng pagpindot. Ang UIKit gestures (UITapGestureRecognizer, UIButton) ay gumagana nang standard. Para sa mga aksyon na nangangailangan ng pagbubukas ng application, gamitin ang delegate ng extension o userNotificationCenter. Ang interactive na elemento ay dapat sapat na malaki para sa komportableng pagpindot sa limitadong espasyo — ang minimum na laki ng touch target ay 44x44 puntos ayon sa rekomendasyon ng Apple.
Nilalamang multimedia — pangunahing kakayahan ng Notification Content Extension. Ang notification ay maaaring maglaman ng mga larawan, GIF, audio at video na ipinapakita sa custom na interface. Ang mga attachment ay inihatid sa pamamagitan ng UNNotificationAttachment, na maaaring idagdag ng server sa pamamagitan ng payload at ng Notification Service Extension pagkatapos i-download. Ang mga suportadong format ay JPEG, PNG, MPEG-4 at MP3.
Upang magpakita ng larawan, sapat na upang makuha ang UNNotificationAttachment mula sa nilalaman ng notification at i-load ito mula sa lokal na URL. Mahalagang tandaan na ang extension ay may access lamang sa mga lokal na file — ang mga remote na resources ay dapat na dati nang na-download ng Service Extension. Maximum na laki ng attachment — 50 MB sa iOS 15+, ang limitasyon ay tinataas sa bawat susunod na update. Para sa suporta ng maraming larawan, gumamit ng UNNotificationAttachment na may iba't ibang identifier at ipakita ang mga ito sa pamamagitan ng UIPageViewController.
Upang magpakita ng larawan sa custom na interface, ang extension ay kumukuha ng UNNotificationAttachment mula sa nilalaman ng notification at nilo-load ito mula sa lokal na URL. Ang attachment ay dapat na dati nang na-download ng Notification Service Extension — ang Content Extension ay walang access sa network. Maximum na laki ng media attachment — 50 MB sa iOS 15+, sa mga naunang bersyon ang limitasyon ay 10 MB. Ang extension ay dapat na tamang hawakan ang kawalan ng attachment at magpakita ng fallback interface. Para sa pre-load ng mga larawang mababa ang resolution, gumamit ng thumbnail version na ginawa ng Service Extension bago i-attach.
Sinusuportahan ng iOS ang pag-play ng video sa Notification Content Extension sa pamamagitan ng AVPlayerLayer. Ang extension ay maaaring magpakita ng video player na may mga control button nang direkta sa notification. Ito ay lalong kapaki-pakinabang para sa mga application ng video surveillance, streaming o preview ng nilalaman. Auto-play na walang tunog ay pinahihintulutan sa kondisyon na ang user ay umaasa ng multimedia content sa notification na ito. Kapag nagpapatupad ng video player, magdagdag ng mga control element: play/pause, progress bar at close button. Tiyakin na ang video ay hindi awtomatikong magsisimula na may tunog — ito ay lumalabag sa mga rekomendasyon ng Apple tungkol sa karanasan ng user. Para sa slideshow ng maraming larawan, gumamit ng animated transition sa pagitan ng mga ito sa pamamagitan ng UIView.transition na may opsyon sa transition ng paglipat ng pahina.
Ang Notification Content Extension ay gumagana sa limitadong kapaligiran na may memory limit na humigit-kumulang 50 MB. Para i-optimize ang performance, gumamit ng lazy loading ng mga larawan, iwasan ang mabibigat na kalkulasyon sa main thread at ilapat ang Auto Layout na may simpleng constraints. Gawin ang mabibigat na operasyon tulad ng pagproseso ng larawan o pag-parse ng data sa background queues (DispatchQueue.global). Kapag nalagpasan ang memory limit, isasara ng system ang extension at makikita ng user ang standard na notification. Inirerekomenda na i-profile ang extension sa pamamagitan ng Instruments (Allocations at Time Profiler) bago ang publikasyon, pati na rin suriin ang paggamit ng memorya sa mga tunay na device na may iba't ibang bersyon ng iOS.
Mga madalas itanong
Oo, simula sa iOS 16 ang Notification Content Extension ay sumusuporta sa SwiftUI sa pamamagitan ng UIHostingController. Gayunpaman, ang UIKit ay nananatiling mas matatag na pagpipilian para sa mga kumplikadong interface dahil sa limitadong suporta ng SwiftUI sa mga extension.
Suriin na ang categoryIdentifier sa payload ng notification ay tumutugma sa UNNotificationExtensionCategory sa Info.plist ng extension. Tiyakin din na ang extension ay idinagdag sa main app target at na-sign nang tama.
Gumamit ng App Group — shared storage (UserDefaults suite) o file container. Ang pangunahing application at extension ay dapat nasa parehong grupo ng developer at may naka-enable na App Groups capability.
Gamitin ang method na didReceive(_:with:) na may UNNotificationContentExtensionMediaPlayPauseButtonType para sa media control o humiling ng update sa pamamagitan ng delegate. Ang buong update ng nilalaman nang walang bagong notification ay hindi posible.
Piliin ang target ng extension sa Xcode at patakbuhin sa simulator. Gumamit ng lldb at breakpoints tulad ng sa ordinaryong application. Para sa pagsubok, magpadala ng push notification sa pamamagitan ng Firebase Console o lokal sa pamamagitan ng Pusher.
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