from https://www.cnet.com/

IOS’ta Lokal Bildirim Oluşturma

cemal tüysüz
4 min readJan 15, 2022

--

Bildirimler geliştirilen mobil uygulama için büyük önem arz etmektedir. Hatırlatma veya bildirim görevi taşıyan bildirimler kimi zaman da kullanıcıyı uygulamaya çekme konusunda birebirdir.

Bu yazıda IOS işletim sistemlerinde Lokal bildirim oluşturma adımlarına değineceğiz. Hazırsanız başlayalım.

Local Notification

Local bildirimler herhangi bir ağ ortamı ile tetiklenmeyen cihaz içinde kurduğunuz algoritma sonucunda tetiklediğiniz yerel bildirimlerdir.

Basit bir örnek vermek gerekilirse Hatırlatıcı görevinde bir uygulama geliştirdiğimizi hayal edelim. Temele indirgendiğinde bu uygulama kullanıcının kendisine hatırlatılmasını istediği bir olayı kullanıcıya bildirimler göndererek hatırlatabilir. Bunun için kullanıcıdan olay ve zamanı almak yeterlidir. Bu iki bilgi alındığında gerisi zamana bırakılır ve uygun zaman geldiğinde bildirim gönderilir. Söz konusu bu olaylar gerçekleşirken sistem dışarıya bağımlı değildir. Kendi içinde çalışır.

Şimdi sizlerle beraber basit arayüze sahip tek sayfalık bir uygulama geliştireceğiz. Uygulamaya bir olay ve bir de tarih vereceğiz. Uygulama bizler için verilen tarih geldiği zaman gün içerisinde sabit bir saatte bildirim gönderecek.

Tasarımın Oluşturulması

Local Notification UI

Not : DatePicker ‘in uygulama çalıştırıldığında da böyle gözükmesini istiyorsanız @IBOutlet olarak bağladıktan sonra tercih edilen Date Picker stilini .wheels olarak ayarlamanız gerekiyor.

Tasarım kısmımız gayet basit olmakla beraber içerisinde 4 adet widget barındırıyor. Kullanıcıdan başlık ve içerik bilgilerini almak amacı ile 2 adet TextField, tarih bilgisini almak amacı ile bir adet DatePicker ve son olarak bütün bunların işleme konulması için bir adet Button widgetimiz olacak.

Kullanıcıdan izin isteme

Kullanıcıya bildirim gönderebilmemiz için kullanıcıdan izin almamız gerekir.

Bildirimlerle alakalı gerekli sınıfları kullanabilmemiz için UserNotifications ‘ ı import ediyoruz.

İzin kontrol-isteme kısmını viewDidLoad kısmında yani uygulama yüklendikten sonra çalışacak olan lifecycle methodu altında gerçekleştirdim. Siz dilerseniz bunu algoritmanıza göre başka bir yerde kullanabilirsiniz.

UNUserNotificationCenter sınıfı bir nevi koordinatör görevi görür. Bu sınıftan anlık bir referans alıyorum. Sonrasında bu referansı kullanarak yetkilendirme için bir izin istiyorum.

Bu yapı kullanıcıya sadece bir defa gösterilir. Kullanıcı red cevabı verse dahi bir daha sorulmaz. Kullanıcı ikinci bir izin değişikliğini ayarlar kısmından gerçekleştirir.

Closure yapısında bulunan granted değişkeni bool tipinde bir değişken olup izin var ise true eğer izin yoksa false değerlerini döndürür.

Options kısmında ise bildirim gönderirken kullancağımız yapıları veriyoruz.

Bildirim içeriğini oluşturma

Bildirim içeriğini oluşturma kısmını kullanıcı Button’a tıklayınca oluşturacağız. Bunun için kodlarımızı bu kapsamda yazacağız ve kullanıcının bildirimleri kabul ettiğini varsayarak devam edeceğiz.

UNMutableNotificationContent sınıfı ile bildirim içeriğimi oluşturacağım. Title referansına bildirim başlığını ve body referansına bildirimin içeriğini tanımlıyorum. Badge kısmı ise uygulama üzerinde bildiri sayısını gösteren rozeti temsil ediyor.

Bildirim İçin Tetikleyici Oluşturmak

Bu kısımda bildirimin gönderilmesi için bir tetikleyici (Trigger) oluşturmamız gerekiyor. Tetikleyici oluşturmak için birden fazla seçenek bulunmakta. Aşağıdaki listede farklı tetikleyici sınıfları görebilirsiniz.

  • UNTimeIntervalNotificationTrigger : Belirttiğiniz süre geçtikten sonra bildiriminiz fırlatılır.
  • UNCalendarNoticationTrigger : Belirttiğiniz tarih ve saatte bildirim fırlatılır.
  • UNLocationNotificationTrigger : Cihaz belirttiğiniz lokasyona girdiğinde veya çıktığında bildirim fırlatılır.
  • UNPushNotificationTrigger : Apple Anında Bildirim Hizmetinin (APN’ler) bildirimi gönderdiğini belirten bir tetikleme koşulu. Apple Anında Bildirim hizmetinin (APN’ler) bildirimi gönderdiğini belirten bir tetikleme koşulu.

Biz kullanıcıdan bir tarih alarak sabit bir saatte bildirim göndereceğimiz için UNCalendarNoticationTrigger sınıfını kullancağız.

Öncelikle kullanıcının Date Picker ile seçim yaptığı tarihi almamız gerekiyor. Hemen sonrasında zaman kısmını biz kendimiz sabah saat 8:00 için veriyor olacağız. Tarih kısımları bittikten sonra bir tetikleyici oluşturuyoruz. DateMatching kısmına koşul zamanı ve repeats kısmına bu tetikleyicinin tekrar edip etmeyeceği bilgisini bool veri tipi ile veriyoruz.

İstek Oluşturmak

Son olarak bir istek oluşturup bu isteği notification center’ a ileteceğiz.

İleteceğimiz bildirim için tanımlayıcı görevi görecek unique bir string oluşturuyoruz. UNNotificationRequest sınıfı ile bir istek yaratıyoruz. Bu adıma kadar oluşturduğumuz her kriteri parametre olarak veriyoruz.

Ardından UNUserNotificationCenter’a bu isteğimizi iletiyoruz.

Ön Planda Bildirim Gönderme

Şu ana kadar yaptığımız kodlama ile uygulama arkaplanda veya destroy olmuşken bildirimleri alabiliyoruz. Uygulamamız açık iken bildirim alamıyor yada kullanıcının bildirim ile nasıl etkileşime geçtiğini bilmiyoruz. Bunları yapabilmek için küçük bir kaç ekleme yapmamız gerekecek.

Bunun için UNUserNotificationCenterDelegate protokolünü kalıtım olarak almamız gerekiyor.

Kalıtım için bir extension oluşturdum. Sonrasında willPresent parametresine sahip userNotificationCenter fonksiyonunu çağırdım.

WillPresent parametresine sahip fonksiyon developer’a bildirim ön planda gösterilecek iken bildirimin nasıl ele alınması gerektiğini sorar. Biz bu kısımda .alert yerine .banner yazmamızın haricinde başka bir değişiklik yapmayacağız.

Aslında bu kısma kadar bildirim ön planda görüntülenebiliyor lakin yayınladığınız bildirim ile beraber yaptığınız badge değerini düzeltmemiz veya kullanıcının bildirime nasıl bir tepki verdiğini öğrenmemiz için didReceive parametresine sahip bir diğer fonksiyonu çağırıyoruz.

Bu fonksiyon bizlere teslim edilen bir bildirime kullanıcının nasıl tepki verdiğini gösterir. Kullanıcı bildirime tıkladığı anda bu method tetiklenecektir. Fonksiyon içerisinde oluşturduğum UIApplication.shared referansı bizlere uygulamanın hangi durumda olduğunu ifade edecektir. Bu referans ile uygulamanın .active (önplanda) veya .inactive (Arkaplan veya destroy olmuş) statelerinden hangisine sahip olduğunu öğrenebilir buna göre işlemler gerçekleştirebiliriz.

Aynı referans ile uygulamanın anlık badge numarasına erişebilir ve bu numarayı değiştirebilirsiniz.

Bir sonraki yazıda görüşmek dileği ile sağlıcakla kalın.

--

--