Yerel bildirim, uygulamanın uzak bir sunucuya ihtiyaç duymadan kullanıcıya gönderdiği bir mesajdır. Tüm veriler doğrudan alıcının cihazında işlenir ve görüntülenir. Bu mekanizma, uygulama arka plondayken veya kapalıyken hatırlatıcılar, zamanlayıcılar ve alarmlar için uygundur. Apple Developer Documentation'a göre UNUserNotificationCenter, iOS'ta yerel bildirimlerin merkezi yönetimini sağlar.
Önemli Noktalar
Yerel bildirim, uygulamanın yüklü olduğu aynı cihazda işletim sistemi tarafından oluşturulan ve görüntülenen bir tetikleyici mesajdır. Push bildirimlerinin aksine, yerel bildirimler harici bir sunucudan geçmez — tüm planlama mantığı istemcide çalışır.
Bu bildirimler, uygulamanın durumundan bağımsız olarak çalışır: aktif, küçültülmüş veya tamamen kapatılmış. İşletim sistemi, planlanan zamanda teslimatı hallederken, geliştirici yalnızca içeriği ve tetikleyiciyi belirtir.
Sistem, ağ bağlantısı olmasa bile yerel bildirimin teslimini garanti eder. Bu, sabit bir internet bağlantısı ve çalışan bir sunucu gerektiren push bildirimlerine kıyasla önemli bir avantajdır.
Her yerel bildirim üç bölümden oluşur: içerik (başlık, gövde, ses), tetikleyici (zaman veya konum koşulu) ve istek tanımlayıcısı. Tanımlayıcı, bildirimin teslimattan önce iptal edilmesine veya güncellenmesine olanak tanır.
Bir geliştirici, iOS'ta uygulama başına 64'e kadar yerel bildirim ve Android'de sınırsız sayıda planlayabilir. Bu fark, işletim sistemlerinin mimari kısıtlamalarından kaynaklanmaktadır.
Her iki platform da yerel bildirimlerle çalışmak için kendi API'lerini sağlar. iOS'ta merkezi bileşen UNUserNotificationCenter, Android'de ise NotificationManager'dır. Farklı arayüzlere rağmen mantık aynıdır: uygulama bir istek oluşturur, sisteme kaydeder ve işletim sistemi planlanan zamanda bildirimi teslim eder.
iOS, takvim etkinlikleri için UNCalendarNotificationTrigger, aralıklar için UNTimeIntervalNotificationTrigger ve konum için UNLocationNotificationTrigger kullanır. Android, AlarmManager, WorkManager ve setExact aracılığıyla hassas planlama sunar.
Android 12'den itibaren — SCHEDULE_EXACT_ALARM kullanıcıdan özel izin gerektirir. iOS'ta izin, UNUserNotificationCenter.requestAuthorization aracılığıyla bir kez istenir ve kullanıcı erişim düzeyini seçer: banner'lar, sesler, rozetler.
Yerel bildirimler, içeriğe göre değil tetikleyici türüne göre sınıflandırılır. Her tür, bildirimin kullanıcıya ne zaman ve hangi koşullarda gösterileceğini belirler.
iOS ve Android'de tetikleyici türleri farklı şekilde uygulanır, ancak mantıksal sınıflandırma aynıdır. iOS, tarihler için UNCalendarNotificationTrigger, aralıklar için UNTimeIntervalNotificationTrigger ve konum için UNLocationNotificationTrigger kullanır. Android, setExact ve setRepeating ile AlarmManager'ın yanı sıra ertelenmiş görevler için WorkManager sunar.
| Tetikleyici türü | Açıklama | Örnek |
|---|---|---|
| Zaman aralığı | Başlatmadan N saniye sonra bildirim | Geri sayım zamanlayıcısı |
| Takvim tarihi | Belirli bir saat ve tarihte bildirim | Toplantı hatırlatıcısı |
| Konum | Bir bölgeye girerken/çıkarken bildirim | Mağaza hatırlatıcısı |
| Anında | API çağrısında anında teslimat | İndirme bildirimi |
iOS ayrıca UNNotificationAttachment'ı da destekler — bildirim gövdesine bir resim, ses veya video ekleme. Android, NotificationCompat.Style aracılığıyla düğmeler ve büyük resimler içeren özel şablonları destekler.
Tetikleyici seçimi senaryoya bağlıdır: takvim hatırlatıcıları takvim tetikleyicileriyle, konum hatırlatıcıları konumla en iyi şekilde çalışır. Aralık tetikleyicileri, sabit süreli yinelenen etkinlikler için uygundur.
iOS'ta, uygulama kapalıyken bile yerel bildirimler sistem tarafından teslim edilir — UNUserNotificationCenter sırayı bağımsız olarak yönetir. Android'de teslimat, seçilen mekanizmaya bağlıdır: AlarmManager ekran kapalıyken bile çalışırken, WorkManager güç tasarrufunu dikkate alır.
Yerel bildirimler, harici altyapının aşırı veya kullanılamadığı görevleri çözer. Ana senaryolar: hatırlatıcılar, zamanlayıcılar, kullanıma başlama ipuçları ve ertelenmiş eylemler.
Localytics araştırmaları, yerel hatırlatıcıları kullanan uygulamaların kurulumdan sonraki ilk haftada %35 daha fazla kullanıcıyı elde tuttuğunu göstermektedir. Bu, yerel bildirimleri güçlü bir kullanıma başlama aracı haline getirir.
Sıklığı kötüye kullanmamak önemlidir — sistem aynı uygulamadan gelen bildirimleri gruplandırır ve kullanıcı rahatsız edici hale gelirse tüm yerel bildirimleri devre dışı bırakabilir. Kritik olmayan etkinlikler için ideal sıklık günde 2-3 bildirimi geçmemelidir.
Android'de yerel bir bildirim planlamak için AlarmManager ile birlikte NotificationManager kullanın. Android 8+'da önce bir bildirim kanalı oluşturmalısınız, aksi takdirde bildirim görüntülenmez.
val channelId = "reminder_channel"
val notificationId = "task_reminder_42"
val channel = NotificationChannel(
channelId,
"Hatırlatıcılar",
NotificationManager.IMPORTANCE_HIGH
).apply {
description = "Görev hatırlatıcıları için kanal"
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
val intent = Intent(this, ReminderReceiver::class.java).apply {
putExtra("notification_id", notificationId)
putExtra("channel_id", channelId)
}
val pendingIntent = PendingIntent.getBroadcast(
this, notificationId.hashCode(),
intent, PendingIntent.FLAG_UPDATE_CURRENT
)
val alarmManager = getSystemService(AlarmManager::class.java)
alarmManager.setExact(
AlarmManager.RTC_WAKEUP,
triggerTimeMillis,
pendingIntent
)
Android 12+'da, setExact'i çağırmadan önce SCHEDULE_EXACT_ALARM iznini kontrol edin. İzin verilmemişse — bir zaman penceresi içinde teslimatı garanti eden setWindow'u kullanın.
AlarmManager tetiklendiğinde, sistem BroadcastReceiver tarafından alınan bir yayın Intent'i gönderir. Bunun içinde, NotificationManager aracılığıyla bildirimi oluşturmanız ve göstermeniz gerekir. PendingIntent'in FLAG_UPDATE_CURRENT kullandığından emin olun, aksi takdirde veriler değiştiğinde eski bildirimler güncelliğini yitirmiş Intent'i kullanmaya devam eder.
iOS'ta, yerel bildirimler UNUserNotificationCenter aracılığıyla UNMutableNotificationContent ve tetikleyicilerden biri kullanılarak oluşturulur. Planlamadan önce kullanıcıdan izin almanız gerekir.
import UserNotifications
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
guard granted else { return }
}
let content = UNMutableNotificationContent()
content.title = "Görev hatırlatıcısı"
content.body = "Raporu 18:00'a kadar tamamlamayı unutmayın"
content.sound = .default
content.userInfo = ["task_id": "42"]
let trigger = UNTimeIntervalNotificationTrigger(
timeInterval: 3600,
repeats: false
)
let request = UNNotificationRequest(
identifier: "task_reminder_42",
content: content,
trigger: trigger
)
center.add(request)
iOS, aynı anda 64'e kadar yerel bildirim isteğini destekler. Sınır aşılırsa, aktif istekler teslim edilene veya iptal edilene kadar sistem yeni istekleri reddeder. Geçerli sırayı kontrol etmek için getPendingNotificationRequests kullanın.
Bir kullanıcı iOS'ta yerel bir bildirimle etkileşime girdiğinde, UNUserNotificationCenterDelegate temsilcisinin userNotificationCenter:didReceive response yöntemi çağrılır. Bu yöntem, istek tanımlayıcısını, actionIdentifier'ı (hangi düğmeye basıldı) ve özel userInfo'yu sağlar. Bu, basit bir bildirim açma ile belirli bir eylem düğmesine basma arasında ayrım yapmayı sağlar.
Yerel bildirimlerin sinir bozucu değil yararlı olması için birkaç önemli kurala uyun. Birincisi: sıklığı kontrol edin — kritik olmayan etkinlikler için günde 2-3 bildirimi geçmeyin, aksi takdirde kullanıcı tüm uygulama bildirimlerini devre dışı bırakır.
İkincisi: kullanıcıya seçenek verin. Arayüzde belirli yerel bildirim türlerini devre dışı bırakma özelliği ekleyin. Android'de bunun için düşük öneme sahip ayrı bir NotificationChannel kullanın; iOS'ta uygulama ayarlarında ayrı bir kategori kullanın.
Üçüncüsü: bağlamsal uygunluk — bildirim, kullanıcının ihtiyacı olduğunda görünmelidir. Konum tetikleyicileri eve yakın hatırlatıcılar için idealdir, takvim tetikleyicileri toplantılar için, aralık tetikleyicileri su içme veya esneme gibi düzenli aktiviteler için uygundur. Gereksiz yere türleri karıştırmayın.
Dördüncüsü: gerçek cihazlarda test edin. iOS simülatörü, özellikle arka planda olmak üzere yerel bildirim teslimatının tüm senaryolarını simüle etmez. Android'de, planlanmış bildirimlerin sırasını ve parametrelerini kontrol etmek için adb shell dumpsys notification kullanın. Beşincisi: kullanıcıya her zaman uygulama arayüzü aracılığıyla bildirimleri devre dışı bırakma olanağı sağlayın — bu, UX ve App Store İnceleme Yönergeleri'nin zorunlu bir gerekliliğidir.
Sıkça sorulan sorular
Yerel bildirim, sunucu katılımı olmadan cihaz tarafından planlanır ve teslim edilir. Push bildirimi harici bir hizmet (FCM, APNS) ve internet bağlantısı gerektirir. Yerel bildirimler çevrimdışı çalışır, push bildirimleri yalnızca ağ erişimiyle çalışır.
iOS, aynı anda 64 planlanmış istekle sınırlar. Android'in katı bir sınırı yoktur, ancak 500'den fazla bildirim sistem performansını düşürebilir ve teslimat süresini etkileyebilir.
Evet, iOS'ta istek tanımlayıcısıyla removePendingNotificationRequests kullanın. Android'de NotificationManager.cancel çağırın veya AlarmManager aracılığıyla PendingIntent'i iptal edin. İptal için benzersiz bir tanımlayıcı zorunludur.
iOS'ta, requestAuthorization aracılığıyla izin zorunludur. Android 13+'te (Tiramisu) ayrıca POST_NOTIFICATIONS izni gereklidir. Eski Android sürümleri, yerel bildirimler için açık izin gerektirmez.
iOS'ta bir UNNotificationAction oluşturun ve UNNotificationCategory'ye ekleyin. Android'de, BroadcastReceiver'ı hedefleyen bir PendingIntent ile NotificationCompat.Builder.addAction kullanın. Her düğme uygulamada ayrı bir eylemi tetikler.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun