[swift] Swift에서 로컬 알림을 특정 일주일 중 특정 요일에만 발생하도록 설정하는 방법

로컬 알림은 iOS 앱에서 사용자에게 시간 또는 장소에 대한 알림을 전달하는 데 사용될 수 있는 강력한 기능입니다. 앱에서 특정 일주일 중 특정 요일에만 알림을 발생시키도록 설정하려면 아래의 방법을 따라해 보세요.

1. UNUserNotificationCenterDelegate 설정

로컬 알림을 사용하기 위해 가장 먼저 해야 할 일은 앱 델리게이트에서 UNUserNotificationCenterDelegate 프로토콜을 준수하도록 설정하는 것입니다. AppDelegate.swift 파일에 아래의 내용을 추가하세요.

import UserNotifications

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 앱이 시작될 때 사용자에게 알림 권한을 요청
        UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
            // 알림 권한 요청 후에 필요한 처리
        }
        UNUserNotificationCenter.current().delegate = self
        return true
    }
}

위의 코드에서 UNUserNotificationCenterDelegate 프로토콜을 준수하도록 AppDelegate 클래스를 확장했으며, UNUserNotificationCenter.current().delegate 속성을 AppDelegate 객체로 설정하고 있습니다.

2. 알림 생성

특정 요일에만 알림을 발생시키려면 알람 생성 시에 UNCalendarNotificationTrigger를 사용하여 요일을 필터링하십시오. 아래의 예제 코드를 참고하세요.

func scheduleNotification() {
    let content = UNMutableNotificationContent()
    content.title = "주간 알림"
    content.body = "오늘은 특별한 요일입니다!"
    
    var dateComponents = DateComponents()
    dateComponents.weekday = /* 여기에 특정 요일을 입력하세요 (1은 일요일, 2는 월요일 등) */
    dateComponents.hour = 10
    dateComponents.minute = 0
    
    let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
    
    let request = UNNotificationRequest(identifier: "WeeklyNotification", content: content, trigger: trigger)
    
    UNUserNotificationCenter.current().add(request) { error in
        if let error = error {
            print("알림 등록 실패: \(error)")
        } else {
            print("알림 등록 성공!")
        }
    }
}

위의 코드에서 dateComponents.weekday에 특정 요일을 입력하여 해당 요일에만 알림을 발생시킵니다. 이 예시에서는 매주 지정한 요일에 알림이 발생하도록 설정하였습니다.

3. 알림 등록

위에서 생성한 알림을 등록하기 위해 알맞은 시점에 scheduleNotification() 함수를 호출하면 됩니다. 앱이 시작될 때 또는 특정 이벤트가 발생했을 때 등을 고려하여 적절한 시점에 호출하세요. 예를 들면, 앱이 시작될 때 application(_:didFinishLaunchingWithOptions:) 메서드 내에서 scheduleNotification() 함수를 호출하는 것이 일반적입니다.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // 앱이 시작될 때 사용자에게 알림 권한을 요청
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
        // 알림 권한 요청 후에 필요한 처리
    }
    UNUserNotificationCenter.current().delegate = self
    
    scheduleNotification() // 알림 등록
    
    return true
}

이렇게 하면 앱이 시작될 때마다 특정 요일에만 알림이 발생하도록 설정할 수 있습니다.

위의 예제는 특정 요일 중 하루에만 알림을 발생시키는 방법을 보여주고 있습니다. 만약 원하는 경우 다수의 요일에 대한 알림을 설정하려면 반복하여 UNCalendarNotificationTriggerUNNotificationRequest 객체를 만들어 추가하면 됩니다.

자세한 내용은 UNUserNotificationCenterUNCalendarNotificationTrigger에 대한 공식 문서를 참조하시기 바랍니다.