[swift] Swift에서 로컬 알림을 특정 조건을 만족할 때만 발생하도록 설정하는 방법

로컬 알림은 앱 사용자에게 중요한 정보나 알림을 전달하는데 사용됩니다. 때때로, 특정 조건을 만족할 때만 로컬 알림을 발생시켜야 할 때가 있을 수 있습니다. Swift에서는 이러한 조건을 처리할 수 있는 기능들을 제공하고 있습니다.

1. UNUserNotificationCenterDelegate 설정

로컬 알림의 특정 조건을 처리하려면 UNUserNotificationCenterDelegate 프로토콜을 준수하는 클래스에서 알림 처리 메서드를 구현해야 합니다.

class NotificationDelegate: NSObject, UNUserNotificationCenterDelegate {
    // 알림이 표시될 때 호출됨
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        // 알림을 표시하지 않도록 설정
        completionHandler([])
    }
    
    // 알림이 탭되었을 때 호출됨
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        // 알림에 대한 추가 처리 로직 구현
        completionHandler()
    }
}

2. 특정 조건 확인

로컬 알림이 발생해야 하는 특정 조건을 확인하기 위해서는 여러 방법이 있습니다. 예를 들어, 특정 시간이나 위치에 도달했거나 특정 이벤트가 발생했는지 확인할 수 있습니다. 여기에서는 시간에 기반한 조건을 예로 들어보겠습니다.

func scheduleLocalNotification() {
    // 현재 시간
    let currentDate = Date()
    // 알림을 발생시키고자 하는 시간 (10초 후)
    let fireDate = currentDate.addingTimeInterval(10)
    
    // 알림 콘텐츠 생성
    let content = UNMutableNotificationContent()
    content.title = "로컬 알림"
    content.body = "알림 내용"
    
    // 알림 트리거 생성
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: fireDate.timeIntervalSinceNow, repeats: false)
    
    // 알림 요청 생성
    let request = UNNotificationRequest(identifier: "localNotification", content: content, trigger: trigger)
    
    // 알림 스케줄링
    let center = UNUserNotificationCenter.current()
    center.add(request) { (error) in
        if let error = error {
            print("로컬 알림 스케줄링 에러: \(error.localizedDescription)")
        }
    }
}

위 예제에서는 현재 시간으로부터 10초 후에 알림이 발생하도록 설정하였습니다.

3. 특정 조건을 만족할 때 알림 발생

로컬 알림이 발생해야 하는 특정 조건을 만족함을 확인한 후, 알림을 발생시킬 수 있습니다.

// 특정 조건이 충족되었을 때 로컬 알림 발생
if conditionIsMet {
    scheduleLocalNotification()
}

conditionIsMet은 특정 조건이 충족되었는지 여부를 확인하는 불리언 값입니다. 조건이 충족되었을 때 scheduleLocalNotification() 메서드를 호출하여 알림을 발생시킬 수 있습니다.

4. UNUserNotificationCenterDelegate 설정 적용

로컬 알림 발생 조건을 확인하기 위해 만든 NotificationDelegate 클래스를 UNUserNotificationCenter에 설정하여 알림 처리를 수행하도록 해주어야 합니다.

let notificationDelegate = NotificationDelegate()
UNUserNotificationCenter.current().delegate = notificationDelegate

위와 같이 앱이 시작될 때 UNUserNotificationCenterDelegate 프로토콜을 준수하는 NotificationDelegate 인스턴스를 생성하고, UNUserNotificationCenter.current().delegate에 할당하여 알림 처리를 위임할 수 있습니다.

결론

Swift에서 로컬 알림을 특정 조건을 만족할 때만 발생시키기 위해서는 UNUserNotificationCenterDelegate를 활용하여 알림 처리 메서드를 구현하고, 특정 조건을 확인한 후 알림을 발생시키는 방법을 사용할 수 있습니다. 이를 통해 사용자에게 필요한 정보를 적절한 타이밍에 전달할 수 있습니다.