Notification Service Extension 이란? (a.k.a Service Extension)

devapploper·2022년 3월 14일
0

Keep It Simple, Stupid

목록 보기
2/3
post-thumbnail

무엇인가?

UNNotificationServiceExtension 객체는 notification service app extension에 대한 엔트리 포인트를 제공한다. 시스템이 사용자에게 노티피케이션을 전달하기 전에 해당 객체를 통해 노티피케이션 컨텐츠를 커스터마이징 할 수 있다.

언제 사용하는가?

노티피케이션의 컨텐츠를 변경하거나 익스텐션 관련 컨텐츠를 다운로드할 때 사용한다. 예를 들어 노티피케이션과 관련된 이미지를 다운로드하거나 암호화된 데이터 블록을 해독할 때 사용할 수 있다.

어떻게 사용하는가?

직접 UNNotificationExtension 객체를 생성해서 사용하지 않고, Xcode가 제공하는 template에 subclass를 수정하면 된다. 해당 subclass의 메서드를 이용해서 app extension을 구현하면 된다. 앱이 원격 노티피케이션을 받으면, 시스템은 해당 익스텐션을 불러오고 아래의 조건에 따라 didReceive(_:withContentHandler:) 메서드를 호출한다:

  • 앱에서 원격 노티피케이션이 화면에 노출되도록 설정했을 경우 (banners)

  • 원격 노티피케이션에 aps 딕셔너리에 mutable-content 키 값이 1로 설정되어있을 경우

다음과 같은 경우에는 Notification Service Extension을 통해 변경할 수 없다

  • 음소거되어 있는 노티피케이션 (silent notifications)

  • 화면에 alert가 노출되지 않고 소리만 나타나거나 앱 아이콘의 뱃지만 나타나는 경우

앞서 얘기한 didReceive(_:withContentHandler:) 메서드가 익스텐션의 가장 주축이 되는 메서드인데, 이 메서드는 실행 시간이 한정되어있어 만약 실행하고자 하는 작업이 오래 걸릴 경우엔 시스템은 serviceExtensionTimeWillExpire() 메서드를 호출하여 마지막 변경 사항을 반영할 기회를 준다. 시간 안에 컨텐츠 수정을 하지 못할 경우, 시스템은 수정하지 않은 본래의 컨텐츠 (original content)를 노출한다.


Reference:

Apple Developer Documentation - UNNotificationServiceExtension
Intro to Notification in iOS

profile
iOS, 알고리즘, 컴퓨터공학에 관련 포스트를 정리해봅니다

0개의 댓글