Notification Extension: iOS-da əsas anlayışlar, genişləndirmə növləri və quraşdırma

Müəllif: IT Sectr Dərc olunub: 2026-03-20 Oxuma vaxtı: 8 dəq

Notification Extension iOS mexanizmidir ki, push bildirişlərinin məzmununu və görünüşünü istifadəçiyə göstərilməzdən əvvəl dəyişdirməyə imkan verir. Genişləndirmələr əməliyyat sistemi tərəfindən ayrıca prosesdə işləyir: UNNotificationServiceExtension daxil olan məzmunu emal edir, UNNotificationContentExtension isə interfeysi idarə edir. Apple Developer Documentation, 2026-ya görə, Service Extension bildiriş göstərilməzdən əvvəl tapşırıqları yerinə yetirmək üçün 30 saniyəyə qədər vaxt alır. Bu məhdudiyyət qoşmaların yüklənməsi və ya məlumatların şifrəsinin açılması zamanı kritikdir.

Əsas məqamlar

  • Service Extension — bildirişi göstərilməzdən əvvəl ələ keçirir, mətni dəyişdirməyə, media əlavə etməyə və 30 saniyə limiti ilə məlumatları şifrələməyə imkan verir.
  • Content Extension — storyboard və ya SwiftUI vasitəsilə fərdi UI, düymələr və toxunma emalı ilə bildiriş üçün fərdi interfeys yaradır.
  • Media qoşmaları — şəkillər, video və audio UNNotificationAttachment vasitəsilə Service Extension-da Content Extension-a ötürülməzdən əvvəl əlavə edilir.
  • Qeydiyyat — hər iki genişləndirmə Info.plist-də bildiriş kateqoriyaları və NSExtensionPointIdentifier göstərilməklə ayrıca targetlər kimi qeydiyyatdan keçirilir.
  • Məhdudiyyətlər — genişləndirmələrin əsas tətbiqə girişi yoxdur, 50 MB yaddaş limiti ilə izolyasiya edilmiş qum qutusunda işləyirlər.

Notification Extension nədir

Notification Extension iOS-un proqram komponentidir ki, push bildirişlərinin standart davranışını genişləndirir, məzmun modifikasiyası və interfeysin fərdiləşdirilməsi imkanı əlavə edir. Adi bildirişlərdən fərqli olaraq, sistem tərəfindən standart formada göstərilən bildirişlər əvəzinə, genişləndirmələr proqramçıya göstərilməzdən əvvəl məzmuna təsir etməyə və unikal istifadəçi interfeysi yaratmağa imkan verir.

Bildiriş genişləndirmələrinin iki növü

Apple müxtəlif məqsədlər üçün iki növ Notification Extension təqdim edir: UNNotificationServiceExtension daxil olan payload-un emalına cavabdehdir, UNNotificationContentExtension isə göstərilməni idarə edir. Service Extension bildiriş göstərilməzdən əvvəl işə düşür və Apple Developer Documentation-a görə icra üçün məhdud vaxt — 30 saniyəyə qədər alır. Content Extension istifadəçi bildirişlə qarşılıqlı əlaqədə olduqdan sonra aktivləşir və fərdi görünüşü göstərir.

Standart bildirişlərdən fərq

Standart iOS push bildirişi sistem tərəfindən JSON-payload-dakı alert, title və subtitle sahələri əsasında avtomatik göstərilir. Notification Extension idarəetməni ələ keçirir: Service Extension xam payload alır, onu dəyişdirir və göstərilmək üçün sistemə ötürür. Content Extension standart banneri istənilən idarəetmə elementləri ilə fərdi interfeyslə əvəz edir.

Genişləndirmənin həyat dövrü

Cihaz mutable-content: 1 açarı olan push bildirişi aldıqda, sistem ayrıca prosesdə Service Extension-u işə salır. Genişləndirmə prosesi əsas tətbiqdən izolyasiya olunur və 50 MB yaddaş limiti ilə öz qum qutusuna malikdir. Emal bitdikdən sonra genişləndirmə completion handler-i çağırır, dəyişdirilmiş UNNotificationContent-u göstərilmək üçün sistemə ötürür.

UNNotificationServiceExtension: məzmun modifikasiyası

UNNotificationServiceExtension push bildirişlərini istifadəçiyə göstərilməzdən əvvəl proqramlı şəkildə dəyişdirmək üçün əsas vasitədir. Genişləndirmə payload-da mutable-content: 1 bayrağı qoyulmuş bildiriş alındıqda avtomatik aktivləşir. 30 saniyə ərzində genişləndirmə media qoşması yükləyə, mətni dəyişdirə, şifrələnmiş məlumatları deşifrə edə və ya məzmunu zənginləşdirə bilər.

UNNotificationServiceExtension protokolunun metodları

Genişləndirmə UNNotificationServiceExtension protokolundan iki əsas metodu tətbiq edir. didReceive metodu xam UNNotificationRequest ilə daxil olan sorğunu alır və yeni UNNotificationContent ilə completion handler vasitəsilə onu dəyişdirməyə imkan verir. serviceExtensionTimeWillExpire metodu sistem tərəfindən vaxt aşımına bir saniyə qalmış çağırılır — burada emalı bitirmək və cari (bəlkə də qismən) nəticəni ötürmək lazımdır.

Nümunə: bildirişə şəkil əlavə etmək

Serverin fərdi sahədə şəkil URL-i ilə push göndərdiyi ssenarini nəzərdən keçirək. Service Extension bu şəkili şəbəkə vasitəsilə yükləyir, UNNotificationAttachment yaradır və onu məzmuna əlavə edir. UNNotificationAttachment yerli şəkil, video və ya audio faylı qəbul edir və avtomatik olaraq genişləndirmənin qum qutusuna kopyalayır. Attachment yaradıldıqdan sonra genişləndirmə yenilənmiş məzmunu sistemə ötürür.

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

Keşləmə və təkrar istifadə

Eyni qoşmalarla bildirişlərin tez-tez göndərilməsi zamanı yüklənmiş faylları cihazda keşləmək tövsiyə olunur. FileManager genişləndirmənin keş kataloquna girişi təmin edir, bu kataloq işəsalmalar arasında saxlanılır. Bu, sonrakı bildirişlərin emal müddətini qısaldır və şəbəkə yükünü azaldır. Apple-a görə, qoşmaların keşlənməsi emal müddətini tam yükləmə əvəzinə 2–5 saniyəyə qədər azalda bilər.

UNNotificationContentExtension: fərdi interfeys

UNNotificationContentExtension standart bildiriş bannerini Interface Builder və ya SwiftUI-də yaradılmış fərdi interfeyslə əvəz etməyə imkan verir. Genişləndirmə istifadəçi bildirişlə hərəkət etdikdə aktivləşir: toxunma, aşağı sürüşdürmə və ya 3D Touch. Content Extension Service Extension tərəfindən artıq emal edilmiş məzmunu alır və onu fərdi görünüşdə göstərir.

Storyboard və bildiriş kateqoriyaları

Hər bir Content Extension Info.plist vasitəsilə bir və ya bir neçə bildiriş kateqoriyasına bağlanır. Kateqoriya server tərəfindən APNS payload-unda category sahəsi ilə müəyyən edilir. Sistem alınan bildirişin kateqoriyası əsasında lazımi genişləndirməni avtomatik seçir. İnterfeys standart UIKit komponentləri və ya SwiftUI View istifadə edərək storyboard vasitəsilə qurulur.

İstifadəçi hərəkətlərinin emalı

Content Extension UNNotificationAction-da müəyyən edilmiş fərdi düymələri və toxunma emalçılarını dəstəkləyir. UNNotificationAction kateqoriyanın qeydiyyatı mərhələsində yaradılır və UNTextInputNotificationAction vasitəsilə mətn daxiletmə ola bilər. İstifadəçi düyməni basdıqda, genişləndirmə hərəkət identifikatoru ilə didReceive callback-i alır və müvafiq məntiqi yerinə yetirə bilər — URL açmaq, serverə sorğu göndərmək və ya interfeysi yeniləmək.

Performans məhdudiyyətləri

Content Extension öz icra dövrü və təxminən 50 MB yaddaş limiti ilə izolyasiya edilmiş prosesdə işləyir. Genişləndirmənin performansı kritikdir, çünki sistem watchdog limitlər aşıldıqda prosesi dayandırır. Content Extension daxilində ağır hesablamalardan, böyük şəkillərin yüklənməsindən və uzunmüddətli şəbəkə sorğularından qaçınmaq tövsiyə olunur.

Media qoşmaları və UNNotificationAttachment

UNNotificationAttachment push bildirişinə media faylı əlavə edən obyektdir: şəkil, video, audio və ya GIF. Qoşma genişləndirmənin qum qutusunda yerləşməli olan yerli fayl URL-indən yaradılır. Qoşmanın maksimum ölçüsü 10 MB-dan çox olmamalıdır, əks halda sistem attachment yaradılmasını rədd edəcək.

Dəstəklənən formatlar

Apple media qoşmaları üçün məhdud format dəsti dəstəkləyir. Şəkillər — JPEG, PNG, GIF (animasiyalı daxil olmaqla), TIFF. Video — MPEG, MP4, MOV maksimum 30 saniyə müddəti ilə. Audio — MP3, AAC, WAV, CAF. Hər bir format üçün növü UNNotificationAttachmentOptionsTypeHintKey vasitəsilə göstərmək olar ki, bu da sistemə faylı düzgün emal etməyə kömək edir.

Qoşmanın şəbəkədən yüklənməsi

Push payload yalnız URL ehtiva etdiyi üçün, faylın özü deyil, qoşmanın yüklənməsi Service Extension daxilində aparılmalıdır. Maksimum yükləmə vaxtı 30 saniyə ilə məhdudlaşdırılıb, buna görə minimal parametrlərlə URLSession istifadə etmək və zəif siqnal olduqda yükləməni söndürmək tövsiyə olunur. Qoşma vaxtında yüklənməzsə, bildiriş media olmadan göstərilir — bu sistemin standart davranışıdır.

Swift-də tətbiq nümunəsi

Notification Extension-in şəkil yükləyən, onu endirən və bildirişə əlavə edən tam nümunəsini nəzərdən keçirək. NotificationService UNNotificationServiceExtension-dən miras alır və didReceive metodunu ləğv edir. Nümunədə isteğe bağlı sahələrin emalı, attachment yaradılması və dəyişdirilmiş məzmunla completion handler-in çağırılması göstərilir.

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

Genişləndirmə üçün Info.plist-in konfiqurasiyası

Genişləndirmənin düzgün işləməsi üçün bildiriş kateqoriyalarını Info.plist-də qeydiyyatdan keçirmək lazımdır. NSExtensionPointIdentifier açarı Service Extension üçün com.apple.usernotifications.service və ya Content Extension üçün com.apple.usernotifications.content olaraq təyin edilir. Kateqoriyalar AppDelegate-də tətbiq işə salındıqda UNUserNotificationCenter vasitəsilə müəyyən edilir və genişləndirmə yalnız payload-da müvafiq kateqoriyası olan bildirişlər üçün aktivləşir.

Tez-tez verilən suallar

Service Extension Content Extension-dan nə ilə fərqlənir?

Service Extension bildiriş göstərilməzdən əvvəl məzmunu dəyişdirir — media əlavə edir, mətni dəyişir, məlumatları deşifrə edir. Content Extension istifadəçi qarşılıqlı əlaqəsindən sonra bildiriş interfeysini fərdi ilə əvəz edir. Service Extension göstərilməzdən əvvəl işləyir, Content Extension — sonra.

Service Extension-da emal üçün nə qədər vaxt verilir?

Sistem 30 saniyə ayırır didReceive-də kodun icrası üçün. Emal bu müddətdə bitməzsə, serviceExtensionTimeWillExpire çağırılır, burada cari nəticəni ötürmək lazımdır. Qoşmaların yüklənməsini nəzərə alaraq 10–15 saniyəyə sığmaq tövsiyə olunur.

Content Extension-da SwiftUI istifadə etmək olar?

Bəli, SwiftUI iOS 16-dan etibarən Content Extension-da dəstəklənir. View UIHostingController-ə bükülür və storyboard-a əlavə edilir. Lakin yaddaş məhdudiyyətləri səbəbindən SwiftUI-dən yalnız minimal elementlərlə sadə interfeyslər üçün istifadə etmək tövsiyə olunur.

Qoşma yükləmə xətalarını necə emal etməli?

Yükləmə xətası və ya vaxt limitinin aşılması halında sadəcə attachment olmadan orijinal məzmunla completion handler-i çağırın. Sistem bildirişi media olmadan standart formada göstərəcək. Diaqnostika üçün xətaları OSLog vasitəsilə qeyd edin, lakin bildirişin göstərilməsini bloklamayın.

Notification Extension-un yaddaş məhdudiyyətləri hansılardır?

Genişləndirmə təxminən 50 MB limiti ilə izolyasiya edilmiş prosesdə işləyir. Limit aşıldıqda sistem watchdog vasitəsilə prosesi dayandırır. Böyük faylların yüklənməsindən, şəkillərin yaddaşda saxlanmasından və URLSession ilə işləyərkən sızmalardan qaçının.

Nəticə

  • Notification Extension — push bildirişlərini dəyişdirmək üçün iOS mexanizmi, Service Extension (məzmun) və Content Extension (interfeys) daxil olmaqla.
  • Service Extension bildiriş göstərilməzdən əvvəl payload-u 30 saniyə limiti ilə emal edir, media qoşmaları əlavə edə və məlumatları deşifrə edə bilər.
  • Content Extension standart banneri UIKit və ya SwiftUI vasitəsilə interaktiv düymələr dəstəyi ilə fərdi interfeyslə əvəz edir.
  • UNNotificationAttachment bildirişə şəkillər, video və audio əlavə edir, JPEG, PNG, MP4, MP3 və digər formatları dəstəkləyir.
  • Genişləndirmələrin qeydiyyatı NSExtensionPointIdentifier və aktivləşdirmə üçün bildiriş kateqoriyaları göstərilməklə Info.plist vasitəsilə aparılır.
  • Məhdudiyyətlər — 50 MB yaddaş limiti, əsas tətbiqə girişi olmayan izolyasiya edilmiş qum qutusu, məhdud icra müddəti.
  • Notification Extension iOS-da istifadəçi bildirişlərini zənginləşdirmək, push kommunikasiyalarında cəlbediciliyi və funksionallığı artırmaq üçün əsas vasitədir.

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.

Layihəni müzakirə et

Həm də oxuyun