İçeriğe geç

UNUserNotificationCenter kullanımı

Merhabalar bu yazımda İOS 10 ile birlikte daha zengin bildirimler oluşturmamızı sağlayan UserNotifications kütüphanesinin kullanımını göstereceğim.

Daha zengin bildirimler daha iyi bir kullanıcı deneyimi sağlar. Yeni gelen bildirim sisteminde artık resimleri direkt olarak bildirim üzerinden gösterebiliyor. Hatta interaktif olarak görselleri,videoları,gifleri gösterebilmekteyiz.

Not: Ancak unutmamak gerekir ki bu bildirim sistemi sadece İOS 10 ve üzeri sürümler için kullanılabilir. Eğer uygulamanız market üzerinden daha düşük versiyonlara destek veriyorsa sürüme göre bu sınıfları kullanmanız gerekir.

Bildirim sistemini oluşturma yapısı mantık olarak aynı şekilde ancak daha düzenli bir hale getirilmiş ve sınıflara bölünmüş bir şekilde çalışmakta.

Bildirim sistemini kullanmak için ilk önce kullanıcılardan izin almamız gerekir bu auth işlemi için AppDelegate üzerinden izin alma işlemimizi gerçekleştirelim.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
       
        UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (res, error) in
            if error != nil {
                return
            }
        }
        
        UNUserNotificationCenter.current().delegate = self
        
        
        return true
    }

Bildirime eklenen aksiyonları kontrol etmek için UNUserNotificationCenterDelegate ‘i AppDelegate üzerine eklememiz gerekir.

Daha sonra duruma göre bildirimi tetiklemeniz için aşağıdaki sınıfları kullanabilirsiniz.

  let nContent = UNMutableNotificationContent()
            
            nContent.title = "App"
            nContent.subtitle = "@@@"
            nContent.body = "Hello!"
            nContent.sound = UNNotificationSound.default()
            nContent.categoryIdentifier = "ncategory"
            nContent.threadIdentifier = "123"
            nContent.badge = 1
            

            if let path = Bundle.main.path(forResource: "7", ofType: "png") {
                
                let url = URL(fileURLWithPath: path)
                
                do {
                    let attachment = try UNNotificationAttachment(identifier: "logo", url: url, options: nil)
                    nContent.attachments = [attachment]
                } catch {
                    print("The attachment error!")
                }
            }
            
            let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
            
            let request = UNNotificationRequest(identifier: "notif", content: nContent, trigger: trigger)
            
            let action = UNNotificationAction(identifier: "remind", title: "Remind Latter", options: [])
            let acategory = UNNotificationCategory(identifier: "ncategory", actions: [action], intentIdentifiers: [], options: [])
            
            UNUserNotificationCenter.current().setNotificationCategories([acategory])
            
            UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

UNMutableNotificationContent sınıfı ile bildirimin içeriğini oluşturuyoruz.

UNNotificationAttachment sınıfı ile bildirime görsel vs. ekleme işlemi yapıyoruz.

UNTimeIntervalNotificationTrigger sınıfı ile bildirimin ne zaman tetikleneceğini ayarlıyoruz.

UNNotificationAction sınıfı ile bildirim üzerinde aksiyon butonlar ekleyebiliriz.

UNNotificationCategory eklediğimiz aksiyonları bu sınıf altında topluyoruz.

UNUserNotificationCenter.current().setNotificationCategories([acategory]) işlemi ile aksiyonu bildirim üzerine eklemiş oluyoruz.

UNUserNotificationCenter.current().add(request, withCompletionHandler: nil) işlemi ile oluşturmuş olduğumuz bildirimi etkinleştirmiş oluyoruz.

AppDelegate içerisinde aksiyonları kontrol etmek için delegate üzerinde bulunan fonksiyonu kullanarak kontrol edebiliriz.

 func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        
        if response.actionIdentifier == "remind" {
            print("action action !")
        }
        
    }

 

Tarih:iOS

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca