Notification Content Extension — push bildirişinin standart interfeysini fərdi UIView ilə əvəz etməyə imkan verən iOS genişlənməsidir. Tərtibatçı məzmunun göstərilməsinə tam nəzarət əldə edir: şəkillər, videolar, animasiyalar, fərdi şriftlər və interaktiv elementlər. Apple Developer, 2025-ə görə, Notification Content Extension məhdud bildiriş sahəsində istənilən UIKit interfeysini dəstəkləyir.
Əsas məqamlar
Notification Content Extension — iOS-da push bildirişinin standart göstərilmə şablonunu fərdi UIView ilə əvəz edən app extension-dır. Adi bildirişdən fərqli olaraq, məzmun başlıq, alt başlıq və gövdə ilə məhdudlaşır, genişlənmə isə istənilən UIKit interfeysini göstərməyə imkan verir: koordinatları olan xəritə, qrafik, şəkil qalereyası və ya giriş forması.
iOS müəyyən edilmiş categoryIdentifier ilə push bildirişi aldıqda, sistem bu kateqoriya üçün genişlənmənin qeydiyyatdan keçib-keçmədiyini yoxlayır. Əgər keçibsə — sistem genişlənməni ayrıca prosesdə işə salır və ona bildirişin məzmununu ötürür. Genişlənmə standart interfeys əvəzinə öz interfeysini göstərir. İstifadəçi əsas tətbiqi açmadan fərdi interfeyslə qarşılıqlı əlaqə qurur.
Notification Content Extension-i Notification Service Extension ilə qarışdırmamaq vacibdir. Service Extension bildiriş göstərilməzdən əvvəl məzmunu emal edir (əlavələri endirmə, deşifrə). Content Extension hazır məzmunu aldıqdan sonra interfeysi əvəz edir. Hər iki genişlənmə tandemdə işləyə bilər: Service Extension məlumatları hazırlayır, Content Extension onları göstərir.
| Xüsusiyyət | Content Extension | Service Extension |
|---|---|---|
| Təyinat | Bildirişin fərdi UI | Göstərilməzdən əvvəl məzmunun dəyişdirilməsi |
| İcra müddəti | İstifadəçi bildirişi gördükcə | Arxa planda 30 saniyəyə qədər |
| İnterfeys | Tam UIKit UIView | İnterfeys yoxdur |
| API | UNNotificationContentExtension | UNNotificationServiceExtension |
Notification Content Extension məhdud resurslarla təcrid olunmuş prosesdə işləyir. Genişlənmənin App Group istisna olmaqla, NSUserDefaults vasitəsilə əsas tətbiq yaddaşına girişi yoxdur. Genişlənmənin ölçüsü açılmış formada 50 MB ilə məhdudlaşır. Məzmunun göstərilməsi üçün vaxt da məhduddur — genişlənmə ağlabatan müddətdə yenilənməni tamamlamazsa, sistem onu bağlayır.
Xcode-da genişlənmə yaratmaq üçün Notification Content Extension tipli yeni target əlavə etmək lazımdır. Xcode avtomatik olaraq UIViewController-dən miras alan və UNNotificationContentExtension-i tətbiq edən kontrollerlə MainInterface.storyboard yaradacaq.
Xcode-da File → New → Target → Notification Content Extension seçin. Genişlənmənin adını, dilini (Swift və ya Objective-C) qeyd edin və layihənin eyni tərtibatçı komandasına qoşulduğundan əmin olun. Target yaradıldıqdan sonra üç faylı olan qovluq görünəcək: MainInterface.storyboard, Info.plist və kontroller faylı.
Genişlənmənin Info.plist-də mütləq UNNotificationExtensionCategory açarı ilə NSExtensionAttributes massivi göstərilir. Bu massiv genişlənmənin aktivləşəcəyi bildiriş kateqoriyalarının identifikatorlarını ehtiva edir. İstəyə bağlı UNNotificationExtensionInitialContentSizeRatio açarı düzgün yerləşdirmə üçün fərdi interfeysin ilkin aspekt nisbətini təyin edir.
Target-genişlənmədə təmiz arxitektura saxlamaq tövsiyə olunur: kontrollerlər üçün ayrıca qovluq, fərdi görünüşlər üçün ayrıca. Genişlənmə ayrıca binar fayl olduğundan, əsas tətbiqin kodu birbaşa əlçatan deyil. Kodu paylaşmaq üçün ayrıca framework yaradın və ya məlumatlar üçün App Group istifadə edin.
UNNotificationContentExtension — Notification Content Extension-da kontrollerin tətbiq etməli olduğu protokoldur. Yeganə məcburi metod bildiriş qəbul edildikdə çağrılan didReceive(_:with:)-dir. Kontroller bildirişi və məlumatlarla yenilənməli olan hazır view controller-i alır.
Genişlənmənin kontrolleri UIViewController-dən miras almalı və UNNotificationContentExtension-i tətbiq etməlidir. Storyboard və ya xib bu kontrollerlə əlaqələndirilir. Bildiriş qəbul edildikdə didReceive metodu məzmunu ötürür və kontroller öz görünüşlərini yeniləyir.
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)
}
}
Sistem Info.plist-də UNNotificationExtensionInitialContentSizeRatio açarı və cari məzmun əsasında fərdi interfeysin ölçüsünü müəyyən edir. Minimal ilkin ölçü üçün bu açarı 0.1 dəyərinə təyin etmək, sonra isə məzmun yükləndikdən sonra preferredContentSize vasitəsilə ölçüsünü dəyişmək tövsiyə olunur.
Notification Content Extension interfeys yaratmada tam sərbəstlik verir. İstənilən UIKit komponentlərindən istifadə etmək olar: UITableView, MKMapView, WKWebView, UIStackView. Bununla belə, bildirişin məhdud sahəsini nəzərə almaq və performansı optimallaşdırmaq vacibdir.
Populyar ssenarilərdən biri yerləşmə ilə xəritənin göstərilməsidir. Bunun üçün genişlənmənin Storyboard-na MKMapView əlavə edilir, kontroller isə bildirişin məzmunundan koordinatları ötürür. Genişlənmənin target-ına MapKit əlavə etməyi unutmamaq vacibdir. Xəritədən istifadə edərkən genişlənmənin yaddaş limitini nəzərə alın — mürəkkəb mozaikaların yüklənməsi mövcud resursları aşa bilər.
Notification Content Extension UIView animasiyalarını dəstəkləyir, o cümlədən ölçü dəyişdirmə, hərəkət və elementlərin şəffaflığı. Bildirişin genişləndirilmiş rejiminə daxil olduqda məzmunun görünmə animasiyasını işə salmaq olar. Animasiyalar qısa olmalıdır (0.5 saniyəyə qədər) və istifadəçinin bildirişlə qarşılıqlı əlaqəsinə mane olmamalıdır. Sonsuz animasiyalardan çəkinin — onlar batareyanı boşaldır və performansı azaldır.
Genişlənmə tam hüquqlu UIViewController olduğundan, jestlər və toxunuş idarəediciləri əlavə edə bilərsiniz. UIKit jestləri (UITapGestureRecognizer, UIButton) standart şəkildə işləyir. Tətbiqin açılmasını tələb edən əməliyyatlar üçün genişlənmənin nümayəndəsindən və ya userNotificationCenter-dan istifadə edin. İnteraktiv elementlər məhdud sahədə rahat toxunma üçün kifayət qədər böyük olmalıdır — Apple tövsiyələrinə görə minimum touch target ölçüsü 44x44 nöqtədir.
Media məzmunu — Notification Content Extension-ın əsas imkanıdır. Bildiriş fərdi interfeysdə göstərilən şəkillər, GIF, audio və video ehtiva edə bilər. Əlavələr UNNotificationAttachment vasitəsilə çatdırılır, o, həm server tərəfindən payload vasitəsilə, həm də Notification Service Extension tərəfindən endirildikdən sonra əlavə edilə bilər. JPEG, PNG, MPEG-4 və MP3 formatları dəstəklənir.
Şəkli göstərmək üçün bildirişin məzmunundan UNNotificationAttachment əldə etmək və onu yerli URL-dən yükləmək kifayətdir. Yadda saxlamaq vacibdir ki, genişlənmə yalnız yerli fayllara çıxış imkanına malikdir — uzaq resurslar əvvəlcədən Service Extension tərəfindən endirilməlidir. Maksimum ölçü — iOS 15+-də 50 MB, məhdudiyyət hər sonrakı yeniləmə ilə artırılır. Bir neçə şəkli dəstəkləmək üçün müxtəlif identifikatorlarla UNNotificationAttachment istifadə edin və onları UIPageViewController vasitəsilə göstərin.
Fərdi interfeysdə şəkli göstərmək üçün genişlənmə bildirişin məzmunundan UNNotificationAttachment əldə edir və onu yerli URL-dən yükləyir. Əlavə əvvəlcədən Notification Service Extension tərəfindən endirilməlidir — Content Extension-ın şəbəkəyə çıxışı yoxdur. Media əlavəsinin maksimum ölçüsü — iOS 15+-də 50 MB, daha əvvəlki versiyalarda məhdudiyyət 10 MB idi. Genişlənmə əlavənin olmamasını düzgün idarə etməli və fallback-interfeys göstərməlidir. Aşağı rezolyusiyalı şəkillərin ilkin yüklənməsi üçün Service Extension tərəfindən əlavə etmədən əvvəl yaradılmış miniatür versiyalardan istifadə edin.
iOS AVPlayerLayer vasitəsilə Notification Content Extension-da video oxudulmasını dəstəkləyir. Genişlənmə birbaşa bildirişdə idarəetmə düymələri olan video pleyeri göstərə bilər. Bu, xüsusilə videomüşahidə, streaming və ya məzmun önbaxış tətbiqləri üçün faydalıdır. Avtomatik oxutma səssiz olaraq icazəlidir, ancaq istifadəçinin bu bildirişdə media məzmunu gözləməsi şərtilə. Video pleyer tətbiq edərkən idarəetmə elementləri əlavə edin: play/pause, gedişat çubuğu və bağlama düyməsi. Videonun səslə avtomatik başlamadığından əmin olun — bu, Apple-ın istifadəçi təcrübəsi tövsiyələrini pozur. Bir neçə şəkildən ibarət slayd-şou üçün UIView.transition vasitəsilə səhifə çevirmə keçidi ilə animasiyalı keçid istifadə edin.
Notification Content Extension təxminən 50 MB yaddaş limiti ilə məhdud mühitdə işləyir. Performansı optimallaşdırmaq üçün şəkillərin gec yüklənməsindən istifadə edin, əsas thread-də ağır hesablamalardan çəkinin və sadə constraint-lərlə Auto Layout tətbiq edin. Şəkillərin emalı və ya məlumatların pars edilməsi kimi ağır əməliyyatları fon thread-lərində yerinə yetirin (DispatchQueue.global). Yaddaş limiti aşıldıqda sistem genişlənməni bağlayacaq və istifadəçi standart bildiriş görəcək. Nəşrdən əvvəl genişlənməni Instruments (Allocations və Time Profiler) vasitəsilə profilləşdirmək, həmçinin müxtəlif iOS versiyaları olan real cihazlarda yaddaş istehlakını yoxlamaq tövsiyə olunur.
Tez-tez verilən suallar
Bəli, iOS 16-dan etibarən Notification Content Extension UIHostingController vasitəsilə SwiftUI-ni dəstəkləyir. Bununla belə, UIKit genişlənmələrdə SwiftUI-nin məhdud dəstəyi səbəbindən mürəkkəb interfeyslər üçün daha sabit seçim olaraq qalır.
Bildirişin payload-dakı categoryIdentifier-in genişlənmənin Info.plist-dəki UNNotificationExtensionCategory ilə uyğun olduğunu yoxlayın. Həmçinin genişlənmənin əsas tətbiq target-ına əlavə edildiyindən və düzgün imzalandığından əmin olun.
App Group — ümumi yaddaş (UserDefaults suite) və ya fayl konteynerindən istifadə edin. Əsas tətbiq və genişlənmə eyni tərtibatçı qrupunda olmalı və App Groups imkanı aktiv edilməlidir.
Media idarəetməsi üçün UNNotificationContentExtensionMediaPlayPauseButtonType ilə didReceive(_:with:) metodundan istifadə edin və ya nümayəndə vasitəsilə yeniləmə tələb edin. Yeni bildiriş olmadan məzmunun tam yenilənməsi mümkün deyil.
Xcode-da genişlənmə target-ını seçin və simulyatorda işə salın. Adi tətbiqdə olduğu kimi lldb və breakpoint-lərdən istifadə edin. Test etmək üçün Firebase Console vasitəsilə push bildirişi göndərin və ya yerli olaraq Pusher vasitəsilə.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun