Siri는 귀하의 앱이 Notifications API를 통해 제공하는 온디바이스 정보를 사용하여 검색, 뉴스, Safari 및 기타 앱에서 사용자에게 제안을 제공할 수 있습니다.
사용자는 앱에 대한 Siri 및 검색 설정을 통해 언제든지 허용하도록 이 기능을 변경할 수 있습니다.
let content = UNMutableNotificationContent()
content.title = "Weekly Staff Meeting"
content.body = "Every Tuesday at 2pm"
UNCalendarNotificationTrigger, UNTimeIntervalNotificationTrigger 또는 UNLocationNotificationTrigger 개체를 사용하여 알림을 전달하기 위한 조건을 지정합니다.
각 트리거 개체에는 서로 다른 매개변수가 필요합니다.
예를 들어 달력 기반 트리거를 사용하려면 배달 날짜와 시간을 지정해야 합니다.
아래는 시스템이 매주 화요일 오후 2시에 알림을 전달하도록 구성하는 방법을 보여줍니다.
DateComponents 구조는 이벤트의 타이밍을 지정합니다.
repeats 매개변수를 true로 설정하여 트리거를 구성하면 시스템이 전달 후 이벤트를 다시 예약합니다.
// Configure the recurring date.
var dateComponents = DateComponents()
dateComponents.calendar = Calendar.current
dateComponents.weekday = 3 // Tuesday
dateComponents.hour = 14 // 14:00 hours
// Create the trigger as a repeating event.
let trigger = UNCalendarNotificationTrigger(
dateMatching: dateComponents, repeats: true)
콘텐츠 및 트리거 조건을 포함하는 UNNotificationRequest 개체를 만들고 add(_:withCompletionHandler:)
메서드를 호출하여 시스템과 함께 요청을 예약합니다.
아래는 위에서 설정한 내용을 사용하여 요청 객체를 채우는 예를 보여줍니다.
// Create the request
let uuidString = UUID().uuidString
let request = UNNotificationRequest(identifier: uuidString,
content: content, trigger: trigger)
// Schedule the request with the system.
let notificationCenter = UNUserNotificationCenter.current()
notificationCenter.add(request) { (error) in
if error != nil {
// Handle any errors.
}
}
UNUserNotificationCenter의 removePendingNotificationRequests(withIdentifiers:)
메서드를 호출하세요.실행 가능한 알림을 통해 사용자는 알림 인터페이스에서 알림에 직접 응답할 수 있습니다.
알림 내용 외에도 실행 가능한 알림은 사용자가 취할 수 있는 작업을 나타내는 하나 이상의 버튼을 표시합니다.
버튼 중 하나를 탭하면 앱을 포그라운드로 가져오지 않고 선택한 작업이 앱으로 전달됩니다. 앱이 실행 가능한 알림 유형을 지원하는 경우 연결된 작업을 처리해야 합니다.
>앱의 지원되는 카테고리를 선언하는 동시에 실행 가능한 알림 유형을 선언합니다. 자세한 내용은 실행 가능한 알림 유형 선언을 참조하십시오.
공유 UNUserNotificationCenter 개체의 대리자 개체에서 선택한 작업을 처리합니다.
사용자가 작업을 선택하면 시스템은 백그라운드에서 앱을 시작하고 대리자의 userNotificationCenter(_:didReceive:withCompletionHandler:)
메서드를 호출합니다.
응답 개체의 actionIdentifier 속성 값을 앱의 작업 또는 시스템 정의 작업 중 하나와 일치시킵니다.
시스템은 사용자가 알림을 닫거나 앱을 실행할 때 특별한 작업을 보고합니다.
Listing 1은 회의 초대와 관련된 작업을 처리하는 예를 보여줍니다.
ACCEPT_ACTION 및 DECLINE_ACTION 문자열은 회의 초대에 대한 적절한 응답을 생성하는 앱별 작업을 식별합니다.
사용자가 앱 정의 작업 중 하나를 선택하지 않은 경우 메서드는 사용자가 앱을 시작할 때까지 초대를 저장합니다.
Listing 1 Handling the actions in your actionable notifications
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler:
@escaping () -> Void) {
// Get the meeting ID from the original notification.
let userInfo = response.notification.request.content.userInfo
if response.notification.request.content.categoryIdentifier ==
"MEETING_INVITATION" {
// Retrieve the meeting details.
let meetingID = userInfo["MEETING_ID"] as! String
let userID = userInfo["USER_ID"] as! String
switch response.actionIdentifier {
case "ACCEPT_ACTION":
sharedMeetingManager.acceptMeeting(user: userID,
meetingID: meetingID)
break
case "DECLINE_ACTION":
sharedMeetingManager.declineMeeting(user: userID,
meetingID: meetingID)
break
case UNNotificationDefaultActionIdentifier,
UNNotificationDismissActionIdentifier:
// Queue meeting-related notifications for later
// if the user does not act.
sharedMeetingManager.queueMeetingForDelivery(user: userID,
meetingID: meetingID)
break
default:
break
}
}
else {
// Handle other notification types...
}
// Always call the completion handler when done.
completionHandler()
}
앱이 포그라운드에서 실행 중일 때 알림이 도착하면 시스템은 해당 알림을 앱에 직접 전달합니다.
알림을 받으면 알림의 페이로드를 사용하여 원하는 작업을 수행할 수 있습니다.
예를 들어 알림에 포함된 새 정보를 반영하도록 앱 인터페이스를 업데이트할 수 있습니다.
그런 다음 예약된 경고를 표시하지 않거나 해당 경고를 수정할 수 있습니다.
알림이 도착하면 시스템은 UNUserNotificationCenter 개체의 대리자의 userNotificationCenter(_:willPresent:withCompletionHandler:)
메서드를 호출합니다.
이 방법을 사용하여 알림을 처리하고 시스템에 원하는 진행 방식을 알립니다.
Listing 2 는 캘린더 앱에 대한 이 메소드의 버전을 보여줍니다.
회의 초대장이 도착하면 앱은 사용자 지정 queueMeetingForDelivery 메서드를 호출하여 앱 인터페이스에 새 초대를 표시합니다.
앱은 또한 사운드 값을 완료 핸들러에 전달하여 알림의 사운드를 재생하도록 시스템에 요청합니다.
다른 알림 유형의 경우 이 메서드는 알림을 침묵시킵니다.
Listing 2 Processing notifications in the foreground
```swift
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler:
@escaping (UNNotificationPresentationOptions) -> Void) {
if notification.request.content.categoryIdentifier ==
"MEETING_INVITATION" {
// Retrieve the meeting details.
let meetingID = notification.request.content.
userInfo["MEETING_ID"] as! String
let userID = notification.request.content.
userInfo["USER_ID"] as! String
// Add the meeting to the queue.
sharedMeetingManager.queueMeetingForDelivery(user: userID,
meetingID: meetingID)
// Play a sound to let the user know about the invitation.
completionHandler(.sound)
return
}
else {
// Handle other notification types...
}
// Don't alert the user for other types.
completionHandler(UNNotificationPresentationOptions(rawValue: 0))
}
```
PushKit에 앱을 등록한 경우 PushKit 유형을 대상으로 하는 알림은 항상 앱에 직접 전달되며 사용자에게는 표시되지 않습니다.
앱이 포그라운드 또는 백그라운드에 있는 경우 시스템은 앱에 알림을 처리할 시간을 줍니다.
앱이 실행되고 있지 않은 경우 시스템은 알림을 처리할 수 있도록 백그라운드에서 앱을 실행합니다.
PushKit 알림을 보내려면 제공자 서버가 알림의 주제를 앱의 합병증과 같은 적절한 대상으로 설정해야 합니다.
PushKit 알림 등록에 대한 자세한 내용은 PushKit을 참조하십시오.