Yerel Uyarılar (Local notifications) | Geleceği Yazanlar
Yerel uyarılar tıpkı uzaktan uyarılar gibi çeşitli parametreler taşıyabilirler. NSDictionary tipinde belirlenen parametrelerle yerel uyarı harekete geçtiğinde kullanıcıya mesaj vermenin dışında başka işlemler de gerçekleştirmesini sağlayabilirsiniz. Yerel uyarıcılar aynı zamanda rozet (badge) adı verilen özelliğe sahiptir. Bu rozetler aslında iOS ana ekranında uygulama ikonunun sağ üzerinde çıkan kırmızı yuvarlak içerisindeki rakamlardır ve kullanıcıya uygulamada onu bekleyen bir mesaj olduğunu hatırlatır. Bu şekilde uygulamanız diğer uygulamalar arasından kullanıcıya kendini gösterir.
Bu bölümde oldukça basit bir hatırlatma uygulaması yapacağız. Uygulamanın görevi, kullanıcının gireceği bir metin değerinin belirli bir süre sonra ekrana getirilerek bir hatırlatma yapılması olacak. Bu amaçla ilk olarak bir SingleView uygulama oluşturarak ekrana kullanıcının metin girebileceği bir UITextView öğesi ekliyoruz. Aynı zamanda hatırlatıcı süresinin belirlenmesi için bir UIStepper da koyuyoruz. UIStepper, üzerinde artı / eksi tuşları bulunan ve kullanıcının genelde bir sayıyı arttırmak için kullandığı bir görsel öğedir. Son olarak ekleyeceğimiz düğme (UIButton) hatırlatmayı sisteme kayıt etmek için kullanılacak.
Ekran tasarımını aşağıdaki gibi oluşturalım:
Bir sonraki adımda daha önceki bölümlerden hatırlayacağınız gibi Interface Builder elemanlarını ve aldıkları aksiyonları tanımlıyoruz:
@interface ViewController : UIViewController <UITextViewDelegate>
@property (nonatomic, assign) int minutes;
@property (nonatomic, retain) IBOutlet UILabel *dateLabel;
@property (nonatomic, retain) IBOutlet UITextView *remainderText;
- (IBAction) setRemainder:(id)sender;
- (IBAction) stepperChange:(id)sender;
stepperChange metodu UIStepper öğesinin Value Changed aksiyonu ile tetiklenir ve hatırlatıcının kaç dakika sonrasına kurulacağını belirler. dateLabel kullanıcı dostu bir mesajla hatırlatıcının kaç dakika sonra çalacağını söyler. remainderText ise kullanıcıdan gelen metni barındıran öğedir.
Şimdi bu fonksiyonları ayrıntılı olarak inceleyelim:
- (IBAction) stepperChange:(id)sender
UIStepper *stepper = (UIStepper *) sender;
minutes = stepper.value;
dateLabel.text = [NSString stringWithFormat:@"%d dakika sonra",minutes];
stepperChange metodu UIStepper tarafından tetikleneceğinden sender değişkeni aslında UIStepper’ı işaret edecektir. value değeri UIStepper’ın o anlık değerini belirtir. Interface Builder ile buradaki değeri 1 - 100 arasında seçtiğimizden negatif değerler içermeyecektir. stepperChange aynı zamanda dateLabel içerisindeki metin değerini de güncelleyerek kullanıcıya kaç dakika sonra hatırlatma yapılacağını söyler.
- (IBAction) setRemainder:(id)sender
NSDate *remainderDate = [NSDate date];
notification.fireDate = [remainderDate dateByAddingTimeInterval:60 * minutes];
notification.alertBody = [remainderText text];
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"turkcell" forKey:@"turkcell_remainder"];
setRemainder hatırlatmanın kurulacağı metoddur. Hatırlatmalar bir UILocalNotification sınıfıdır ve UIApplication içerisinde yer alan hatırlatma sistemine scheduleLocalNotification metodu ile kayıt edilirler. Burada değerini belirtmeniz gereken başlıca özelliklerden fireDate hatırlatıcının ne zaman tetikleneceğini belirtir ve NSDate sınıfından bir değerdir. Burada dateByAddingTimeInterval ile kullanıcının belirttiği dakika değerini o anki zaman değerine ekleyerek hatırlatıcının harekete geçeceği tarihi belirtiyoruz. alertBody ekrana gelen hatırlatıcının mesajı oluyor. soundName ile hatırlatıcının hangi sesi çalacağını belirtirken applicationIconBadgeNumber uygulama ikonunun sağ üst köşesinde çıkacak rakam değerini değiştiriyor. Son olarak eğer hatırlatıcı ile beraber kendimize özel parametreler göndermemiz gerekiyorsa bir NSDictionary sınıfıyla bunları gönderiyoruz. Burada turkcell_remainder anahtarıyla turkcell değeri gönderilmiş.
Hatırlatıcı ile birlikte gönderilen NSDictionary değerine ulaşmak için AppDelegate içerisinde aşağıdaki metodu çalıştırmanız gerekir: