Tuesday 2 August 2011

iOS 4 ve Local Notification

iOS 4 ile birlikte hayatımıza giren yeniliklerden biri de local notification oldu. Bu sayede server-side'a gerek kalmadan, sertifikaya gerek kalmadan, APN gateway'e bağlanmaya gerek kalmadan client üzerinde notification set edebilecek kod yazabilir hale geldik.

Aşağıda bir local notification set etme örneğini vereceğim. Fakat bunu yazmamdaki asıl amaç basit bir yöntemle local notification'ı silme özelliğini ekleyebilecek bir yol anlatmak.

NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:@"VALUE", @"NOTIFICATION_KEY", nil];

NSString *message = ...;
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.alertBody = message;
notification.timeZone = [NSTimeZone defaultTimeZone];
notification.fireDate = ...;
notification.userInfo = infoDict;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
[notification release];
Bu şekilde notification'ınımızı set ettik. Burada sonra silmek için kullanacağımız kısım userInfo'ya set ettiğimiz değerler. Geri kalanı standart local notification set etme.

Ne için notification set ediyorsak infoDict içindeki VALUE alanına onun unique bir identifier'ını yazabiliriz. Mesela, ben bunu bir kanal programına hatırlatma için kullandım. Dolayısıyla bu VALUE alanına da program'ın id'sini verdim.

Sileceğimiz zaman ise şöyle yapıyoruz:

UIApplication *app = [UIApplication sharedApplication];
NSArray *notificationArray = [app scheduledLocalNotifications];
UILocalNotification *row = nil;
for (row in notificationArray) {
NSDictionary *userInfo = row.userInfo;
NSString *identifier = [userInfo valueForKey:@"NOTIFICATION_KEY"];
if(identifier != nil){
if([identifier isEqualToString:[NSString stringWithFormat:@"%d", program.programId]]) {
[app cancelLocalNotification:row];
}
}
}

No comments: