UNNotificationServiceExtension

Panther·2021년 8월 17일
0

https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension

"An object that modifies the content of a remote notification before it’s delivered to the user."

사용자에게 컨텐트가 전달되기 전에 원격 노티피케이션의 컨텐트를 수정하는 객체입니다.

Declaration

class UNNotificationServiceExtension : NSObject

Overview

UNNotificationServiceExtension 객체는 노티피케이션 서비스 앱 확장을 위한 엔트리 시점을 제공합니다. 이 객체는 시스템이 사용자에게 컨텐트를 전달하기 전에 원격 리모트 노티피케이션의 컨텐트를 커스터마이징할 수 있도록 해줍니다. 노티피케이션 서비스 앱 확장은 UI를 제공하지 않습니다. 대신 시스템이 사용자의 기기에 적합한 타입의 노티피케이션을 전달할 필요가 있을 때 launch됩니다. 확장과 관련이 있는 노티피케이션의 컨텐트 혹은 다운로드 컨텐트를 수정하기 위해 이 확장을 사용할 수 있습니다. 예를 들어 암호화된 데이터 블록을 암호해제하거나 노티피케이션과 관련이 있는 이미지를 다운로드하기 위해 확장을 사용할 수 있습니다.

UNNotificationServiceExtension 객체를 직접 생성하지 않아야 합니다. 대신 노티피케이션 서비스 확장 타깃을 위한 Xcode 템플릿은 수정을 위한 서브클래스를 포함하고 있습니다. 앱 확장의 동작을 구현하기 위해 해당 서브클래스의 메소드를 사용하시기 바랍니다. 앱이 원격 노티피케이션을 받을 때, 아래 조건에 따라 시스템은 확장을 로드하고 didReceive(_:withContentHandler:) 메소드를 호출합니다.

  • 앱이 알림을 표시하기 위해 원격 노티피케이션을 설정한 경우입니다.
  • 원격 노티피케이션의 aps 딕셔너리가 값이 1로 설정된 수정 가능한 컨텐트 키를 포함하고 있는 경우입니다.

Note
조용한 노티피케이션 혹은 사운드 재생 혹은 앱의 아이콘 badge만을 갖는 노티피케이션은 수정할 수 없습니다.

didReceive(_:withContentHandler:) 메소드는 확장의 주요 작업을 수행합니다. 노티피케이션의 컨텐트에 대해 모든 변경사항을 만들기 위해 해당 메소드를 사용할 수 있습니다. 이 메소드는 작업 수행 및 제공받은 컴플리션 블록 수행에 제한된 시간을 갖습니다. 메소드가 시간 안에 마무리되지 않으면, 시스템은 변경사항을 다시 작성할 수 있는 마지막 기회를 주기 위해 serviceExtensionTimeWillExpire() 메소드를 호출합니다. 시간 만료 전에 노티피케이션 컨텐트를 업데이트하지 않으면 시스템은 기존 컨텐트를 표시합니다.

모든 앱 확장의 경우처럼 앱 내부에 번들로 노티피케이션 서비스 앱 확장 클래스를 전달할 수 있습니다. Xcode가 제공하는 템플릿은 이 앱 확장 타입을 위해 자동으로 Info.plist 파일을 설정합니다. 구체적으로 NSExtensionPointIdentifier 키의 값을 com.apple.usernotifications.service로 설정하고, NSExtensionPrincipalClass의 값을 UNNotificationServiceExtension 서브클래스의 이름으로 설정합니다.

원격 노티피케이션 설정 및 전송 방법에 대한 더 많은 정보는 Setting Up a Remote Notification Server를 보시기 바랍니다.

Setting Up a Remote Notification Server
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server
https://velog.io/@panther222128/Setting-Up-a-Remote-Notification-Server

Subclassing Notes

Xcode 템플릿은 수정을 위한 UNNotificationServiceExtension의 서브클래스를 제공합니다. didReceive(_:withContentHandler:) 메소드를 구현해야 하고, 이를 들어오는 노티피케이션을 처리하기 위해 사용할 수 있습니다. serviceExtensionTimeWillExpire() 메소드를 오버라이드하는 것을 권장합니다.

See Also


Notification Service App Extension

Modifying Content in Newly Delivered Notifications

사용자의 iOS 기기에서 원격 노티피케이션이 표시되기 전에 원격 노티피케이션의 페이로드를 수정합니다.

https://developer.apple.com/documentation/usernotifications/modifying_content_in_newly_delivered_notifications
https://velog.io/@panther222128/Modifying-Content-in-Newly-Delivered-Notifications


0개의 댓글