[swift] FSCalendar에서 특정 날짜의 이벤트 추가 시 알림 기능
FSCalendar은 iOS에서 캘린더 UI를 구현하기 위한 오픈 소스 라이브러리입니다. 이 라이브러리를 사용하여 특정 날짜에 이벤트를 추가하고, 추가된 이벤트에 대해 알림 기능을 구현하는 방법을 알아보겠습니다.
알림 추가하기
- FSCalendar를 프로젝트에 설치합니다. CocoaPods를 사용한다면, Podfile에 다음과 같이 FSCalendar를 추가해줍니다.
pod 'FSCalendar'
- 캘린더를 화면에 추가합니다. 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) {
// 선택된 날짜에 이벤트를 추가하고, 알림 설정을 등록하는 로직을 작성합니다.
// ...
} } ```
알림 설정하기
- UserNotifications 프레임워크를 import합니다.
import UserNotifications
- 선택된 날짜에 이벤트를 추가하고, 알림 설정을 등록하는 메서드를 작성합니다.
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