빠른 시작: 원시 알림 백그라운드 작업 만들기 및 등록(HTML)
[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]
참고 JavaScript를 사용하지 않는 경우 빠른 시작: 원시 알림 백그라운드 작업 만들기 및 등록(XAML)을 참조하세요.
Windows 스토어 앱에 대한 백그라운드 작업 기능을 만들고 등록할 수 있습니다. 그러면 이 코드는 원시 알림을 받을 경우 이에 대한 응답으로 실행되며 앱이 포그라운드에 있지 않을 때 앱에 기능을 제공합니다.
이 절차를 완료하려면 세 개의 개별 파일, 즉 앱의 코드, 앱의 매니페스트 및 백그라운드 작업 코드가 포함된 새 JavaScript 파일을 편집해야 합니다.
사전 요구 사항
이 항목의 내용을 이해하거나 이 항목에서 제공하는 코드를 사용하려면 다음 사항이 필요합니다.
- 푸시 알림에 대한 지식. 자세한 내용은 푸시 알림 개요를 참조하세요.
- 원시 푸시 알림에 대한 지식. 자세한 내용은 원시 알림 개요를 참조하세요.
- WNS(Windows 푸시 알림 서비스)로 푸시 알림을 보낼 수 있는 클라우드 서비스. 자세한 내용은 빠른 시작: 푸시 알림 보내기를 참조하세요.
- 백그라운드 작업을 위한 부모 앱. 이 앱에는 잠금 화면에서 표시될 수 있는 권한이 부여되어야 합니다. 자세한 내용은 잠금 화면 개요를 참조하세요.
지침
1. 백그라운드 작업 클래스 만들기
프로젝트에서 새 JavaScript(.js) 파일을 만듭니다. 이 경우 이 파일의 이름을 examplebackgroundtask.js
로 지정합니다. 이 파일의 코드는 원시 알림을 받을 때 트리거되어 백그라운드에서 실행됩니다. 아래 표시된 JavaScript 함수 구조를 이 파일에 추가합니다.
이 예제의 doWork
함수(다른 이름을 지정할 수도 있음)에는 실제 백그라운드 작업을 구성하는 코드가 포함되어 있습니다. 먼저 이 함수는 백그라운드 작업의 현재 인스턴스에 대한 정보를 가져오는 데 사용되는 Windows.UI.WebUI.WebUIBackgroundTaskInstance 클래스를 통해 알림에서 내용을 검색합니다. 앱에서 정의한 원시 알림 내용과 관련된 코드의 본문이 "// ..." 주석으로 바뀝니다.
중요 이 작업 코드는 마지막에서 JavaScript의 기본 제공 close 함수를 호출합니다. JavaScript 백그라운드 작업이 작업을 완료하거나 취소될 때마다 이 메서드를 호출해야 합니다. 백그라운드 작업이 자동으로 닫히지 않으면 백그라운드 작업의 프로세스가 계속 존재하여, 백그라운드 작업이 완료된 경우에도 메모리와 배터리 수명을 소모할 수 있습니다.
(function () {
"use strict";
var backgroundTaskInstance = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;
function doWork() {
var notificationContent = backgroundTaskInstance.triggerDetails.content;
// ...
close();
}
doWork();
})();
2. 앱 매니페스트에서 백그라운드 작업 선언
참고 이 단계의 전제 조건으로, 백그라운드 작업이 지원되기 전에 앱에서 잠금 화면 옵션을 선택하고 배지 로고를 제공해야 합니다. 자세한 내용은 빠른 시작: 잠금 화면에 타일 및 배지 업데이트 표시를 참조하세요.
앱이 백그라운드 작업을 등록할 수 있으려면 먼저 앱 매니페스트에서 백그라운드 작업과 해당 트리거를 선언해야 합니다. 이 작업은 XML로 직접 수행하거나 Microsoft Visual Studio 매니페스트 편집기를 통해 수행할 수 있습니다.
매니페스트 편집기를 사용하려면 Visual Studio에서 프로젝트의 Package.appxmanifest 파일을 두 번 클릭합니다. 선언 탭의 사용 가능한 선언 드롭다운 목록에서 백그라운드 작업을 선택합니다. 트리거로 속성 아래에서 푸시 알림을 선택합니다. 시작 페이지 상자에 백그라운드 작업의 .js 파일 이름(여기서는
examplebackgroundtask.js
)을 입력합니다.앱에서 둘 이상의 백그라운드 작업을 사용하는 경우 각 작업에 대해 이 단계를 반복하여 매번 다른 파일을 가리키도록 합니다.
정보를 매니페스트의 XML에 직접 추가하려면 텍스트 편집기에서 매니페스트를 엽니다. Extensions 요소에서 백그라운드 작업 클래스에 대한 Extension 요소를 추가합니다. Category 특성을 "windows.backgroundTasks"로 설정하고 StartPage 특성에서 백그라운드 작업의 .js 파일 이름(여기서는
examplebackgroundtask.js
)을 지정해야 합니다.앱에서 둘 이상의 백그라운드 작업을 사용하는 경우 각 요소가 다른 .js 파일을 가리키도록 각 작업에 대해 개별 Extension 요소를 추가합니다.
백그라운드 작업에서 사용하는 각 트리거 유형을 나열해야 합니다. 여기서는 원시 알림에 대한 응답으로 트리거되는 백그라운드 작업을 만드는 것이므로 푸시 알림 트리거를 선언합니다. 해당 Task 요소를 "pushNotification"으로 설정하여 BackgroundTasks 요소를 Extension 요소에 추가합니다.
전체 Extension 요소는 다음과 같습니다.
<Extension Category="windows.backgroundTasks" StartPage="js\examplebackgroundtask.js">
<BackgroundTasks>
<Task Type="pushNotification"/>
</BackgroundTasks>
</Extension>
3. 앱에서 백그라운드 작업 등록
다음 예제는 원시 알림에 대한 응답으로 백그라운드 작업을 등록하기 위해 앱(예: Default.js 파일)에 추가할 코드를 제공합니다.
먼저 백그라운드 작업이 이미 등록되었는지 확인합니다. 이 단계는 중요합니다. 앱에서 기존 백그라운드 작업 등록을 확인하지 않는 경우 앱이 동일한 작업을 두 번 이상 등록할 수 있습니다. 이로 인해 성능 문제가 발생하고 CPU 사용량 때문에 작업이 완료되지 않을 수 있습니다.
이 예제에서는 Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTasks 속성을 반복하고 작업이 이미 등록된 경우 플래그를 true로 설정합니다.
var taskRegistered = false;
var exampleTaskName = "Example background task class name";
var background = Windows.ApplicationModel.Background;
var iter = background.BackgroundTaskRegistration.AllTasks.first();
while (iter.hasCurrent) {
var task = iter.current.value;
if (task.name === exampleTaskName) {
taskRegistered = true;
break;
}
iter.moveNext();
}
앱에서 백그라운드 작업이 등록되지 않은 것으로 확인하면 Windows.ApplicationModel.Background.BackgroundTaskBuilder.register 메서드를 호출하여 등록할 수 있습니다. 이 메서드 호출에 백그라운드 작업의 .js 파일 이름(여기서는 examplebackgroundtask.js
)과 PushNotificationTrigger 개체를 포함시킵니다.
if (taskRegistered != true) {
var builder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();
var trigger = new Windows.ApplicationModel.Background.PushNotificationTrigger();
builder.name = exampleTaskName;
builder.taskEntryPoint = "js\\ExampleBackgroundTask.js";
builder.setTrigger(trigger);
var task = builder.register();
}
요약
이제 여러분은 앱 내에서 백그라운드 작업을 등록하는 방법을 비롯하여 원시 알림과 함께 사용할 백그라운드 작업 클래스를 작성하는 기본 사항을 이해하고 있어야 합니다. 또한 Windows에서 앱이 백그라운드 작업을 등록하는 것을 허용하도록 앱 매니페스트를 업데이트하는 방법도 이해하고 있어야 합니다.
참고 백그라운드 작업 샘플(영문)을 다운로드하여 여러 가지 유형의 백그라운드 작업을 사용하는 완벽하고 강력한 JavaScript 앱의 컨텍스트에서 이러한 코드 예제 등을 확인할 수 있습니다.