Sobes.tech
Middle

Bildirim hizmeti uzantısı nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bildirim Servis Uzantısı (Notification Service Extension), iOS uygulamanıza entegre edilen küçük bir çalıştırılabilir tamamlamadır. Bu, uzak push bildiriminin içeriğinin görünümünü, kullanıcının görüntülemeden önce değiştirmeye olanak tanır.

Ana işlevler:

  • İçerik Değişikliği: Bildirimin başlığını, alt başlığını, metnini değiştirme veya ekler (resimler, videolar) ekleme.
  • Şifreli İçeriğin Çözülmesi: Bildirimle birlikte gönderilen şifreli verileri, kullanıcının görmeden önce çözme.
  • Zengin Bildirimler: Bildirim İçeriği Uzantısı (Notification Content Extension) ile birlikte kullanıldığında, bildirimleri göstermek için özel arayüzler oluşturma.

Yaşam döngüsü:

  1. mutable-content: 1 anahtarıyla uzak bildirim alındığında, sistem bildirim servisi uzantısının başlatılmasını sağlar.
  2. didReceive(_:withContentHandler:) yöntemi uygulanır ve burada bildirim işlenir ve değiştirilir.
  3. Değiştirilmiş içerik, contentHandler tamamlayıcı işlevine iletilir.
  4. Sistem, değiştirilmiş bildirimi gösterir.

Kısıtlamalar:

  • Kısa süreli yürütme (genellikle yaklaşık 30 saniye).
  • Sistem kaynaklarına sınırlı erişim.
  • Uzun süreli arka plan görevleri yapamaz.

Temel bir uygulama örneği:

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
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

        if let bestAttemptContent = bestAttemptContent {
            // Bildirim içeriğini burada değiştir...
            bestAttemptContent.title = "\(bestAttemptContent.title ?? "Başlıksız") [değiştirildi]"

            contentHandler(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        // Sistem uzantı sona ermeden hemen önce çağrılır.
        // Bunu, "en iyi deneme" içeriğinizi teslim etmek için bir fırsat olarak kullanın,
        // aksi takdirde orijinal push yükü teslim edilir.
        if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }

}