Notification Content Extension — standart push bildiriş şablonunu tamamilə fərdi istifadəçi interfeysi ilə əvəz edən iOS genişləndirmə növüdür. Developer bildiriş daxilində şəkillər, audio pleyer, hərəkət düymələri, gedişat çubuqları və fərdi animasiya göstərmək imkanı əldə edir, standart banneri tam hüquqlu mini-tətbiqə çevirir. WWDC 2025 məlumatlarına görə, genişləndirmə UNNotificationContentExtension istifadə edir və bir bildirişdə 4 media əlavəsinə, həmçinin UNNotificationAction vasitəsilə interaktiv hərəkətlərin işlənməsinə dəstək verir.
Əsas məqamlar
Notification Content Extension — iOS-da push bildirişinin göstərilməsini dəyişdirən app extension-dir. Standart başlıq, mesaj gövdəsi və düymələri olan banner əvəzinə Interface Builder-də və ya proqramlı şəkildə UIKit və ya SwiftUI vasitəsilə tam hazırlanmış interfeys göstərilə bilər.
Göstərilmədən əvvəl məzmunu dəyişdirən Notification Service Extension-dən fərqli olaraq, Content Extension yalnız vizual təqdimata cavabdehdir. Genişləndirmə bütün dəyişikliklərdən sonra hazır bildirişi alır və onu necə göstərəcəyinə qərar verir. Bu, iki bildiriş genişləndirmə növü arasındakı əsas fərqdir.
Genişləndirmə istifadəçi genişləndirmə jestini yerinə yetirdikdə — bildirişi aşağı sürüşdürdükdə və ya üzərinə kliklədikdə (cihaz modelindən asılı olaraq) aktivləşir. iOS genişləndirmə prosesini işə salır, göstərilən nib və ya storyboard-dan nəzarətçi yaradır və bildirişi UNNotificationContentExtension vasitəsilə ötürür.
İş Xcode-da Notification Content Extension şablonu ilə yeni target əlavə etməklə başlayır. Xcode MainInterface.storyboard faylı və UIViewController-dən miras alan, UNNotificationContentExtension protokolunu tətbiq edən sinif yaradır.
Fərdi sahənin maksimum hündürlüyü — iPhone-da 320 nöqtə (böyük ekranlı modellər üçün) və iPad-də 352 nöqtə. Bu həddən çıxan məzmun kəsilir. Müxtəlif ölçülərə uyğunlaşmaq üçün Auto Layout və sürüşdürülə bilən məzmun üçün UIScrollView istifadə etmək tövsiyə olunur. En həmişə bildirişin eninə bərabərdir və cihaz döndərildikdə avtomatik dəyişir.
Apple Human Interface Guidelines xəbərdarlıq edir: bildiriş interfeysi qısa olmalı və yalnız bir əsas element — şəkil, pleyer, xəritə və ya sürətli daxiletmə formu ehtiva etməlidir. Çoxsaylı interaktiv elementlər istifadəçini yükləyir və qarşılıqlı əlaqəni çətinləşdirir.
App Group — genişləndirmə ilə əsas tətbiq arasında məlumat mübadiləsinin yeganə mexanizmidir. App Group-un ümumi kataloqu vasitəsilə keşlənmiş şəkillər, tokenlər və parametrlər ötürülə bilər. Proses izolyasiyası səbəbindən əsas tətbiqin API-nə birbaşa zənglər və ya onun UserDefaults-a giriş mümkün deyil.
class NotificationViewController: UIViewController {
func didReceive(
_ notification: UNNotification
) {
guard let attachment = notification
.request.content.attachments.first()
else { return }
if attachment.url.startAccessingSecurityScopedResource() {
imageView.image = UIImage(contentsOfFile:
attachment.url.path)
attachment.url.stopAccessingSecurityScopedResource()
}
}
}
UNNotificationContentExtension — fərdi bildirişin həyat dövrünü təyin edən əsas protokoldur. Protokol məzmunu əldə etmək, hərəkətləri idarə etmək və interfeysi idarə etmək üçün metodlar təqdim edir.
didReceive(_:with:) bildiriş alındıqda çağırılır. Genişləndirmə UNNotification obyekti və media pleyerini idarə etmək üçün UNNotificationContentExtensionMediaPlayPauseButtonType alır. Bu metoddakı interfeysi konfiqurasiya etmək — şəkil yükləmək, pleyeri işə salmaq və ya məlumatları göstərmək lazımdır. Sistem real vaxt rejimində bildiriş yeniləndikdə bu metodu hər dəfə çağırır.
Nəzərə almaq vacibdir ki, genişləndirmənin icra üçün məhdud vaxtı var — tam göstərmə dövrü üçün təxminən 30 saniyə. İnterfeys bu müddətdə hazır olmazsa, iOS sistem bildirişini göstərəcək. Ağır resurslar üçün — şəbəkədən şəkil yükləmə, video dekodlaşdırma — App Group vasitəsilə əvvəlcədən keşləmə ilə asinxron əməliyyatlardan istifadə etmək tövsiyə olunur.
Protokola play/pause düymələri üçün isteğe bağlı metodlar daxildir: mediaPlay, mediaPause və mediaPlayPauseButtonType. Bildiriş audio və ya video məzmunu ehtiva edirsə, genişləndirmə sistem idarəetmə elementi ilə daxili pleyer göstərə bilər. iOS müvafiq düymə növü qaytarıldıqda genişləndirmənin yuxarı sağ küncünə avtomatik olaraq çalma düyməsi əlavə edir.
UNNotificationAttachment — bildirişə əlavə edilmiş media məlumatlarını ehtiva edən obyektdir. Şəkillər, audio fayllar və video serverdə bildiriş yaradılarkən və ya UNNotificationAttachment vasitəsilə Notification Service Extension-də əlavə olunur.
Şəkillər üçün: JPEG, PNG, GIF, HEIF. Audio üçün: MP3, AAC, ALAC, WAV. Video üçün: MPEG-4, H.264, HEVC. Hər əlavənin maksimum ölçüsü — 50 MB, bir bildiriş üçün 4 əlavəyə qədər. Sistem bildiriş göstərilməzdən əvvəl əlavələri fon rejimində avtomatik yükləyir və security-scoped resurslar vasitəsilə genişləndirməyə yerli URL-lərə giriş təmin edir.
Apple-a görə, genişləndirmə media-nı müstəqil yükləməməlidir — UNNotificationAttachment sistem tərəfindən yükləmə tamamlandıqdan sonra artıq yerli URL ehtiva edir. Lakin əlavə vaxtında yüklənməyibsə (məsələn, zəif əlaqədə), genişləndirmə placeholder və ya alternativ mətn göstərə bilər.
Hər UNNotificationAttachment security-scoped URL təqdim edir, genişləndirmə startAccessingSecurityScopedResource() vasitəsilə giriş əldə etməli və stopAccessingSecurityScopedResource() vasitəsilə azad etməlidir. Bu metodlar cüt-cüt çağırılmalıdır — əks halda resurs azad edilməyəcək və giriş hüququ sızmasına səbəb olacaq.
let attachment = notification.request.content.attachments.first()
guard attachment.url.startAccessingSecurityScopedResource()
else { return }
defer { attachment.url.stopAccessingSecurityScopedResource() }
let data = try Data(contentsOf: attachment.url)
imageView.image = UIImage(data: data)
Notification Content Extension fərdi interaktiv hərəkətləri — bildiriş məzmunu altında göstərilən düymələri dəstəkləyir. Hərəkətlər UNNotificationCategory vasitəsilə bildiriş kateqoriyası yaradılarkən qeydə alınır və dağıdıcı, mətnli və ya fon ola bilər.
UNNotificationAction — başlıq və isteğe bağlı dağıdıcılıq flag-ı olan sadə hərəkət. UNTextInputNotificationAction — məsələn, mesaja tez cavab vermək üçün mətn daxiletmə sahəsi olan hərəkət. Hər iki növ UNNotificationActionOptions.authenticationRequired seçimini dəstəkləyir — yerinə yetirmədən əvvəl cihazın blokdan çıxarılması tələbi.
Genişləndirmə seçilmiş hərəkəti didReceive(_:withCompletionHandler:) metodu vasitəsilə alır, burada hərəkət identifikatoru və isteğe bağlı mətn ilə UNNotificationResponse obyekti ötürülür. Genişləndirmə cavabı müstəqil emal edə və ya App Group-un ümumi konteyneri vasitəsilə əsas tətbiqə ötürə bilər.
let category = UNNotificationCategory(
identifier: "message",
actions: [
UNTextInputNotificationAction(
identifier: "reply",
title: "Reply",
options: .authenticationRequired
),
UNNotificationAction(
identifier: "mark_read",
title: "Mark Read",
options: .foreground
)
],
intentIdentifiers: []
)
Tez-tez verilən suallar
Content Extension bildirişin vizual göstərilməsinə cavabdehdir, Service Extension isə göstərilmədən əvvəl məzmunun dəyişdirilməsinə. Content Extension Service Extension-dən sonra işləyir və bildirişin payload-unu dəyişə bilməz.
UIKit üçün Swift və Objective-C. iOS 16-dan etibarən SwiftUI də NotificationContentView vasitəsilə ölçü və konfiqurasiya modifierləri ilə bildiriş interfeysi yaratmaq üçün dəstəklənir.
Bəli, iOS 16-dan etibarən genişləndirmə UIHostingController vasitəsilə SwiftUI istifadə edə bilər. Lakin UIKit-in bütün səlahiyyətləri — ölçü, məhdudiyyətlər, security-scoped resurslar — qalır və SwiftUI məzmununa tətbiq olunur.
Bir bildiriş üçün 4 əlavəyə qədər. Hər əlavənin ölçüsü 50 MB-a qədər. Şəkillər (JPEG, PNG, HEIF), audio (MP3, AAC) və video (MPEG-4, H.264) dəstəklənir.
App Group vasitəsilə — diskdə ümumi kataloq. App Group suffix-li UserDefaults da işləyir. Genişləndirmə proseslərinin izolyasiyası səbəbindən əsas tətbiqin API-nə birbaşa zənglər mümkün deyil.
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