WNS를 사용하여 잠금 화면용 앱에 원시 푸시 알림을 배달하는 방법(HTML)
[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]
이 항목에서는 WNS(Windows 알림 서비스) 및 원시 푸시 알림을 사용하여 Windows 런타임 앱의 잠금 화면에서 백그라운드로 네트워크 알림을 받는 방법을 보여 줍니다. 이 항목에서는 푸시 알림 채널을 등록하여 서버로 보내는 프로세스, 백그라운드 작업을 등록하여 원시 푸시 알림에서 활성화하는 방법, 원시 푸시 알림을 채널로 보내고 백그라운드 작업을 활성화하는 방법을 안내합니다.
알아야 할 사항
기술
Windows.Networking.PushNotifications
원시 푸시 알림을 사용하여 백그라운드 네트워크 통신을 사용하도록 설정합니다.
사전 요구 사항
다음 정보는 원시 푸시 알림을 사용하는 네트워크 연결을 항상 연결된 상태로 유지해야 하는 모든 연결된 Windows 런타임 앱 또는 네트워크 인식 Windows 런타임 앱에 적용됩니다. 이 항목은 Windows 8.1, Windows Phone 8.1 및 Windows Server 2012 R2에서 JavaScript로 작성된 앱에 적용됩니다.
원시 푸시 알림을 사용하는 백그라운드 네트워크 연결은 JavaScript 앱 및 C++/XAML로 작성된 앱과 C#, VB.NET 또는 관리 C++로 작성된 .NET Framework 4.5를 사용하는 앱에서 지원됩니다. JavaScript 앱에 적용되는 백그라운드 네트워킹 작업에 대한 자세한 내용은 백그라운드 작업을 사용하여 앱 지원을 참조하세요.
지침
WNS를 사용하여 잠금 화면용 앱에 원시 푸시 알림 배달
WNS를 사용하는 앱은 실행 중이어야 푸시 알림을 받을 수 있는 것이 아니며, 사용자에게는 실행 중이 아닐 때에도 실행 중인 것처럼 보일 수 있습니다. 예를 들면 날씨 앱은 업데이트된 라이브 타일에 항상 최근 날씨를 표시할 수 있습니다. 중요한 사건이 발생할 때 사용자에게 화면 알림을 배달하는 데에도 WNS를 사용할 수 있습니다. 화면 알림의 좋은 예로 속보를 들 수 있습니다. 인터넷에 연결되고 Windows 8.1, Windows Phone 8.1 또는 Windows Server 2012 R2를 실행하는 모든 장치에서 WNS를 사용할 수 있습니다. 이러한 WNS 알림은 일반적으로 전송되자마자 배달됩니다.
WNS는 Windows 8.1의 시작 화면에 라이브 타일과 알림을 표시하는 데 도움이 되지만 IM, VoIP 및 메일과 같은 실시간 연결 시나리오를 지원하는 데에도 사용할 수 있습니다. WNS를 사용하는 앱이 잠금 화면에 추가되면, 백그라운드 작업을 활성화하는 데 이 앱을 사용할 수 있습니다. 백그라운드 작업은 앱이 백그라운드에 있을 때(더 이상 포그라운드에 있지 않을 때) 실행되는 앱 코드의 일부입니다.
WNS 알림으로 활성화할 수 있는 백그라운드 작업의 몇 가지 예는 다음과 같습니다.
- 잠금 화면의 메일 앱용 배지 아이콘을 키워 새 메일 메시지가 도착했음을 알릴 수 있도록 알림 배지 API를 호출합니다.
- 걸려오는 전화 통화를 사용자에게 알리는 VoIP 앱에 대해 알림을 표시할 수 있도록 수정 알림 API를 호출합니다.
푸시 알림에는 제 가지 유형이 있습니다.
- 타일 업데이트
- 배지 업데이트
- 알림 메시지
- 원시 알림
모든 Windows 런타임 앱은 포그라운드에 있을 때 처음 세 개의 푸시 알림을 사용할 수 있습니다. 잠금 화면용 앱만이 WNS에서 원시 푸시 알림을 받을 수 있습니다. 원시 알림은 WNS에서 원시 푸시 알림이 도착할 때(앱이 포그라운드에 있지 않을 경우에도) 잠금 화면용 앱이 백그라운드 작업의 형태로 코드를 실행할 수 있게 합니다.
대부분의 앱은 잠금 화면용 앱일 필요가 없으며 잠금 화면에 있지 않아도 WNS를 사용할 수 있습니다. 포그라운드에 있을 때 알림 메시지를 표시하고 타일과 배지를 업데이트하기 위해 모든 앱에서 WNS를 사용할 수 있습니다. 잠금 화면용 앱과 함께 WNS를 사용하는 것은 사용자에게 라이브 타일과 알림을 표시하기 위한 WNS 사용의 고급 버전입니다. 잠금 화면과 함께 WNS를 사용하려면 개발자는 먼저 MSDN의 WNS 설명서에 익숙해져야 합니다. 자세한 내용은 푸시 알림 개요를 참조하세요.
푸시 알림을 WNS에 보내려면 Windows 스토어를 통해 프로비전된 비밀 키가 필요합니다. WNS 인증 및 앱 구성에 대한 자세한 내용은 WNS(Windows 푸시 알림 서비스) 인증 방법을 참조하세요.
다음 단계는 원시 푸시 알림을 잠금 화면용 앱에 보내는 방법을 보여 줍니다.
- WNS 푸시 알림 채널을 등록하고 서버로 보냅니다.
- 알림 채널을 사용해 올바른 형식의 원시 푸시 알림을 WNS로 보냅니다.
- 원시 푸시 알림을 통해 활성화되는 백그라운드 작업을 작성합니다.
알림 채널에 대해 잘 구성된(Well-Formed) XML 페이로드의 HTTP PUSH를 수행함으로써 개발자의 앱 서버를 사용해 원시 푸시 알림이 클라이언트 앱으로 배달됩니다. 알림 채널은 클라이언트 앱에 의해 생성되고, 앱 서버로 전송되고, 푸시 알림을 보내는 데 사용됩니다. 알림 채널은 Windows 8.1의 사용자 계정에서 앱의 인스턴스에 대해 고유합니다.
푸시 알림 채널을 등록하고 서버로 보내기
Windows.Networking.PushNotifications 네임스페이스의 PushNotificationChannelManager 클래스에 있는 CreatePushNotificationChannelForApplicationAsync 메서드 중 하나를 호출하여 채널을 등록합니다.
이렇게 하면 앱의 푸시 알림 채널이 생성되며, 그 모양은 다음과 같습니다.
https://db3.notify.windows.com/?token=AQQAAADX3Wr8MA%2fCoZk4n1CmR5ZU7tdic6ksvG4TQq1tiyZtpetjfzuPHSjvliEeqaqJcPuo1jrVnbyCZvnbuU%2byLvZNDONTgUNu6lavpl5EGtWx7iQgpGkyHLbZeosxioQ42Cg%3d
채널을 서버로 보냅니다. 채널은 30일 후에 만료되므로 다음과 같은 모범 사례가 있습니다.
- 앱이 시작될 때마다 새 푸시 알림 채널을 가져오도록 등록하고, 이를 서버로 보내 사용자와 이전에 연결되었던 채널을 교체합니다.
- 항상 전원이 켜져 있는 로컬 컴퓨터에서, 채널이 만료되기 전에 때때로 채널을 갱신하도록 백그라운드 작업을 실행합니다. 이것을 유지 관리 타이머라고 합니다.
원시 푸시 알림을 통해 활성화할 백그라운드 작업 등록
원시 푸시 알림을 받으면 실행되는 백그라운드 작업을 작성하려면 백그라운드 작업에 의해 활성화될 코드를 포함하는 JavaScript 원본 파일을 지정해야 합니다. 이렇게 하려면 앱 매니페스트가 백그라운드 작업의 원본 파일을 가리키도록 해야 합니다. 앱 매니페스트에는 백그라운드 작업에 대한 JavaScript 원본 파일의 이름이 포함되어 있어야 합니다.
다음 샘플은 앱 매니페스트의 <Application> 요소 아래에 PushNotifyTask 백그라운드 작업에 대한 확장을 추가합니다.
<Extensions> <Extension Category="windows.backgroundTasks" StartPage="js\backgroundTask.js"> <BackgroundTasks> <Task Type="pushNotification" /> </BackgroundTasks> </Extension> </Extensions>
앱은 원시 푸시 알림에 대한 채널을 열어야 합니다.
다음 샘플은 원시 푸시 알림에 대해 채널을 여는 방법을 보여 줍니다.
// Open the channel. See the "Push and Polling Notifications" sample for more detail function openNotificationsChannel() { var channelOperation = pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync(); WinJS.log && WinJS.log("Opening a channel...", "sample", "status"); return channelOperation.then(function (newChannel) { WinJS.log && WinJS.log("Channel request succeeded!", "sample", "status"); document.getElementById("scenario1ChannelOutput").value = newChannel.uri; SdkSample.channel = newChannel; }, function (error) { WinJS.log && WinJS.log("Could not create a channel (error number: " + error.number + ")", "sample", "error"); } ); }
원시 푸시 알림을 받을 때 활성화될 백그라운드 작업도 등록해야 합니다.
다음 샘플은 원시 푸시 알림에 대한 백그라운드 작업을 등록하는 방법을 보여 줍니다.
// Register the background task for raw notifications // function registerBackgroundTask() { var taskBuilder = new background.BackgroundTaskBuilder(); var trigger = new background.PushNotificationTrigger(); taskBuilder.setTrigger(trigger); taskBuilder.taskEntryPoint = sampleTaskEntryPoint; taskBuilder.name = sampleTaskName; try { var task = taskBuilder.register(); task.addEventListener("completed", backgroundTaskComplete); WinJS.log && WinJS.log("Background task registered", "sample", "status"); } catch (e) { WinJS.log && WinJS.log("Registration error: " + e.message, "sample", "error"); unregisterBackgroundTask(); } } function unregisterBackgroundTask() { var iter = background.BackgroundTaskRegistration.allTasks.first(); while (iter.hasCurrent) { var task = iter.current.value; if (task.name === sampleTaskName) { task.unregister(true); return true; } iter.moveNext(); } return false; }
백그라운드 작업이 트리거될 때 실행될 함수의 코드도 제공해야 합니다.
원시 푸시 알림을 사용하는 백그라운드 네트워크 알림을 받는 백그라운드 작업을 작성하는 방법에 대한 자세한 내용은 원시 푸시 알림에 대해 백그라운드 작업을 작성하는 방법을 참조하세요.
참고
백그라운드 작업에서는 앱 UI(사용자 인터페이스)의 요소를 참조할 수 없는데, 이는 앱의 UI 요소가 실행되고 있지 않기 때문입니다. 따라서 네트워크 전송에 대한 콜백은 UI STA(단일 스레드 아파트)에 선호도가 높으면 안 됩니다. UI STA(앱 STA라고도 함)에 선호도가 있는 개체는 백그라운드 작업에서 액세스하면 안 됩니다.
백그라운드 작업에서 코드가 실행되고 있으면 활성화를 위해 앱을 설정하고, 클라이언트와 서버 간 상태를 동기화하고, 알림을 사용자에게 표시할 수 있습니다.
원시 푸시 알림은 배지 및 타일 알림과 유사합니다. 중요한 차이점은, 원시 푸시 알림의 페이로드에는 Windows 8.1 사용자 인터페이스의 일부를 업데이트하는 특성이 포함되어 있지 않다는 것입니다. 원시 푸시 알림의 페이로드는 백그라운드 작업이 활성화되면 앱으로 직접 전달되는 모든 컨텍스트 데이터입니다. 앱은 서버에서 보낸 컨텍스트 데이터의 형식을 이해해야 합니다.
서버에서 원시 푸시 알림을 보내려면 먼저 다음을 수행해야 합니다.
원시 푸시 알림을 채널로 보내고 백그라운드 작업을 활성화하기
Windows 스토어에 앱을 등록했으며 개인 키와 패키지 SID를 가지고 있는지 확인합니다.
서버에서 푸시 알림을 보내기 전에 개인 키와 패키지 SID를 사용해 WNS를 인증하도록 앱 서버에 대한 코드를 작성합니다.
WNS 원시 푸시 알림을 적절히 만들고, Windows 런타임 앱에서 전에 받은 알림 채널에 대해 HTTP POST를 수행합니다. HTTP POST에는 몇 가지 추가 HTTP 헤더를 포함해야 합니다.
- X-WNS-Type=wns/raw
- Content-Type=application/octet-stream
- Authorization="Bearer" 문자열, 공백, 인증 단계에서 받은 권한 부여 토큰
HTTP POST의 본문에는 원시 푸시 알림을 받아 트리거된 백그라운드 작업을 실행할 때 클라이언트 앱에 제공할 컨텍스트가 포함되어 있어야 합니다. 원시 알림 페이로드에 포함할 수 있는 최대 데이터 양은 5KB입니다.
클라이언트에서 알림을 받으면 백그라운드 작업이 활성화되고, 지정된 데이터 페이로드가 앱의 백그라운드 작업 코드를 통해 전달되고 액세스할 수 있게 됩니다.
이전 단계
원시 푸시 알림을 사용하는 백그라운드 네트워크 알림을 받는 잠금 화면용 앱을 만드는 방법에 대한 자세한 내용은 빠른 시작: 백그라운드 원시 푸시 알림을 사용하는 잠금 화면용 앱 만들기를 참조하세요.
이후 단계
원시 푸시 알림을 사용하는 백그라운드 네트워크 알림을 받는 백그라운드 작업을 작성하는 방법에 대한 자세한 내용은 원시 푸시 알림에 대해 백그라운드 작업을 작성하는 방법을 참조하세요.
원시 푸시 알림 사용에 대한 지침 및 검사 목록에 대한 자세한 내용은
원시 알림에 대한 지침 및 검사 목록을 참조하세요.
관련 항목
다른 리소스
WNS(Windows 푸시 알림 서비스)를 사용하여 인증하는 방법
WNS를 사용하여 잠금 화면용 앱에 원시 푸시 알림을 배달하는 방법
원시 푸시 알림에 대해 백그라운드 작업을 작성하는 방법
백그라운드 원시 푸시 알림을 사용하는 잠금 화면용 앱을 만드는 방법
참조
Windows.ApplicationModel.Background
Windows.Networking.BackgroundTransfer
Windows.Networking.PushNotifications
샘플