Share via


푸시 알림 개요

원시 알림은 짧고 일반적인 목적의 알림으로, 오로지 사용 안내만 하며 UI 구성 요소는 포함하지 않습니다. 다른 푸시 알림과 마찬가지로 WNS(Windows 푸시 알림 서비스) 기능은 클라우드 서비스에서 앱으로 원시 알림을 전달합니다.

사용자가 앱에 권한을 부여한 경우 백그라운드 작업을 실행하도록 앱을 트리거하는 등 다양한 용도로 원시 알림을 사용할 수 있습니다. WNS를 사용하여 앱과 통신하면 영구 소켓 연결 만들기, HTTP GET 메시지 전송 및 기타 서비스-앱 연결의 처리 오버헤드를 방지할 수 있습니다.

Important

원시 알림을 이해하려면 WNS(Windows 푸시 알림 서비스) 개요에서 설명하는 개념을 숙지하는 것이 가장 좋습니다.

 

알림, 타일 및 배지 푸시 알림과 마찬가지로 할당된 채널 URI(Uniform Resource Identifier)를 통해 앱의 클라우드 서비스에서 WNS로 원시 알림이 푸시됩니다. 그러면 WNS에서 해당 채널과 연결된 디바이스 및 사용자 계정에 알림을 전달합니다. 다른 푸시 알림과 달리 원시 알림에는 지정된 형식이 없습니다. 페이로드의 콘텐츠는 전적으로 앱에서 정의됩니다.

원시 알림을 활용할 수 있는 앱의 그림으로, 이론적인 문서 공동 작업 앱을 살펴보겠습니다. 같은 문서를 동시에 편집하는 두 사용자의 경우를 생각해 보세요. 공유 문서를 호스트하는 클라우드 서비스는 원시 알림을 사용하여 다른 사용자가 변경한 경우 각 사용자에게 알릴 수 있습니다. 원시 알림에는 문서의 변경 내용이 반드시 포함되어 있지는 않지만, 대신 각 사용자의 앱 복사본이 중앙 위치에 연결하고 사용 가능한 변경 내용을 동기화하도록 신호를 보내게 됩니다. 원시 알림을 사용하면 앱과 해당 클라우드 서비스가 문서가 열린 전체 기간 동안 영구 연결을 유지하는 오버헤드를 줄일 수 있습니다.

원시 알림의 작동 방식

모든 원시 알림은 푸시 알림입니다. 따라서 푸시 알림을 보내고 받는 데 필요한 설정은 원시 알림에도 적용됩니다.

  • 원시 알림을 보내려면 유효한 WNS 채널이 있어야 합니다. 푸시 알림 채널을 획득하는 방법에 대한 자세한 내용은 알림 채널을 요청, 생성 및 저장하는 방법을 참조하세요.
  • 앱의 매니페스트에 인터넷 기능을 포함해야 합니다. Microsoft Visual Studio 매니페스트 편집기의 기능 탭에서 이 옵션을 인터넷(클라이언트)으로 찾을 수 있습니다. 자세한 내용은 기능을 참조하세요.

알림의 본문은 앱 정의 형식입니다. 클라이언트는 데이터를 앱에서만 이해해야 하는 Null로 종료된 문자열(HSTRING)로 받습니다.

클라이언트가 오프라인인 경우 X-WNS-Cache-Policy 헤더가 알림에 포함된 경우에만 원시 알림이 WNS에 의해 캐시됩니다. 그러나 디바이스가 다시 온라인 상태가 되면 하나의 원시 알림만 캐시되고 전달됩니다.

원시 알림이 클라이언트에서 따를 수 있는 경로는 세 가지뿐입니다. 이 경로는 알림 제공 이벤트를 통해 실행 중인 앱에 전달되거나, 백그라운드 작업으로 전송되거나, 삭제됩니다. 따라서 클라이언트가 오프라인 상태이고 WNS가 원시 알림을 전달하려고 하면 알림이 삭제됩니다.

원시 알림 만들기

원시 알림을 보내는 것은 타일, 알림 메시지 또는 배지 푸시 알림을 보내는 것과 유사하며 다음과 같은 차이점이 있습니다.

  • HTTP Content-Type 헤더는 "application/octet-stream"으로 설정해야 합니다.
  • HTTP X-WNS-Type 헤더는 "wns/raw"로 설정해야 합니다.
  • 알림 본문은 크기가 5KB보다 작은 문자열 페이로드를 포함할 수 있지만 빈 문자열이 아니어야 합니다.

원시 알림은 더 많은 양의 데이터를 동기화하거나 알림 콘텐츠에 따라 로컬 상태를 수정하기 위해 서비스에 직접 연락하는 등의 작업을 수행하도록 앱을 트리거하는 짧은 메시지로 사용됩니다. WNS 푸시 알림은 배달되도록 보장할 수 없으므로 앱 및 클라우드 서비스는 클라이언트가 오프라인 상태일 때와 같이 원시 알림이 클라이언트에 도달하지 못할 수 있는 가능성을 고려해야 합니다.

푸시 알림을 보내는 방법에 대한 자세한 내용은 빠른 시작: 푸시 알림 보내기를 참조하세요.

원시 알림 받기

앱이 원시 알림을 받을 수 있는 두 가지 방법이 있습니다.

앱은 두 메커니즘을 모두 사용하여 원시 알림을 받을 수 있습니다. 앱이 원시 알림에 의해 트리거되는 알림 배달 이벤트 처리기와 백그라운드 작업을 모두 구현하는 경우 앱이 실행될 때 알림 배달 이벤트가 우선합니다.

  • 앱이 실행 중인 경우 알림 배달 이벤트가 백그라운드 작업보다 우선하게 되고 앱은 알림을 처리할 수 있는 첫 번째 기회를 갖게 됩니다.
  • 알림 전달 이벤트 처리기는 이벤트의 PushNotificationReceivedEventArgs.Cancel 속성을 true로 설정하여 처리기가 종료되면 원시 알림을 백그라운드 작업에 전달하지 않도록 지정할 수 있습니다. Cancel 속성이 false로 설정되었거나 설정되지 않은 경우(기본값은 false), 알림 전달 이벤트 처리기가 작업을 수행한 후 원시 알림이 백그라운드 작업을 트리거합니다.

알림 전달 이벤트

앱은 알림 전달 이벤트(PushNotificationReceived)를 사용하여 앱이 사용 중인 동안 원시 알림을 받을 수 있습니다. 클라우드 서비스가 원시 알림을 보내면 실행 중인 앱은 채널 URI에서 알림 배달 이벤트를 처리하여 수신할 수 있습니다.

앱이 실행 중이 아니고 백그라운드 작업을 사용하지 않는 경우에는 WNS에서 해당 앱으로 보내진 원시 알림이 수신되면 삭제합니다. 클라우드 서비스의 리소스를 낭비하지 않으려면 앱이 활성 상태인지 여부를 추적하기 위해 서비스에 대한 논리를 구현하는 것이 좋습니다. 이 정보의 두 가지 원본이 있습니다. 앱은 알림 수신을 시작할 준비가 되었다는 것을 서비스에 명시적으로 알릴 수 있으며, WNS는 서비스를 중지할 시기를 알릴 수 있습니다.

  • 앱이 클라우드 서비스에 알림: 앱은 해당 서비스에 연결하여 앱이 포그라운드에서 실행 중임을 알릴 수 있습니다. 이 방법의 단점은 앱이 서비스에 매우 자주 연결할 수 있다는 것입니다. 그러나 앱이 들어오는 원시 알림을 받을 준비가 되면 서비스가 항상 알 수 있다는 이점이 있습니다. 또 다른 장점은 앱이 서비스에 연결할 때 서비스가 브로드캐스트가 아닌 해당 앱의 특정 인스턴스에 원시 알림을 보내는 것을 알고 있다는 것입니다.

  • 클라우드 서비스가 WNS 응답 메시지에 응답: 앱 서비스는 WNS에서 반환된 X-WNS-NotificationStatusX-WNS-DeviceConnectionStatus 정보를 사용하여 앱으로의 원시 알림 전송을 중지할 시기를 결정할 수 있습니다. 서비스에서 채널에 HTTP POST로 알림을 보내면 응답에서 다음 메시지 중 하나를 수신할 수 있습니다.

    • X-WNS-NotificationStatus: 삭제됨: 클라이언트에서 알림을 받지 못했음을 나타냅니다. 삭제된 응답은 앱이 더 이상 사용자의 디바이스에서 포그라운드에 있지 않아서 발생한다고 가정하는 것이 안전합니다.
    • X-WNS-DeviceConnectionStatus: disconnected 또는 X-WNS-DeviceConnectionStatus: tempconnected: Windows 클라이언트가 더 이상 WNS에 연결되지 않음을 나타냅니다. WNS에서 이 메시지를 받으려면 알림의 HTTP POST에서 X-WNS-RequestForStatus 헤더를 설정하여 요청해야 합니다.

    앱의 클라우드 서비스는 이러한 상태 메시지의 정보를 사용하여 원시 알림을 통한 통신 시도를 중단할 수 있습니다. 앱이 포그라운드로 다시 전환될 때 서비스에서 앱에 의해 연결되면 원시 알림 보내기를 다시 시작할 수 있습니다.

    X-WNS-NotificationStatus를 사용하여 알림이 클라이언트에 성공적으로 배달되었는지 여부를 결정해서는 안 됩니다.

    자세한 내용은 푸시 알림 서비스 요청 및 응답 헤더를 참조하세요.

원시 알림에 의해 트리거되는 백그라운드 작업

Important

원시 알림 백그라운드 작업을 사용하기 전에 BackgroundExecutionManager.RequestAccessAsync를 통해 앱에 백그라운드 액세스 권한이 부여되어야 합니다.

 

백그라운드 작업은 PushNotificationTrigger에 등록해야 합니다. 등록되지 않은 경우 원시 알림을 받으면 작업이 실행되지 않습니다.

원시 알림에 의해 트리거되는 백그라운드 작업을 사용하면 앱이 실행되지 않는 경우에도 앱의 클라우드 서비스가 앱에 연결할 수 있습니다(실행되도록 트리거될 수 있음). 이는 앱이 지속적인 연결을 유지할 필요 없이 발생합니다. 원시 알림은 백그라운드 작업을 트리거할 수 있는 유일한 알림 유형입니다. 그러나 알림 메시지, 타일 및 배지 푸시 알림은 백그라운드 작업을 트리거할 수 없지만 원시 알림에 의해 트리거되는 백그라운드 작업은 타일을 업데이트하고 로컬 API 호출을 통해 알림 메시지를 호출할 수 있습니다.

원시 알림에 의해 트리거되는 백그라운드 작업이 작동하는 방식을 보여주는 그림으로, 전자책을 읽는 데 사용되는 앱을 살펴보겠습니다. 첫째, 사용자가 다른 장치에서 온라인으로 책을 구매합니다. 이에 대한 응답으로 앱의 클라우드 서비스는 책을 구입했으며 앱이 다운로드해야 한다는 페이로드를 사용하여 각 사용자의 디바이스에 원시 알림을 보낼 수 있습니다. 그런 다음 앱은 앱의 클라우드 서비스에 직접 연결하여 새 책의 백그라운드 다운로드를 시작하므로 나중에 사용자가 앱을 시작할 때 해당 책이 이미 있고 읽을 준비가 된 것입니다.

원시 알림을 사용하여 백그라운드 작업을 트리거하려면 앱에서 다음을 수행해야 합니다.

  1. BackgroundExecutionManager.RequestAccessAsync를 사용하여 백그라운드에서 작업을 실행할 수 있는 권한을 요청합니다(사용자가 언제든지 해지할 수 있습니다).
  2. 백그라운드 작업을 구현합니다. 자세한 내용은 백그라운드 작업을 사용하여 앱 지원을 참조하세요.

그러면 앱에 대한 원시 알림을 받을 때마다 PushNotificationTrigger에 대한 응답으로 백그라운드 작업이 호출됩니다. 백그라운드 작업은 원시 알림의 앱별 페이로드를 해석하고 해당 페이로드에 대해 작동합니다.

각 앱에 대해 한 번에 하나의 백그라운드 작업만 실행할 수 있습니다. 백그라운드 작업이 이미 실행 중인 앱에 대해 백그라운드 작업이 트리거되는 경우 새 작업이 실행되기 전에 첫 번째 백그라운드 작업이 완료되어야 합니다.

다른 리소스

Windows 8.1용 원시 알림 샘플과 Windows 8.1용 푸시 및 정기 알림 샘플을 다운로드하고 Windows 10 앱에서 소스 코드를 다시 사용하여 자세히 알아볼 수 있습니다.