"Deliver notifications that wake your app and update it in the background."
앱을 깨우고 백그라운드에서 업데이트하는 노티피케이션을 전달합니다.
앱의 서버 기반 컨텐트가 빈번하게 바뀌지 않거나 불규칙적인 주기로 바뀐다면, 새 컨탠트가 사용가능할 때 백그라운드 노티피케이션을 사용해서 앱에게 알려줄 수 있습니다. 백그라운드 노티피케이션은 알림, 소리 재생, 아이콘에 badge를 다는 것 모두 없는 원격 노티피케이션입니다. 이것은 백그라운드에서 앱을 깨우고 서버로부터 다운로드를 초기화하기 위한 시간을 주고 컨텐트를 업데이트할 시간을 줍니다.
Important
시스템은 노티피케이션을 낮은 우선순위로 처리합니다. 앱의 리프레시를 위해 노티키페이션을 사용할 수 있지만 시스템은 전달을 보장하지 않습니다. 더불어 시스템은 전체 수가 초가되면 백그라운드 노티피케이션 전달을 제한합니다. 시스템에 의해 허용되는 백그라운드 노티피케이션의 수는 현재 상태에 달라지지만 한 시간 안에 둘 혹은 셋 이상을 보내지 않아야 합니다.
백그라운드 노티피케이션을 받으려면 앱에 원격 노티피케이션 백그라운드 모드를 추가해야 합니다. Signing & Capability 탭에서 백그라운드 모드 기능을 추가하고, 원격 노티피케이션 체크박스를 선택합니다(Figure 1).
Figure 1 Enabling the remote notifications background mode
watchOS의 경우 WatchKit
확장에 이 기능을 추가해야 합니다..
백그라운드 노티피케이션을 보내려면 Listing 1에서 보이는 것처럼 컨텐트만 사용 가능한 키를 포함하는 aps 딕셔너리와 함께 원격 노티피케이션을 생성해야 합니다. 페이로드에 커스텀 키를 포함시킬 수 있지만 aps 딕셔너리는 사용자 상호작용을 발생시키는 키를 포함하지 않아야 합니다.
Listing 1 Sample payload for a background notification
{
"aps" : {
"content-available" : 1
},
"acme1" : "bar",
"acme2" : 42
}
추가적으로 노티피케이션의 POST
요청은 백그라운드의 값을 갖는 apns-push-type 헤더 필드를 포함해야 하고, 값이 5인 apns-priority 필드를 포함해야 합니다. APNs 서버는 애플 워치에 푸시 노티피케이션을 보낼 때 apns-push-type 필드를 요구하며, 모든 플랫폼에 이에 대한 내용을 권장합니다. 더 많은 정보는 Create and Send a POST Request to APNs를 보시기 바랍니다.
Create and Send a POST Request to APNs
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns#2947607
https://velog.io/@panther222128/Sending-Notification-Requests-to-APNs
기기가 백그라운드 노티피케이션을 받으면, 시스템은 노티피케이션의 전달을 갖고 있고 지연시킬 수 있습니다. 이는 아래의 사이드 이펙트를 가질 수 있습니다.
백그라운드 노티피케이션을 전달하려면 시스템은 백그라운드에서 앱을 깨웁니다. iOS에서는 이후 앱 딜리게이트의 application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
메소드를 호출합니다. watchOS에서는 확장 딜리게이트의 didReceiveRemoteNotification(_:fetchCompletionHandler:)
메소드를 호출합니다. 앱은 작업 수행 및 제공된 컴플리션 핸들러 호출을 위한 시간으로 30초를 갖습니다. 더 많은 정보는 Handling Notifications and Notification-Related Actions를 보시기 바랍니다.
Handling Notifications and Notification-Related Actions
https://developer.apple.com/documentation/usernotifications/handling_notifications_and_notification-related_actions
https://velog.io/@panther222128/Handling-Notifications-and-Notification-Related-Actions
JSON 페이로드로 사용자의 기기에 노티피케이션을 전송합니다.
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/generating_a_remote_notification
https://velog.io/@panther222128/Generating-a-Remote-Notification
애플 푸시 노티피케이션 서비스(APNs)에 원격 노티피케이션 페이로드 및 기기 토큰 정보를 전송합니다.
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns
https://velog.io/@panther222128/Sending-Notification-Requests-to-APNs
APNs 서버가 반환한 상태 코드에 응답합니다.
https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/handling_notification_responses_from_apns
https://velog.io/@panther222128/Handling-Notification-Responses-from-APNs