-
User Notification (2)iOS 2021. 3. 23. 17:48
안녕하세요. 그린입니다!
이번 포스팅에서는 저번에 다룬 User Notification을 직접 사용해보면서 추가로 알게된 정보에 대해 알아보겠습니다🥳
Trigger
: 노티피케이션을 작동시키는 트리거에는 몇가지 종류가 있습니다.
UNTimeIntervalNotificationTrigger(timeInterval: TimeInterval, repeats: Bool) UNLocationNotificationTrigger(region: CLRegion, repeats: Bool) UNCalendarNotificationTrigger(dateMatching: DateComponents, repeats: Bool)
여기서 Time은 정확하게 어느 시간 이후 보내는 것에 대해 설정해줄 수 있습니다.
그리고 Calendar로 설정을 하게되면 특정 지정한 날짜와 시간에 보내줄 수 있습니다.
여기서 Calender 트리거에 대해 좀 더 자세히 알아보겠습니다.
UNCalendarNotificationTrigger
: 우선 파라미터에 인자를 넘겨줄 DateComponents를 설정해줘야합니다.
var dateComponents = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: date)
이렇게 설정해주어 frome: date에 설정할 값을 넣어주면 알림이 구현됩니다.
만약 특정 시간 즉 2021년 3월 23일 9시 30분 45초에 노티피케이션을 만들어 주겠다 한다면 아래와 같이 더 특정하게 설정이 가능합니다.
var dateComponents = Calendar.current.dateComponents([.year, .month, .day], from: date) dateComponents.hour = 9 dateComponents.minute = 30 dateComponents.second = 45
이렇게 설정해준다면 date를 받아와 연월일만 가져다 설정하고 나머지 시간은 특정하게 지정해줄 수 있습니다.
게임 앱이나 다양한 앱에서는 특정 아침 9~10시 시간대에 이런 노티피케이션을 사용하는것 같았습니다.
Local Notification 해제
: 로컬 노티피케이션을 설정하는 방법에 대해서는 저번 포스팅에서 알아봤습니다.
이번에는 설정한 노티피케이션을 해제하는것에 대해 알아보겠습니다.
func removeNofiticaion(name: String) { let center = UNUserNotificationCenter.current() center.removePendingNotificationRequests(withIdentifiers: [name]) }
이렇게 메서드로 구현을 해봤는데 핵심은 removePendingNotificationRequests 메서드의 사용입니다.
해당 메서드를 사용하여 노티피케이션을 지정한 identifiers 식별자를 넣어주어 특정한 노티피케이션들만 해제가 가능합니다.
다만 center 상수는 전역적으로 접근할 수 있도록 빼주어 노티피케이션의 등록과 해제가 같은 center가 되야합니다.
removeAllPendingNotificationRequests()
: 모든 노티피케이션을 해제
여기서 처음 정보를 찾으며 헷갈렸던 부분은 pending과 deliver였습니다.
아래와 같이 동일한 동작을 할것 같은 메서드가 있었습니다.
removeDeliveredNotifications(withIdentifiers: [String]) removeAllDeliveredNotifications()
: 위의 pending 메서드와 차이점은 deliver는 노티피케이션을 전달하는걸 제거해주는것인데 이 메서드를 사용하면 생성된 노티피케이션이 제거되지 않고 알림이 특정시간에 나타났습니다.
-> pending은 '보류중' 이라는 뜻을 갖고있습니다.
이에 추측하자면 생성된 노티피케이션은 보류중인 상태이며 pending 관련 메서드를 통해 보류중인 노티피케이션을 해제해줘야 될 것 같습니다.
PendingNotificationRequests 정보 얻기
func getPendingNotificationRequests(completionHandler: ([UNNotificationRequest]) -> Void) {} print(center.getPendingNotificationRequests(completionHandler: {requests in for request in requests { print(request) } }))
: 위와 같은 코드를 통해 보류중인 노티피케이션 대기열의 정보를 얻을 수 있습니다.
[느낀점]
로컬 노티피케이션을 정말 적절히 잘 사용하고 해제와 재호출등의 시점을 구분할 수 있는 능력이 필요할것 같습니다.
해제가 되게 간단할 줄 알았는데 코드 구현은 쉬우나 어디서 어떻게 사용하는지에 대해 많이 고민이 필요했습니다.
그래도 로컬 노티피케이션을 적절히 활용해보면서 코드를 구현해보는 재미를 느꼈습니다!!🤓
[참고자료]
'iOS' 카테고리의 다른 글
Core Graphics (0) 2021.03.29 Localization (0) 2021.03.25 OAuth (0) 2021.03.22 User Notifications (0) 2021.03.18 View Drawing Cycle (0) 2021.03.15