본문 바로가기
WWDC

WWDC18 - What's New in User Notifications

by vapor3965 2021. 8. 11.

목차


    • 세션보면서 정리한 내용입니다. 해석이 잘못된 경우가 있을수있으니 발견하시면 댓글로 남겨주시면 감사하겠습니다🙏🏻

     

    https://developer.apple.com/wwdc18/710

     

    What’s New in User Notifications - WWDC18 - Videos - Apple Developer

    Local and push notifications enable your app to keep users informed with timely and relevant content, by displaying messages and...

    developer.apple.com

     


    요약

     

    Grouped notificaitons

    • 이제 기본적으로 같은 앱에서 나온 notification들은 자동적으로 그룹핑되어진다. ( 가장 최근순이 상단에 뜸 )
    • 하지만 thread identifier를 이용하여, 같은앱이더라도, 따로 그룹핑할 수 있다 ( 예를들어, 메세지앱처럼 상대방에따라 각각 그룹핑 )
      • remote push를 사용할때, "thread-id"를 추가해야함 
      • 로컬에선, threadIdentifier 프로퍼티를 추가해야함
      • 그렇다고 해서 반드시 적용되는건 아니다. 사용자가 설정앱-알림-특정앱-그룹핑을 끄게되면 하나의 앱의 그룹핑으로된다. 

    Notification content extension 

    • 기본 notification보다 커스텀 뷰를 이용하여 더 다양한 경험을 제공할 수 있는 notification이다.  ( iOS 10부터 소개됌 ) 
    • content extension의 액션들을 더 동적으로 변경할 수 있다.
    • 커스텀뷰에서 이제 터치들을 받을 수 있다. 
    • 커스텀뷰에서 터치를 받아 바로 앱을 런칭할 수 있는 api가 생겼다.
    • 커스텀뷰에서 터치를 받아, 보고있는 content extension만 dismiss하는 api가 생겼다 ( 아예 notification을 없애는것이아닌 ) 

    Notificaiton management

    • 이제 사용자는 더이상 설정앱으로 가지않고도 notification자체에서 해당 알림을 제어할 수 있다. 
      • Deliver Prominently  ( 락스크린, 센터, 배너에 나타나는 ) 
      • Deliver Quietly  ( 락스크린, 배너에 안뜨고, 소리없이 센터에만 나타남 ) 
      • turn off는 아예 끄는건데, 여기서 추가적인 API를 이용하여 더 세부적인 옵션들을 제공할 수 있다. 
        • 하나의 앱에서도 특징에 맞게 알림을 제어할 수 있다. 

    Provisional authorization 

    • push notification을 이용한다면, 앱설치시 사용자권한을 받아야하는데, 이제는 권한요청없이 임시권한 API를 이용하여 센터에만 소리없이 받게할 수 있다. 

    Critial Alerts

    • 방해금지 모드에서도, 건강, 집, 안전, 공중안전 과 관련된 notification을 소리와 함께 받을 수 있는 새로운 타입의 notification이 생겼다.
    • 이를 위해서는 developer website에서 따로 신청해야하고, 새로운 API를 이용하여 권한을 설정한다. 
      • 로컬에서는 defaultCritial 사운드가 추가됐고,  remote push에서도 payload를 설정해야한다. 

     

     


    iOS 12로, 

    아래들을 알아볼것이다. 

     

     


    우선 Grouped notification부터 알아보자.

     

    iOS 11까지는 notification들이 시간순서대로 플랫폼상관없이 배치되었고,  그렇기때문에 특정 notification을 찾는게 힘들 수 있다. 

     

    하지만, 이제는 이렇게 앱별로 그룹되어졌다!

     

     

    작동하는 방법은 자동적으로 그룹핑되어진다.

    하지만 만약, 커스텀그룹하고 싶다면, thread identifier를 사용할수 있다. ( UNNotification의 프로퍼티다 )

     

    로컬일때. 

     

    원격 페이로드일때, 

     

     

    notification이 도착했을때, thread identifier가 없다면,  application bundle과 함께 그룹핑되어진다.

     

     

    반대로, 만약 thread identifier와 함께왔다면, 같은 thread ID를 갖는 같은 앱으로부터 온 notification과 함께 갇이 그룹핑되어진다. 

    즉, 하나의앱은 여러개의 그룹을 가질 수 있다는 뜻이다.

     

    그 예로, 매시지 앱이 아주 적절하다.

    하나의 매시지앱에서, 각 다른사람( thread itdentifier ) 으로 그룹핑되어진다.

     

    하지만 thread identifier를 사용한다고해서 무조건적으로 그룹핑되어지는 것은 아니다.

     

    왜냐하면, 시스템설정에서 알람에서 그룹핑 설정을 할 수가 있는데, 

     

    automatic 은 자동적으로 그룹핑되어지는 것이고,

    반면, By App은 그룹핑이 무시되어진다 ( 같은 앱은 하나의 그룹으로됌)

    Off는 iOS11처럼 그룹핑 없도록 한다. 

     

     

    기본적으로 notification에는 몇개 더 있다라고 요약하는 정보가 담겨있다. 

    하지만 커스텀으로 다른내용으로 만들 수 있다.

     

     

     


     

     

    다음으로, notification content extension을 살펴보자

    이미 iOS10부터 소개되었어서, 친숙한 사람도 많을 것이다.

     

    기존 notification보다 더 다양한 정보들을 제공해주도록 한다. 

     

     

    content extension을 설정하는 방법은, 

     

    아래와같이 target을 새로만들고, 

     

     

     

    이런 template가 생성되는데, 

    UNNotificationContentExtension을 채택하고있다. 

    ( 아마, didReceive로부터 notificaion을 받고, 커스텀 뷰를 생성하나?? ) 

     

    info.plist에서도 content extension과 관련된 옵션을 제공하는데, 

    Category identifier가 중요하다. 이 값과 notification request에서 부여하는 값과 매치되어야만 시스템이 어떤 content extension을 호출할지 알기 때문이다. 

     

     

    content extension과 사용자가 인터렉트하는 기본적인 방법은 notification action이다. ( 아래에 나와있는 두개의 버튼 ) 

     

    action을 설정하는 방법은 약간 귀찮은 코드다. 

     

    action을 만들고, 그 액션들을 담는 identifier를 가지는 category를 만든다.

    그 catgory를 set해준다.

     

     

     

    그럼 action의 행동에 대한 반응은 ?  크게 두가지 방법이있다. 

     

    첫번째는 UNUserNOtificationCetnerDelegate를 채택한, AppDelegate에서 핸들링 할 수 있다. 

    response에는 유저가 행동한 정보를 담고 있고, 

     

     

     

     

    두번째는, ContentExtension을 채택하여, didReceive에서도 해당 액션을 가로챌 수 있다. 

    이로인해 뷰가 변경되고, 좀 더 다이나믹한 경험을 제공할 수 있다. 

    마지막에서는 .doNotMiss로  notification을 없애지않는데, 

    없애고싶다면 .dismiss하면된다. 

     

     

    그렇게 액션에 의해 뷰들을 업데이트할 수 있다.

    Like를 누르면 아래와같이 You liked this photo 문구로 업데이트되는데, 

    그렇다면 더이상 Like버튼을 가지고있는건 필요없겠다.

     

     

     

     

    notification action은 일반적으로 제약을 가지고있다. 

    그것들은 업데이트되어질 수가 없다.

     

    하지만, 이제는 새로운 API가 등장했다. 

    액션을 다른 새로운 액션들로 변경이 가능하다. 

     

    그러므로, 사용자가 Like버튼을 누르면 , Unlike로 변경되어 다시 사용자가 좋아요를 취소하도록 하게 하면 얼마나좋을까? 

     

    그렇게 핸들링하는 방법은,

    다시 didReceive로 돌아와서,

    Like를 눌렀을경우,

    현재 액션들을 가져와서, 

    새로운 액션으로 바꾸도록한다. 

    만약 아예 액션을 없도록 한다면 그냥 빈 어레이를 넣어도된다!

     

     

     

    또 다른 새로운 특징이 생겼는데,

    이전까지는 content extension의 View는 터치가 불가능했다.

    하지만 많은 피드백이 있었고, 결국! 터치가 가능하도록 변경했다!!! ( 박수박수 ) 

     

     

     

    content extension은 이제 유저인터렉션 터치를 받을 수 있고, 

    개발자가 해야할것은 info.plist에 key를 추가한다.

     

     

     

     

     

    Like액션을 없애고, view에 하트모양 버튼을 넣는건 어떨까? 

     

     

    이제 이렇게 button을 추가할 수 있다. 

     

     

    content extension으로부터 앱을 런칭시켜보자.

     

    일반적으로 상단 아이콘을 터치하거나, 하단 액션을 누르면 앱으로 런칭할 수 있다. 

     

     

     

    대신, custom control로 프로그래밍으로 앱을 런칭할 수 없을까? 

     

     

    그래서 이번에 새로운 메서드가 추가됐다.

    이를통해 앱을 런칭하는 것 뿐만 아니라, 

     

    UserNotificationCenter Delegate의 didReceive를 호출한다. 

    그러므로, 이를통해 notification의 정보도 알수있게된다. 

     

    그러므로, 버튼을 추가하고, 호출하면된다. 

     

     

     

     

     

    반대로, 커스텀 커트롤러에서 아예 content extension을 dismiss하는 방법은? 

    이번에 새로 메서드가 추가됐고, 

    아래와같이 추가할수있다. 

     

     

    주의할점은, 이 메서드는 notificationn자체를 없애는건 아니다.  ( 보여지는 view만 없애고, 원래 notification으로 보여줌. )

     

    그러므로 아예 없애고 싶으면, 기존 api를 이용한다. 

     

     

     

     


     

    자 이제 notification management를 알아보자. 

     

    앱이 많아질수록 notificaiton도 굉장히 많아진다.

    그럼 사용자들은 어떤 notification을 찾아야할지 굉장히 어려울 수 있다.

    또, 어떤 notification은 락스크린일때 안보여지면 좋겠다라고 판단할 수 있다.

    그러므로, 이런 경우에는 설정앱으로 가서 특정앱은 락스크린에  안보이게할 수 있다.

     

    하지만, iOS 12에서부터는 notification에서 직접 , 설정앱으로 가지 않고도 이를 제어할 수 있게됐다.

    아주 간단하다. notification을 swipe하고, manage버튼을 누르면 아래와같은 뷰가 나타난다.

    더 자세한 설정은 아래 settings액션을 터치하면 설정앱으로 가진다.

     

     

     

    Deliver Prominently는 ( prominent - 중요한 ) 

    모두 체크하도록 하게해준다. ( 락스크린에도 나타나고, ) 

     

     

    반대로 Deliver Quietly는 배너,락스크린에 안뜨고, 소리도없이,  Notification Center에만 뜬다.

     

    turn off는 말그대로 notification을 끄는건데, 

    그버튼을 누르면, 추가적인 confirmation sheet이 뜬다. 

    여기에 새로운 API를 이용하여 2번째 옵션들을 추가할 수가 있다.

    지금은 Podcasts가 추가한 새로운 옵션은 Configure in Podcasts...이다. 

    그 옵션을 선택하면 앱으로 link되어지고, 

    Podcasts에서 만든 커스텀 세팅뷰가 나타난다.

    보시다시피, 이제 특정 cast만 끄도록할지, 할 수 있다.

     

    물론, 설정앱에서도 접근할 수 있다. 

     

     

    그럼 어떻게 할까? 

     

    UNUserNotificationCenterDelegate의 새로운 openSettingsFor 메서드를 구현하면된다.

    그럼 자동적으로 설정앱에서도, notification에서도 나타나지고, 클릭하면 이 메서드가 호출된다.

    또한, 당연히 즉시 이메서드안에서 커스텀 세팅뷰로 넘어가도록 해야한다.

    notification에서 호출된거라면 파라미터의 notification을 가질것이다. ( 설정앱에서 호출됐다면 없겠지 ) 

     

     

     

      

     


    이제 provisional authorization을 살펴보자.

     

    local push or  retmote push notificaiton 사용하기로했다면,  처음 앱을 설치할때, 사용자권한을 받는 창이 뜬다. 

    여기서 문제는 사용자는 어떤 알림을 받을지도 모르는데, 당장 결정하는것은 부당할 수 있다.

     

    그러므로, 새로운 임시권한을 만들었다.

    이를 개발자가 설정하면, 유저는 더이상 처음설치할때 사용자권한 창을 안받으며

    notification을 받지만, 대신 NotificationCenter에서만, 소리도없이, 받게된다.

     

    notification은 아래와같이 keep, turn off로 추가적으로 액션이 담기게되고,

    마찬가지로 turn off는 2차 정보를 더 보여준다.  

    마찬가지로 만약 앱에서 커스텀새팅뷰를 제공하고자한다면 위에 있던 configure....액션도 뜨게된다.

     

     

     

    그럼 provisional authorization을 하는 방법은? 

     

    기본적으로 권한을 요청할때, .provisional을 추가하면 된다.

     

     

     

     

     


    마지막으로 critial alerts 가 남았다.

     

    어디에 참석하거나, 중요한 미팅인경우에 이렇게 방해금지 모드를 켜놓는다. 

    하지만, 정말 중요한 notification을 놓치면 어떻게될까 

     

    아래와같이 혈당낮다는 알림을 보내준는 건강관리 앱같은 경우!

     

     

    그래서 apple은 새로운 타입의 notification이 필요하다고 생각했다.

     

    Critial alerts는 건강, 또는 집, 안전, 공중안전 과 관련된 notification이다.

    그리고, 유저는 반드시 액션을 취해야한다

    또한 방해금지모드에서도 보이고, 소리도 울린다. ( 커스텀 가능 ) 

     

     

    또, 의미하는 바와같이,  꽤나 지장을 줄 수 있고, 모든 앱이 이를 지원해야한다고 생각하지않기 때문에, 

    Critial Alert를 하기위해서는 따로 신청을 해야한다.

     

     

    Critial alerts를 사용하면, 

    이렇게 유니크한 경고표시 아이콘이 뜨게된다.

     

     

    그리고 사용자는 알림을 받기전에 아래와같은 alert를 받게된다. 

     

     

     

    만약 자격을 지원했다면, 그후에는 아래와같이 .critialalert를 포함하여 권한을 요청한다.

     

    로컬에서 critial alert를 보내기위해서는, 콘텐츠들을 기본 alert와 비슷하지만,

    소리에서 defaultCritial 사운드가 추가됐다. ( 물론 커스텀 가능 

     

    커스텀 critial 사운드 

     

     

    remote push 에서는 아래와같이 payload를 설정한다.

     

     

     

    댓글