-
Notifications
You must be signed in to change notification settings - Fork 0
notification programming guide
로컬 알림 및 원격 알림은 앱이 포 그라운드에서 실행되지 않는 경우에도 앱에 새로운 데이터가 제공 될 때이를 사용자에게 알리는 방법입니다.
예를 들어, 메시징 앱을 사용하면 새 메시지가 도착했을 때 사용자에게 알릴 수 있으며 캘린더 앱은 사용자에게 예정된 약속을 알릴 수 있습니다.
로컬 알림과 원격 알림의 차이점은 간단합니다.
- 지역 알림을 사용하면 앱에서 알림 세부 정보를 로컬로 구성하고 해당 세부 정보를 시스템에 전달합니다.
그런 다음 앱이 포 그라운드에 있지 않을 때 알림 전달을 처리합니다. 로컬 알림은 iOS, tvOS 및 watchOS에서 지원됩니다. - 원격 알림을 사용하면 회사 서버 중 하나를 사용하여 Apple Push Notification 서비스를 통해 사용자 장치로 데이터를 전송할 수 있습니다.
원격 알림은 iOS, tvOS, watchOS 및 macOS에서 지원됩니다.
로컬 및 원격 알림 모두 앱의 알림 예약 및 처리를 지원하는 코드를 추가해야합니다.
원격 알림의 경우 사용자 장치에서 데이터를 수신하고 Apple Push Notification Service(APNs)에 알림 관련 데이터를 보낼 수 있는 서버 환경을 제공해야 합니다.
이 서비스는 사용자 장치로 전송되는 원격 알림 전달을 처리하는 Apple 제공 서비스입니다.
사용자 알림 프레임 워크는 iOS 10, watchOS 3 및 tvOS 10에서 시작하는 로컬 알림 일정과 일정을 일관되게 유지할 수있는 방법을 제공합니다.
로컬 알림을 관리하는 것 외에도, 비록 플랫폼에 특정한 API가 필요하지만 원격 알림 구성은 여전히 지원하고, 프레임워크는 원격 알림 처리를 지원합니다.
별도의 프레임워크이므로 작성한 앱 및 WatchKit 확장과 같이 생성한 확장 프로그램에서 사용할 수 있습니다.
노트
macOS에서 원격 알림을 구성하고 처리하려면 AppKit 프레임 워크에있는 플랫폼 별 메서드를 사용해야합니다.
사용자 알림 프레임 워크는 원격 알림이 배달되기 전에 원격 알림의 콘텐츠를 수정할 수있는 알림 서비스 앱 확장을 만들 수도 있습니다.
앱에 알림 서비스 앱 확장을 포함하면 시스템에서 수신 알림을 사용자에게 전달하기 전에 내선 번호로 전달합니다.
이러한 유형의 확장 프로그램을 사용하여 앱 알림을위한 종단 간 암호화를 구현하거나, 전달하기 전에 알림 내용을 수정하거나, 알림과 관련된 추가 이미지 또는 미디어를 다운로드 할 수 있습니다.
사용자 알림 UI 프레임워크는 시스템 알림 인터페이스의 모양을 사용자 지정할 수있는 사용자 알림 프레임워크와 함께 제공됩니다.
사용자 알림 UI 프레임워크를 사용하여 알림 컨텐트 앱 확장을 정의합니다.
이 작업은 뷰 인터페이스에 표시할 사용자 정의 컨텐트가 있는 뷰컨트롤러를 제공합니다.
시스템이 기본 시스템 인터페이스 대신 사용자 정의 뷰컨트롤러를 표시합니다.
이 확장 유형을 사용하여 미디어 또는 동적 컨텐츠를 알림 인터페이스에 통합할 수 있습니다.
사용자 알림 프레임 워크의 클래스에 대한 자세한 내용은 사용자 알림 프레임 워크 참조를 참조하십시오. 알림 콘텐츠 앱 확장을 만드는 데 사용하는 클래스에 대한 자세한 내용은 사용자 알림 UI 프레임워크 참조를 참조하십시오.
iOS, tvOS 및 watchOS의 앱이 항상 실행되고있는 것은 아니기 때문에 로컬 알림을 사용하면 앱에 새로운 정보가있을 때 사용자에게 알릴 수 있습니다.
예를 들어 백그라운드에서 서버의 데이터를 가져 오는 앱은 재미있는 정보를 수신하면 로컬 알림을 예약할 수 있습니다.
로컬 알림은 특정 시간이나 특정 지리적 위치에 도달했을 때 사용자에게 경고해야하는 캘린더 및 할 일 목록 앱과 같은 앱에도 매우 적합합니다.
원격 알림은 앱의 일부 또는 모든 데이터가 회사 서버에 의해 관리될 때 적합합니다.
원격 알림을 사용하면 사용자 장치에 알림을 푸시할 시기를 결정할 수 있습니다.
예를 들어, 메시징 앱은 원격 알림을 사용하여 새 메시지가 도착할 때 사용자에게 알릴 수 있습니다.
서버에서 전송되기 때문에 사용자의 기기에서 앱이 실행되지 않는 경우를 포함하여 언제든지 원격 알림을 보낼 수 있습니다.
사용자에게는 주어진 장치에 제시 될 때 로컬 및 원격 통지간에 차이가 없습니다.
두 가지 유형의 알림은 시스템에서 제공하는 것과 동일한 기본 모양을 가집니다.
경우에 따라 모양을 사용자 정의 할 수 있지만 대개 사용자에게 통지 방법을 선택합니다.
특히 알림 전달을 위해 다음 옵션 중 하나를 선택합니다.
- 화면상의 경고 또는 배너
- 앱 아이콘의 배지
- 경고, 배너 또는 배지와 함께 제공되는 소리
로컬 및 원격 알림을 구성 할 때 제공하는 정보 유형에 가장 적합한 상호 작용 유형을 선택하십시오.
예를 들어해야 할 일 목록 앱에는 항목 목록이있을 수 있으며 각 목록에는 항목을 완료해야하는 시간과 우선 순위가 있습니다.
중요도가 높은 항목의 경우 완료 시간이 지나면 항목을 즉시 처리해야 함을 알리는 경고를 표시 할 수 있습니다.
우선 순위가 낮은 항목의 경우 앱의 아이콘에 배지를 적용하거나 소리를내어 항목을 완성하는 알림을 제공 할 수 있습니다.
알리미를 사용하면 메시지를 사용자에게 직접 표시 할 수 있지만 배지와 소리의 의미는 앱에 따라 다릅니다.
다른 소리를 사용하여 메시지 도착 또는 작업 완료와 같은 특정 유형의 이벤트를 전달할 수 있습니다.
배지는 항상 숫자 값을 포함하며 일반적으로 사용자의 관심을 기다리고있는 항목의 수를 나타내는 데 사용됩니다.
그림 1-1은 iOS 앱의 아이콘에 배지를 배치 한 모습입니다.
그림 1-1 배지 번호가있는 응용 프로그램 아이콘 (iOS)
항상 로컬 및 원격 통지를 사용하여 사용자를 성가시게 하지 마십시오.
이 시스템을 통해 사용자는 앱별로 알림, 소리 및 배지의 표시를 사용 또는 사용 중지할 수 있습니다.
알림이 앱에 전달 될 수도 있지만 시스템은 현재 사용 가능한 옵션으로만 사용자에게 알립니다.
사용자가 알림을 모두 사용 중지하면 APN은 앱의 알림을 사용자의 기기에 전달하지 않으며 로컬 알림 일정은 항상 실패합니다.
앱은 실행시 로컬 및 원격 알림을 지원하도록 구성되어야합니다.
특히 다음 중 하나를 수행하는 경우 앱을 미리 구성해야합니다.
- 도착 알림에 대한 응답으로 알림, 재생 사운드 또는 배지 아이콘을 표시합니다.
- 사용자 지정 작업 단추를 알림과 함께 표시합니다.
일반적으로 응용 프로그램이 시작되기 전에 모든 구성을 수행합니다.
iOS 및 tvOS에서 이는 UIApplication 대리인의 application:didFinishLaunchingWithOptions: 메소드보다 늦지 않게 알림 지원을 구성하는 것을 의미합니다.
watchOS에서 WKExtension 대리인의 applicationDidFinishLaunching 메소드보다 늦게 지원을 구성하십시오.
나중에이 구성을 수행 할 수 있지만이 구성이 완료 될 때까지 앱을 대상으로하는 로컬 또는 원격 알림을 예약하지 않아야 합니다.
원격 알림을 지원하는 앱에는 원격 알림 지원 구성에 설명된 추가 구성이 필요합니다.
iOS, tvOS 및 watchOS에서 앱은 들어오는 알림에 대한 응답으로 알림을 표시하거나 소리를 재생하거나 앱 아이콘에 배지 할 수있는 권한이 있어야 합니다.
요청 권한 부여는 사용자 상호 작용을 제어하여 사용자의 요청을 허용하거나 거부할 수 있습니다.
또한 사용자는 나중에 시스템 설정에서 앱의 인증 설정을 변경할 수 있습니다.
권한을 요청하려면 공유 UNUserNotificationCenter 오브젝트의 requestAuthorizationWithOptions:completionHandler: 메소드를 호출하십시오.
요청된 모든 상호 작용 유형에 대해 앱이 승인 된 경우 시스템은 부여된 매개 변수를 YES로 설정하여 완료 핸들러 블록을 호출합니다.
하나 이상의 상호 작용 유형이 허용되지 않으면 매개 변수는 NO입니다.
Listing 2-1은 사운드를 재생하고 경고를 표시하는 권한을 요청하는 방법을 보여줍니다.
완료 핸들러 블록을 사용하여 상호 작용 유형이 부여되었는지 또는 거부되었는지에 따라 앱의 동작을 업데이트하십시오.
Listing 2-1 사용자 상호 작용에 대한 승인 요청
UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound)
completionHandler:^(BOOL granted, NSError * _Nullable error) {
// Enable or disable features based on authorization.
}];let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
// Enable or disable features based on authorization.
}앱이 처음 실행되고 requestAuthorizationWithOptions:completionHandler: 메소드를 호출하면 요청 된 상호 작용을 허용하거나 거부하라는 메시지가 표시됩니다.
시스템이 사용자 응답을 저장하기 때문에 후속 실행 중에이 메소드를 호출해도 사용자에게 다시 묻지 않습니다.
노트
사용자는 시스템 설정을 사용하여 언제든지 앱의 승인 된 상호 작용 유형을 변경할 수 있습니다.
사용할 수있는 상호 작용의 유형을 정확하게 결정하려면UNUserNotificationCenter의 getNotificationSettingsWithCompletionHandler: 메소드를 호출하십시오.
실행 가능한 알림을 사용하면 알림에 대한 응답으로 관련 작업을 쉽고 빠르게 수행 할 수 있습니다.
사용자가 강제로 앱을 실행하는 대신 실행 가능한 알림을 위한 인터페이스는 사용자가 탭할 수 있는 맞춤 동작 버튼을 표시합니다.
탭하면 각 버튼이 알림 인터페이스를 닫고 선택한 작업을 앱으로 전달하여 즉각적인 처리가 가능하도록합니다.
앱에 작업을 전달하면 사용자가 작업을 수행하기 위해 앱에서 더 이상 탐색 할 필요가 없어 시간을 절약 할 수 있습니다.
앱은 실행 가능한 알림을 명시 적으로 추가해야합니다.
실행시 앱은 앱에서 보내는 알림 유형을 정의하는 하나 이상의 카테고리를 등록해야합니다.
각 카테고리와 관련하여 해당 유형의 알림이 전달 될 때 사용자가 수행 할 수있는 작업이 있습니다.
실제로 표시되는 동작의 수는 알림이 표시되는 방법과 위치에 따라 다르지만 각 범주에는 연결된 네 개의 동작이 포함될 수 있습니다.
예를 들어, 배너는 두 가지 동작만 표시합니다.
노트
실행 가능한 알림은 iOS 및 watchOS에서만 지원됩니다.
카테고리는 앱이 지원하는 알림 유형을 정의하고 알림을 표시 할 방식을 시스템과 통신합니다.
범주를 사용하여 사용자 지정 작업을 알림과 연결하고 해당 유형의 알림을 처리하는 방법에 대한 옵션을 지정할 수 있습니다.
예를 들어 카테고리 옵션을 사용하여 알림을 CarPlay 환경에 표시 할 수 있는지 여부를 지정합니다.
시작시 공유 UNUserNotificationCenter 객체의 setNotificationCategories: 메소드를 사용하여 모든 앱 카테고리를 한꺼번에 등록합니다.
이 메서드를 호출하기 전에 하나 이상의 UNNotificationCategory 클래스 인스턴스를 만들고 해당 형식의 알림을 표시 할 때 사용할 범주 이름과 옵션을 지정합니다. 카테고리 이름은 앱 내부에 있으며 사용자가 본 적이 없습니다.
알림을 예약 할 때 알림의 페이로드에 범주 이름을 포함시켜 시스템이 옵션을 검색하고 알림을 표시하는 데 사용합니다.
Listing 2-2는 간단한 UNNotificationCategory 객체를 생성하고 이를 시스템에 등록하는 방법을 보여준다.
이 카테고리는 이름이 "GENERAL"이며 사용자가 다른 조치를 취하지 않고 알림 인터페이스를 닫을 때 시스템이 앱에 알리도록하는 맞춤 해제 액션 옵션으로 구성됩니다.
Listing 2-2 알림 카테고리 만들기 및 등록
UNNotificationCategory* generalCategory = [UNNotificationCategory
categoryWithIdentifier:@"GENERAL"
actions:@[]
intentIdentifiers:@[]
options:UNNotificationCategoryOptionCustomDismissAction];
// Register the notification categories.
UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
[center setNotificationCategories:[NSSet setWithObjects:generalCategory, nil]];let generalCategory = UNNotificationCategory(identifier: "GENERAL",
actions: [],
intentIdentifiers: [],
options: .customDismissAction)
// Register the category.
let center = UNUserNotificationCenter.current()
center.setNotificationCategories([generalCategory])앱에서 예약하는 모든 알림에 범주를 지정할 필요는 없습니다.
그러나 범주를 포함하지 않으면 사용자 지정 작업이나 구성 옵션없이 알림이 표시됩니다.
등록한 각 범주에는 최대 네 개의 사용자 지정 작업이 포함될 수 있습니다.
카테고리에 사용자 정의 액션이 포함되어 있으면 시스템은 사용자 정의 액션 중 하나의 제목을 가진 버튼을 알림 인터페이스에 추가합니다.
사용자가 맞춤 동작 중 하나를 탭하면 시스템은 해당 액션 식별자를 앱에 전송하여 필요에 따라 앱을 실행합니다.
사용자 지정 작업을 정의하려면 UNNotificationAction 개체를 만들어 범주 개체 중 하나에 추가합니다.
각 액션에는 해당 버튼의 제목 문자열과 버튼을 표시하고 관련 작업을 처리하는 방법에 대한 옵션이 있습니다.
사용자가 작업을 선택하면 시스템은 작업의 식별자 문자열을 앱에 제공하고,이 식별자 문자열을 사용하여 수행 할 작업을 식별합니다.
Listing 2-3 은 두 개의 사용자 지정 작업이 포함 된 새 범주를 추가하여 Listing 2-2의 예를 확장합니다.
Listing 2-3 카테고리에 대한 사용자 정의 액션 정의하기
UNNotificationCategory* generalCategory = [UNNotificationCategory
categoryWithIdentifier:@"GENERAL"
actions:@[]
intentIdentifiers:@[]
options:UNNotificationCategoryOptionCustomDismissAction];
// Create the custom actions for expired timer notifications.
UNNotificationAction* snoozeAction = [UNNotificationAction
actionWithIdentifier:@"SNOOZE_ACTION"
title:@"Snooze"
options:UNNotificationActionOptionNone];
UNNotificationAction* stopAction = [UNNotificationAction
actionWithIdentifier:@"STOP_ACTION"
title:@"Stop"
options:UNNotificationActionOptionForeground];
// Create the category with the custom actions.
UNNotificationCategory* expiredCategory = [UNNotificationCategory
categoryWithIdentifier:@"TIMER_EXPIRED"
actions:@[snoozeAction, stopAction]
intentIdentifiers:@[]
options:UNNotificationCategoryOptionNone];
// Register the notification categories.
UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
[center setNotificationCategories:[NSSet setWithObjects:generalCategory, expiredCategory,
nil]];let generalCategory = UNNotificationCategory(identifier: "GENERAL",
actions: [],
intentIdentifiers: [],
options: .customDismissAction)
// Create the custom actions for the TIMER_EXPIRED category.
let snoozeAction = UNNotificationAction(identifier: "SNOOZE_ACTION",
title: "Snooze",
options: UNNotificationActionOptions(rawValue: 0))
let stopAction = UNNotificationAction(identifier: "STOP_ACTION",
title: "Stop",
options: .foreground)
let expiredCategory = UNNotificationCategory(identifier: "TIMER_EXPIRED",
actions: [snoozeAction, stopAction],
intentIdentifiers: [],
options: UNNotificationCategoryOptions(rawValue: 0))
// Register the notification categories.
let center = UNUserNotificationCenter.current()
center.setNotificationCategories([generalCategory, expiredCategory])각 범주에 대해 최대 네 개의 사용자 지정 동작을 지정할 수 있지만 일부 상황에서는 처음 두 동작 만 표시 할 수 있습니다.
예를 들어, 배너에 알림을 표시 할 때 시스템에서 두 가지 동작 만 표시합니다.
UNNotificationCategory 개체를 초기화 할 때는 항상 가장 관련있는 작업이 배열에서 먼저 수행되도록 작업 배열을 구성하십시오.
UNTextInputNotificationAction 클래스를 사용하여 작업을 구성하면 시스템에서 사용자가 알림 응답의 일부로 텍스트를 입력 할 수 있는 방법을 제공합니다.
텍스트 입력 동작은 사용자로부터 자유 형식 텍스트를 수집하는 데 유용합니다.
예를 들어 메시지 앱을 사용하면 사용자가 메시지에 맞춤 응답을 제공 할 수 있습니다.
처리할 텍스트 입력 작업이 앱에 전달되면 시스템은 사용자 응답을 UNTextInputNotificationResponse 객체에 패키지화합니다.
사용자 지정 동작 선택 처리 방법에 대한 자세한 내용은 사용자 지정 동작 선택에 응답을 참조하십시오.
로컬 및 원격 알림은 알림이 배달 될 때 재생할 사용자 지정 알림 소리를 지정할 수 있습니다.
aiff, wav 또는 caf 파일로 오디오 데이터를 패키지화 할 수 있습니다.
시스템 사운드 기능으로 재생되므로 사용자 지정 사운드는 다음 오디오 데이터 형식 중 하나여야 합니다.
- 선형 PCM
- MA4 (IMA / ADPCM)
- μLaw
- aLaw
앱 번들이나 앱의 컨테이너 디렉토리에 있는 라이브러리/사운드 폴더에 맞춤 사운드 파일을 저장하십시오.
사용자 정의 사운드는 재생할 때 30초 미만이어야 합니다.
사용자 지정 사운드가이 한계를 초과하면 기본 시스템 사운드가 대신 재생됩니다.
afconvert 도구를 사용하여 사운드를 변환 할 수 있습니다.
예를 들어, 16 비트 선형 PCM 시스템 사운드 Submarine.aiff를 CAF 파일의 IMA4 오디오로 변환하려면 터미널 응용 프로그램에서 다음 명령을 사용하십시오.
afconvert /System/Library/Sounds/Submarine.aiff ~ / Desktop / sub.caf -d ima4 -f caff -v
사운드 파일을 알림과 연결하는 방법에 대한 자세한 내용은 알림 내용에 사운드 추가를 참조하십시오.
사용자는 언제든지 앱의 알림 설정을 변경할 수 있으므로 공유 UNUserNotificationCenter 객체의 getNotificationSettingsWithCompletionHandler: 메소드를 사용하여 언제든지 앱의 승인 상태를 확인할 수 있습니다.
이 메소드는 UNNotificationSettings 객체를 반환합니다.
이 객체는 앱의 현재 승인 상태와 현재 알림 환경을 반영합니다.
UNNotificationSettings 개체의 정보를 사용하여 앱의 알림 관련 코드를 조정하십시오.
앱의 알림, 배지 및 사운드 권한 설정을 공급자에게 전달하여 모든 원격 알림 페이로드에 포함 된 옵션을 조정할 수 있습니다.
공급자는 배포 및 관리하고 APNs를 사용하도록 구성된 서버이며 공급자에 대한 자세한 내용은 APNs 개요를 참조하십시오.
다른 설정을 사용하여 알림을 예약하고 구성하는 방법을 조정할 수 있습니다.
사용 가능한 설정에 대한 자세한 내용은 UNNotificationSettings 클래스 참조를 참조하십시오.
응용 프로그램이나 사용자가 로컬 및 원격 알림을 직접 처리하지 않으면 나중에 알림을 볼 수 있도록 알림 센터에 알림이 표시됩니다.
공유 UNUserNotificationCenter 개체의 getDeliveredNotificationsWithCompletionHandler: 메서드를 사용하여 알림 센터에 여전히 표시되는 알림 목록을 가져옵니다.
오래된 알림이 사용자에게 표시되어서는 안되는 것을 발견하면 removeDeliveredNotificationsWithIdentifiers: 메소드를 사용하여 알림을 제거 할 수 있습니다.