Windows 8.1에서 스토어 디바이스 앱에 대한 디바이스 동기화 및 업데이트

Windows 8.1에서 UWP 앱은 디바이스 백그라운드 작업을 사용하여 주변 장치의 데이터를 동기화할 수 있습니다. 앱이 디바이스 메타데이터와 연결된 경우 해당 UWP 디바이스 앱은 디바이스 백그라운드 에이전트를 사용하여 펌웨어 업데이트와 같은 디바이스 업데이트를 수행할 수도 있습니다. 디바이스 백그라운드 에이전트는 디바이스가 동기화 및 업데이트되는 동안 사용자 동의를 보장하고 배터리 수명을 유지하는 데 도움이 되는 정책의 적용을 받습니다.

디바이스 동기화 및 업데이트 작업을 수행하려면 DeviceUseTrigger 및 DeviceServicingTrigger를 각각 사용하는 디바이스 백그라운드 작업을 만듭니다. 사용자 지정 USB 디바이스 샘플을 사용하여 이 작업을 수행하는 방법을 알아보려면 디바이스 백그라운드 작업 만들기를 참조하세요.

참고 항목

Windows 런타임 디바이스 API에는 디바이스 메타데이터가 필요하지 않습니다. 즉, 앱을 사용하기 위해 앱이 UWP 디바이스 앱일 필요는 없습니다. UWP 앱은 이러한 API를 사용하여 USB, HID(휴먼 인터페이스 디바이스), Bluetooth 디바이스 등에 액세스할 수 있습니다. 자세한 내용은 디바이스 통합을 참조 하세요.

디바이스 백그라운드 작업 개요

사용자가 UWP 앱을 화면으로 이동하면 Windows에서 메모리 내 앱을 일시 중단합니다. 이렇게 하면 다른 앱이 포그라운드를 가질 수 있습니다. 앱이 일시 중단되면 메모리에 상주하며 Windows에서 실행이 중지되었습니다. 이 경우 디바이스 백그라운드 작업의 도움 없이 동기화 및 업데이트와 같은 진행 중인 디바이스 작업이 중단됩니다. Windows 8.1은 앱이 일시 중단된 경우에도 앱이 백그라운드에서 안전하게 주변 장치에서 장기 실행 동기화 및 업데이트 작업을 수행할 수 있도록 하는 두 가지 새로운 백그라운드 작업 트리거인 DeviceUseTrigger 및 DeviceServicingTrigger를 제공합니다. 앱 일시 중단에 대한 자세한 내용은 시작, 다시 시작 및 멀티태스킹을 참조 하세요.

백그라운드 작업 트리거 디바이스 메타데이터 필요 설명
DeviceUseTrigger 아니요 앱이 일시 중단되는 동안 주변 장치에서 장기 실행 동기화 작업을 사용하도록 설정합니다. 백그라운드에서 디바이스를 동기화하려면 사용자가 앱에서 백그라운드 동기화를 승인해야 합니다. 또한 디바이스는 활성 I/O를 사용하여 PC에 연결되거나 페어링되어야 하며 최대 10분의 백그라운드 작업이 허용됩니다. 정책 적용에 대한 자세한 내용은 이 항목의 뒷부분에 설명되어 있습니다.
DeviceServicingTrigger 앱이 일시 중단되는 동안 nables 장기 실행 디바이스 업데이트(예: 설정 전송 또는 펌웨어 업데이트). 백그라운드에서 디바이스를 업데이트하려면 백그라운드 작업이 사용될 때마다 사용자 승인이 필요합니다. DeviceUseTrigger 백그라운드 작업과 달리 DeviceServicingTrigger 백그라운드 작업은 디바이스를 다시 부팅하고 연결을 끊을 수 있으며 최대 30분의 백그라운드 작업을 허용합니다. 정책 적용에 대한 자세한 내용은 이 항목의 뒷부분에 설명되어 있습니다.

디바이스 업데이트 작업을 수행하려면 앱이 권한 있는 앱으로 지정되어야 하므로 DeviceServicingTrigger에는 디바이스 메타데이터가 필요합니다.

앱 권한

장기 실행 디바이스 업데이트와 같은 일부 중요한 디바이스 작업은 권한 있는 앱에서만 수행할 수 있습니다. 권한 있는 앱은 디바이스 제조업체가 해당 작업을 수행할 수 있는 권한을 부여한 앱입니다. 디바이스 메타데이터는 디바이스에 대한 권한 있는 앱으로 지정된 앱(있는 경우)을 지정합니다.

디바이스 메타데이터 마법사를 사용하여 디바이스 메타데이터를 만들 때 UWP 디바이스 앱 정보 지정 페이지에서 앱을 지정합니다. 자세한 내용은 2단계: UWP 디바이스 앱에 대한 디바이스 메타데이터 만들기를 참조하세요.

지원되는 프로토콜

DeviceUseTrigger 및 DeviceServicingTrigger를 사용하는 디바이스 백그라운드 작업을 통해 앱은 일반적으로 UWP 앱에서 사용하는 시스템 트리거 작업에서 지원되지 않는 프로토콜을 통해 주변 디바이스와 통신할 수 있습니다.

프로토콜 DeviceServicingTrigger DeviceUseTrigger 시스템 트리거
USB deviceservicingtrigger supports usb. deviceusetrigger supports usb system triggers do not support usb
HID deviceservicingtrigger supports hid. deviceusetrigger supports hid system triggers do not support hid
Bluetooth RFCOMM deviceservicingtrigger supports bluetooth rfcomm. deviceusetrigger supports bluetooth rfcomm system triggers do not support bluetooth rfcomm
Bluetooth GATT deviceservicingtrigger supports bluetooth gatt. deviceusetrigger supports bluetooth gatt system triggers do not support bluetooth gatt
MTP deviceservicingtrigger supports mtp. deviceusetrigger does not support mtp system triggers do not support mtp
네트워크 유선 deviceservicingtrigger supports network wired. deviceusetrigger does not support network wired system triggers do not support network wired
네트워크 Wi-Fi deviceservicingtrigger supports networked wi-fi. deviceusetrigger does not support networked wi-fi system triggers do not support network wi-fi
IDeviceIOControl deviceservicingtrigger supports ideviceiocontrol. deviceusetrigger does not support ideviceiocontrol system triggers do not support ideviceiocontrol

앱 패키지 매니페스트에 백그라운드 작업 등록

앱은 백그라운드 작업의 일부로 실행되는 코드에서 동기화 및 업데이트 작업을 수행합니다. 이 코드는 IBackgroundTask(또는 JavaScript 앱용 전용 JavaScript 페이지)를 구현하는 Windows 런타임 클래스에 포함되어 있습니다. 디바이스 백그라운드 작업을 사용하려면 앱이 시스템 트리거 백그라운드 작업과 마찬가지로 포그라운드 앱의 앱 매니페스트 파일에서 선언해야 합니다.

앱 패키지 매니페스트 파일 의 이 예제에서 DeviceLibrary.SyncContentDeviceLibrary.UpdateFirmware 는 포그라운드 앱의 진입점입니다. DeviceLibrary.SyncContent는 DeviceUseTrigger를 사용하는 백그라운드 작업의 진입점입니다. DeviceLibrary.UpdateFirmware는 DeviceServicingTrigger를 사용하는 백그라운드 작업의 진입점입니다.

<Extensions>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
    <BackgroundTasks>
      <m2:Task Type="deviceUse" /> 
    </BackgroundTasks>
  </Extension>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.UpdateFirmware">
    <BackgroundTasks>
      <m2:Task Type="deviceServicing" /> 
    </BackgroundTasks>
  </Extension>
</Extensions>

디바이스 백그라운드 작업에서 디바이스 사용

DeviceUseTrigger 및 DeviceServicingTrigger 백그라운드 작업을 활용하도록 앱을 개발하려면 이 기본 단계 집합을 따릅니다. 백그라운드 작업에 대한 자세한 내용은 백그라운드 작업으로 앱 지원을 참조하세요.

  1. 앱은 앱 매니페스트에 백그라운드 작업을 등록하고 IBackgroundTask를 구현하는 Windows 런타임 클래스 또는 JavaScript 앱용 전용 JavaScript 페이지에 백그라운드 작업 코드를 포함합니다.

  2. 앱이 시작되면 DeviceUseTrigger 또는 DeviceServicingTrigger와 같은 적절한 형식의 디바이스 트리거 개체를 만들고 구성하고 나중에 사용할 수 있는 트리거 인스턴스를 저장합니다.

  3. 앱은 백그라운드 작업이 이전에 등록되었는지 여부를 검사 디바이스 트리거에 대해 등록합니다. 앱은 이 트리거와 연결된 작업에 대한 조건을 설정할 수 없습니다.

  4. 앱이 백그라운드 작업을 트리거해야 하는 경우 디바이스 트리거 개체에서 RequestAsync 활성화 메서드를 호출합니다.

  5. 백그라운드 작업은 다른 시스템 백그라운드 작업처럼 제한되지 않지만(CPU 시간 할당량 없음) 포그라운드 앱의 응답성을 유지하기 위해 우선 순위가 낮아집니다.

  6. 그런 다음 Windows는 트리거 유형에 따라 백그라운드 작업을 시작하기 전에 작업에 대한 사용자 동의를 요청하는 등 필요한 정책이 충족되었는지 확인합니다.

  7. Windows는 시스템 조건 및 작업 런타임을 모니터링하고 필요한 경우 필요한 조건이 더 이상 충족되지 않으면 작업을 취소합니다.

  8. 백그라운드 작업에서 진행률 또는 완료를 보고하면 앱은 등록된 작업의 진행률 및 완료된 이벤트를 통해 이러한 이벤트를 받습니다.

디바이스 백그라운드 작업을 사용할 때 고려해야 할 중요한 사항

  • DeviceUseTrigger 및 DeviceServicingTrigger를 사용하는 백그라운드 작업을 프로그래밍 방식으로 트리거하는 기능은 Windows 8.1에서 도입되었으며 디바이스 백그라운드 작업으로만 제한됩니다.

  • 주변 장치를 업데이트할 때 사용자 동의를 보장하기 위해 Windows에서 특정 정책을 적용합니다. 주변 장치를 동기화하고 업데이트할 때 사용자 배터리 수명을 유지하기 위해 추가 정책이 적용됩니다.

  • 최대 백그라운드 시간(벽시계 시간)을 포함하여 특정 정책 요구 사항이 더 이상 충족되지 않는 경우 DeviceUseTrigger 및 DeviceServicingTrigger를 사용하는 백그라운드 작업이 Windows에서 취소될 수 있습니다. 이러한 백그라운드 작업을 사용하여 주변 장치와 상호 작용할 때 이러한 정책 요구 사항을 고려하는 것이 중요합니다.

이러한 백그라운드 작업의 작동 방식을 확인하려면 샘플을 다운로드합니다. 사용자 지정 USB 디바이스 샘플DeviceUseTrigger와 디바이스 동기화를 수행하는 백그라운드 작업을 보여 줍니다.

DeviceUseTrigger 또는 DeviceServicingTrigger를 사용하는 경우 Windows 8.1은 사용자가 콘텐츠를 동기화하고 업데이트하기 위해 백그라운드에서 디바이스에 액세스할 수 있는 권한을 앱에 부여하도록 정책을 적용합니다. 주변 장치를 동기화하고 업데이트할 때 사용자 배터리 수명을 유지하는 데 도움이 되는 정책도 적용됩니다.

DeviceUseTrigger를 사용하는 백그라운드 작업에는 앱이 백그라운드에서 동기화되도록 허용하는 일회성 사용자 동의가 필요합니다. 이 동의는 앱 및 디바이스별 모델에 저장됩니다. 사용자는 앱이 포그라운드에 있을 때 앱이 디바이스에 액세스하도록 허용하는 데 동의한 것처럼 앱이 백그라운드에서 디바이스에 액세스할 수 있도록 허용합니다.

다음 예제에서 Tailspin Toys라는 앱은 백그라운드에서 동기화할 수 있는 사용자 권한을 얻습니다.

device sync user consent message dialog.

사용자가 나중에 마음을 변경하면 설정 권한을 취소할 수 있습니다.

device sync permissions setting dialog.

DeviceUseTrigger를 사용하는 작업과 달리 DeviceServicingTrigger 백그라운드 작업을 사용하는 백그라운드 작업은 백그라운드 작업이 트리거될 때마다 사용자 동의가 필요합니다. 또한 이 동의는 DeviceUseTrigger처럼 저장되지 않습니다. 이는 디바이스 펌웨어 업데이트와 관련된 위험이 높은 작업과 디바이스 업데이트에 필요한 시간이 길기 때문입니다. Windows는 사용자 동의를 얻는 것 외에도 업데이트 전체에서 디바이스를 연결하고 PC에 요금이 부과되는지 확인하는 경고와 같은 디바이스 업데이트에 대한 정보를 사용자에게 제공하고, 앱이 제공하는 경우 작업의 대략적인 실행 시간을 제공합니다.

device update user consent message dialog.

빈도 및 전경 제한

앱이 작업을 시작할 수 있는 빈도에는 제한이 없지만 앱은 한 번에 하나의 DeviceUseTrigger 또는 DeviceServicingTrigger 백그라운드 작업 작업만 실행할 수 있으며(다른 유형의 백그라운드 작업에는 영향을 주지 않음) 앱이 포그라운드에 있는 동안에만 백그라운드 작업을 시작할 수 있습니다. 앱이 포그라운드에 없으면 DeviceUseTrigger 또는 DeviceServicingTrigger를 사용하여 백그라운드 작업을 시작할 수 없습니다. 앱은 첫 번째 백그라운드 작업이 완료되기 전에 두 번째 디바이스 백그라운드 작업을 시작할 수 없습니다.

디바이스 백그라운드 작업 정책

Windows는 앱에서 디바이스 백그라운드 작업을 사용할 때 정책을 적용합니다. 이러한 정책이 충족되지 않으면 DeviceUseTrigger 또는 DeviceServicingTrigger를 사용하는 백그라운드 작업이 취소될 수 있습니다. 디바이스 백그라운드 작업을 사용하여 주변 장치와 상호 작용할 때 이러한 정책 요구 사항을 고려하는 것이 중요합니다.

작업 시작 정책

이 표는 각 백그라운드 작업 트리거에 적용되는 작업 시작 정책을 나타냅니다.

정책 DeviceServicingTrigger DeviceUseTrigger
백그라운드 작업을 트리거할 때 UWP 앱이 포그라운드에 있습니다. policy applies. policy applies
디바이스가 시스템에 연결됩니다(또는 무선 디바이스의 범위 내). policy applies. policy applies
백그라운드 작업은 화면이 잠겨 있을 때 1분마다 400ms의 CPU 시간(1GHz CPU 가정)을 사용하거나 화면이 잠겨 있지 않은 경우 5분마다 사용합니다. 이 정책을 충족하지 못하면 작업이 취소될 수 있습니다. policy applies. policy applies
디바이스 주변 장치 API(USB, HID, Bluetooth 등에 대한 Windows 런타임 API)를 사용하여 앱에서 디바이스에 액세스할 수 있습니다. 앱이 디바이스에 액세스할 수 없는 경우 백그라운드 작업에 대한 액세스가 거부됩니다. policy applies. policy applies
앱에서 제공하는 백그라운드 작업 진입점은 앱 패키지 매니페스트에 등록됩니다. policy applies. policy applies
사용자가 작업을 계속할 수 있는 권한을 부여했습니다. 매번. 처음으로 앱 권한에 의해 제어됩니다.
앱에서 제공하는 예상 시간은 30분 미만입니다. policy applies. policy does not apply
앱은 디바이스에 대한 권한 있는 앱으로 지정됩니다. (디바이스 컨테이너의 디바이스 메타데이터에서 권한 있는 앱 목록에 대한 전체 앱 ID 일치가 있어야 합니다.) policy applies. policy does not apply
컴퓨터의 배터리 용량이 33% 이상 재기본 또는 AC 전원에 있습니다. policy applies. policy does not apply
작업 유형별로 하나의 디바이스 백그라운드 작업만 실행되고 있습니다. policy check applies. policy applies

런타임 정책 검사

Windows는 백그라운드에서 작업이 실행되는 동안 다음과 같은 런타임 정책 요구 사항을 적용합니다. 런타임 요구 사항이 충족되지 않는 경우 Windows는 디바이스 백그라운드 작업을 취소합니다.

이 표는 각 백그라운드 작업 트리거에 적용되는 런타임 정책을 나타냅니다.

정책 검사 DeviceServicingTrigger DeviceUseTrigger
벽시계 시간 제한 - 앱의 작업이 백그라운드에서 실행할 수 있는 총 시간입니다. 30분 10분
디바이스가 시스템에 연결됩니다(또는 무선 디바이스의 범위 내). policy does not apply. policy check applies
작업은 디바이스에 대한 일반 I/O를 수행합니다(5초마다 1 I/O). policy does not apply. policy check applies
앱이 작업을 취소하지 않았습니다. policy check applies. policy check applies
앱이 종료되지 않았습니다. policy check applies. policy check applies

모범 사례

다음은 디바이스 백그라운드 작업을 사용하는 UWP 디바이스 앱에 대한 모범 사례입니다.

디바이스 백그라운드 작업 프로그래밍 모델

앱에서 DeviceUseTrigger 또는 DeviceServicingTrigger 백그라운드 작업을 사용하면 사용자가 앱을 전환하고 포그라운드 앱이 Windows에서 일시 중단된 경우 포그라운드 앱에서 시작된 모든 동기화 또는 디바이스 업데이트 작업이 백그라운드에서 계속 실행되도록 합니다. 백그라운드 작업을 등록, 트리거 및 등록 취소하기 위해 이 전체 모델을 따르는 것이 좋습니다.

  1. 트리거를 요청하기 전에 백그라운드 작업을 등록합니다.

  2. 진행률 및 완료 이벤트 처리기를 트리거에 커넥트. 앱이 일시 중단에서 반환되면 Windows는 백그라운드 작업의 상태 확인하는 데 사용할 수 있는 대기 중인 진행률 또는 완료 이벤트를 앱에 제공합니다.

  3. DeviceUseTrigger 또는 DeviceServicingTrigger 백그라운드 작업을 트리거할 때 열려 있는 디바이스 개체를 닫아 해당 디바이스를 백그라운드 작업에서 자유롭게 열고 사용할 수 있도록 합니다.

  4. 트리거를 등록합니다.

  5. 작업이 완료되면 백그라운드 작업의 등록을 취소합니다. 백그라운드 작업이 완료되면 백그라운드 작업을 등록 취소하고 디바이스를 다시 열고 UWP 앱에서 정기적으로 사용할 수 있습니다.

  6. 백그라운드 작업 클래스에서 취소 이벤트를 등록합니다. 취소 이벤트를 등록하면 백그라운드 작업 코드가 Windows 또는 포그라운드 앱에서 취소될 때 실행 중인 백그라운드 작업을 클린 중지할 수 있습니다.

  7. 앱 종료 시(일시 중단 아님) 실행 중인 작업의 등록을 취소하고 취소합니다.

    • 앱이 종료되면 실행 중인 작업의 등록을 취소하고 취소합니다.

    • 앱이 종료되면 백그라운드 작업이 취소되고 기존 이벤트 처리기가 기존 백그라운드 작업과 연결이 끊어집니다. 이렇게 하면 백그라운드 작업의 상태를 확인할 수 없습니다. 백그라운드 작업을 등록 취소하고 취소하면 취소 코드가 백그라운드 작업을 클린 중지할 수 있습니다.

사용자 지정 USB 디바이스 샘플을 사용하여 이 작업을 수행하는 방법에 대한 자세한 설명은 디바이스 백그라운드 작업 만들기를 참조하세요.

백그라운드 작업 취소

포그라운드 앱에서 백그라운드로 실행 중인 작업을 취소하려면 앱에서 사용하는 BackgroundTaskRegistration 개체의 Unregister 메서드를 사용하여 DeviceUseTrigger 또는 DeviceServicingTrigger 백그라운드 작업을 등록합니다. BackgroundTaskRegistration에서 Unregister 메서드를 사용하여 백그라운드 작업을 등록 취소하면 백그라운드 작업 인프라가 백그라운드 작업을 취소합니다.

또한 Unregister 메서드는 부울 true 또는 false 값을 사용하여 현재 실행 중인 백그라운드 작업의 인스턴스를 완료할 수 없도록 취소해야 하는지 여부를 나타냅니다. 자세한 내용은 BackgroundTaskRegistration.Unregister에 대한 API 참조를 참조하세요.

디바이스 백그라운드 작업 만들기

사용자 지정 USB 디바이스 샘플

Launching, resuming, and multitasking

백그라운드 작업으로 앱 지원