ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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)
        }
    }))

    : 위와 같은 코드를 통해 보류중인 노티피케이션 대기열의 정보를 얻을 수 있습니다.

     

     

    [느낀점]

    로컬 노티피케이션을 정말 적절히 잘 사용하고 해제와 재호출등의 시점을 구분할 수 있는 능력이 필요할것 같습니다.

    해제가 되게 간단할 줄 알았는데 코드 구현은 쉬우나 어디서 어떻게 사용하는지에 대해 많이 고민이 필요했습니다.

    그래도 로컬 노티피케이션을 적절히 활용해보면서 코드를 구현해보는 재미를 느꼈습니다!!🤓

     

     

    [참고자료]

    https://stackoverflow.com/questions/31951142/how-to-cancel-a-localnotification-with-the-press-of-a-button-in-swift

    '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
Designed by Tistory.