[swift] FSCalendar에서 특정 날짜의 이벤트 추가 시 알림 기능

FSCalendar은 iOS에서 캘린더 UI를 구현하기 위한 오픈 소스 라이브러리입니다. 이 라이브러리를 사용하여 특정 날짜에 이벤트를 추가하고, 추가된 이벤트에 대해 알림 기능을 구현하는 방법을 알아보겠습니다.

알림 추가하기

  1. FSCalendar를 프로젝트에 설치합니다. CocoaPods를 사용한다면, Podfile에 다음과 같이 FSCalendar를 추가해줍니다.
    pod 'FSCalendar'
    
  2. 캘린더를 화면에 추가합니다. UIViewController에서 FSCalendar 인스턴스를 만들고, view에 추가합니다. ```swift import FSCalendar

class ViewController: UIViewController {

@IBOutlet weak var calendar: FSCalendar!

override func viewDidLoad() {
    super.viewDidLoad()

    calendar.delegate = self
    calendar.dataSource = self
} }

extension ViewController: FSCalendarDelegate, FSCalendarDataSource {

// 캘린더에서 날짜를 탭할 때 호출되는 메서드입니다.
func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) {
    // 선택된 날짜에 이벤트를 추가하는 로직을 작성합니다.
    addEvent(to: date)
}

func addEvent(to date: Date) {
    // 선택된 날짜에 이벤트를 추가하고, 알림 설정을 등록하는 로직을 작성합니다.
    // ...
} } ```

알림 설정하기

  1. UserNotifications 프레임워크를 import합니다.
    import UserNotifications
    
  2. 선택된 날짜에 이벤트를 추가하고, 알림 설정을 등록하는 메서드를 작성합니다.
    func addEvent(to date: Date) {
     let center = UNUserNotificationCenter.current()
        
     // 알림 콘텐츠를 생성합니다.
     let content = UNMutableNotificationContent()
     content.title = "이벤트 알림"
     content.body = "오늘은 이벤트가 있습니다!"
        
     // 알림 시간을 설정합니다.
     let calendar = Calendar.current
     let components = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: date)
     let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: false)
        
     // 알림 요청을 생성합니다.
     let identifier = "eventNotification"
     let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
        
     // 알림을 등록합니다.
     center.add(request, withCompletionHandler: { error in
         if let error = error {
             print("알림 등록 에러: \(error)")
         } else {
             print("알림 등록 성공!")
         }
     })
    }
    

알림 허용 요청하기

앱에서 알림을 사용하기 위해서는 사용자로부터 알림 허용을 요청해야 합니다. AppDelegate.swift 파일에서 다음 코드를 추가하여 앱 실행 시 알림 권한을 요청하도록 설정합니다.

import UIKit
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
            if granted {
                print("알림 권한 허용")
                UNUserNotificationCenter.current().delegate = self
            } else {
                print("알림 권한 거부")
            }
        }
        
        return true
    }
    
    // 앱이 실행 중이거나 백그라운드에서 알림 수신 시 호출될 메서드
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.alert, .sound])
    }
    
    // 알림을 클릭하여 앱을 실행할 때 호출될 메서드
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
        completionHandler()
    }
}

위의 코드를 참고하여 FSCalendar로부터 선택된 날짜에 이벤트를 추가하고 알림을 등록할 수 있습니다. 알림 허용 요청도 함께 수행해야하며, 앱이 실행 중이거나 백그라운드에서 알림을 수신할 때의 동작도 적절히 처리해주어야 합니다.

참고: FSCalendar 공식 문서 https://github.com/WenchaoD/FSCalendar