WNS(Windows 푸시 알림 서비스) 개요Windows Push Notification Services (WNS) overview

WNS (Windows Push Notification Services)를 사용 하면 타사 개발자가 자신의 클라우드 서비스에서 알림, 타일, 배지 및 원시 업데이트를 보낼 수 있습니다.The Windows Push Notification Services (WNS) enable third-party developers to send toast, tile, badge, and raw updates from their own cloud service. WNS는 에너지 효율적이며 신뢰할 수 있는 방법으로 사용자에게 새 업데이트를 전달하는 메커니즘을 제공합니다.This provides a mechanism to deliver new updates to your users in a power-efficient and dependable way.

작동 방식How it works

다음 다이어그램은 푸시 알림을 보내기 위한 전체 데이터 흐름을 보여 줍니다.The following diagram shows the complete data flow for sending a push notification. 여기에는 다음 단계가 포함 됩니다.It involves these steps:

  1. 앱이 WNS에서 푸시 알림 채널을 요청 합니다.Your app requests a push notification channel from WNS.
  2. Windows에서 알림 채널을 만들도록 WNS를 요청 합니다.Windows asks WNS to create a notification channel. 이 채널은 URI (Uniform Resource Identifier) 형식으로 호출 장치에 반환 됩니다.This channel is returned to the calling device in the form of a Uniform Resource Identifier (URI).
  3. 알림 채널 URI는 WNS에서 앱으로 반환 됩니다.The notification channel URI is returned by WNS to your app.
  4. 앱은 자신의 클라우드 서비스에 URI를 보냅니다.Your app sends the URI to your own cloud service. 그런 다음 사용자의 클라우드 서비스에 URI를 저장 하 여 알림을 보낼 때 URI에 액세스할 수 있도록 합니다.You then store the URI on your own cloud service so that you can access the URI when you send notifications. URI는 앱과 고유 서비스 간의 인터페이스입니다. 안전한 보안 웹 표준을 사용하여 이 인터페이스를 구현하는 것은 사용자의 책임입니다.The URI is an interface between your own app and your own service; it's your responsibility to implement this interface with safe and secure web standards.
  5. 클라우드 서비스에 보낼 업데이트가 있으면 채널 URI를 사용 하 여 WNS에 알립니다.When your cloud service has an update to send, it notifies WNS using the channel URI. 이 작업은 알림 페이로드를 비롯 하 여 SSL(Secure Sockets Layer) (SSL)를 통해 HTTP POST 요청을 실행 하 여 수행 됩니다.This is done by issuing an HTTP POST request, including the notification payload, over Secure Sockets Layer (SSL). 이 단계에는 인증이 필요 합니다.This step requires authentication.
  6. WNS에서 요청을 수신 하 고 해당 장치에 알림을 라우팅합니다.WNS receives the request and routes the notification to the appropriate device.

푸시 알림에 대 한 wns 데이터 흐름 다이어그램

앱 등록 및 클라우드 서비스에 대 한 자격 증명 수신Registering your app and receiving the credentials for your cloud service

WNS를 사용 하 여 알림을 보내려면 여기에 설명 된 대로 스토어 대시보드에 앱을 등록 해야 합니다.Before you can send notifications using WNS, your app must be registered with the Store Dashboard, as described here.

알림 채널 요청Requesting a notification channel

푸시 알림을 받을 수 있는 앱이 실행 되는 경우 CreatePushNotificationChannelForApplicationAsync를 통해 알림 채널을 먼저 요청 해야 합니다.When an app that is capable of receiving push notifications runs, it must first request a notification channel through the CreatePushNotificationChannelForApplicationAsync. 전체 토론 및 예제 코드는 알림 채널을 요청 하 고 만들고 저장 하는 방법을 참조 하세요.For a full discussion and example code, see How to request, create, and save a notification channel. 이 API는 호출 하는 응용 프로그램과 해당 타일에 고유 하 게 연결 되 고 모든 알림 유형을 보낼 수 있는 채널 URI를 반환 합니다.This API returns a channel URI that is uniquely linked to the calling application and its tile, and through which all notification types can be sent.

앱은 채널 URI를 성공적으로 만든 후이 URI와 연결 되어야 하는 앱 별 메타 데이터와 함께 클라우드 서비스로 보냅니다.After the app has successfully created a channel URI, it sends it to its cloud service, together with any app-specific metadata that should be associated with this URI.

중요Important notes

  • 앱에 대 한 알림 채널 URI가 항상 동일 하 게 유지 된다는 것을 보장 하지는 않습니다.We do not guarantee that the notification channel URI for an app will always remain the same. 앱이 실행 될 때마다 새 채널을 요청 하 고 URI가 변경 되 면 해당 서비스를 업데이트할 것을 권장 합니다.We advise that the app requests a new channel every time it runs and updates its service when the URI changes. 개발자는 채널 URI를 수정할 수 없으며 블랙 박스 문자열로 간주 해야 합니다.The developer should never modify the channel URI and should consider it as a black-box string. 지금은 채널 Uri는 30 일 후에 만료 됩니다.At this time, channel URIs expire after 30 days. Windows 10 앱이 백그라운드에서 주기적으로 해당 채널을 갱신 하는 경우 Windows 8.1에 대 한 푸시 및 정기 알림 샘플 을 다운로드 하 고 해당 소스 코드 및/또는이에 대해 설명 하는 패턴을 다시 사용할 수 있습니다.If your Windows 10 app will periodically renew its channel in the background then you can download the Push and periodic notifications sample for Windows 8.1 and re-use its source code and/or the pattern it demonstrates.
  • 클라우드 서비스와 클라이언트 앱 간의 인터페이스는 개발자에 의해 구현 됩니다.The interface between the cloud service and the client app is implemented by you, the developer. 앱이 자체 서비스를 사용 하 여 인증 프로세스를 진행 하 고 HTTPS와 같은 보안 프로토콜을 통해 데이터를 전송 하는 것이 좋습니다.We recommend that the app go through an authentication process with its own service and transmit data over a secure protocol such as HTTPS.
  • 클라우드 서비스는 항상 채널 URI가 "notify.windows.com" 도메인을 사용 하는지 확인 하는 것이 중요 합니다.It is important that the cloud service always ensures that the channel URI uses the domain "notify.windows.com". 서비스는 다른 도메인의 채널에 알림을 푸시 하지 않아야 합니다.The service should never push notifications to a channel on any other domain. 앱에 대 한 콜백이 손상 되는 경우 악의적인 공격자가 채널 URI를 전송 하 여 WNS를 스푸핑할 수 있습니다.If the callback for your app is ever compromised, a malicious attacker could submit a channel URI to spoof WNS. 도메인을 검사 하지 않으면 클라우드 서비스는 잠재적으로이 공격자에 게 정보를 공개할 수 있습니다.Without inspecting the domain, your cloud service could potentially disclose information to this attacker unknowingly.
  • 클라우드 서비스가 만료 된 채널에 알림을 배달 하려고 하면 WNS는 응답 코드 410을 반환 합니다.If your cloud service attempts to deliver a notification to an expired channel, WNS will return response code 410. 해당 코드에 대 한 응답으로 서비스는 더 이상 해당 URI에 알림을 보내려고 시도 하지 않습니다.In response to that code, your service should no longer attempt to send notifications to that URI.

클라우드 서비스 인증Authenticating your cloud service

알림을 보내려면 WNS를 통해 클라우드 서비스를 인증 해야 합니다.To send a notification, the cloud service must be authenticated through WNS. 이 프로세스의 첫 번째 단계는 Microsoft Store 대시보드를 사용 하 여 앱을 등록할 때 발생 합니다.The first step in this process occurs when you register your app with the Microsoft Store Dashboard. 등록 프로세스 중에 앱에는 패키지 SID (보안 식별자) 및 비밀 키가 제공 됩니다.During the registration process, your app is given a Package security identifier (SID) and a secret key. 이 정보는 클라우드 서비스에서 WNS를 사용 하 여 인증 하는 데 사용 됩니다.This information is used by your cloud service to authenticate with WNS.

WNS 인증 체계는 OAuth 2.0 프로토콜의 클라이언트 자격 증명 프로필을 사용 하 여 구현 됩니다.The WNS authentication scheme is implemented using the client credentials profile from the OAuth 2.0 protocol. 클라우드 서비스는 자격 증명 (패키지 SID 및 비밀 키)을 제공 하 여 WNS를 사용 하 여 인증 합니다.The cloud service authenticates with WNS by providing its credentials (Package SID and secret key). 반환 되는 경우 액세스 토큰을 수신 합니다.In return, it receives an access token. 이 액세스 토큰을 사용 하면 클라우드 서비스에서 알림을 보낼 수 있습니다.This access token allows a cloud service to send a notification. 토큰은 WNS로 전송 되는 모든 알림 요청에 필요 합니다.The token is required with every notification request sent to the WNS.

개략적인 수준에서 정보 체인은 다음과 같습니다.At a high level, the information chain is as follows:

  1. 클라우드 서비스는 OAuth 2.0 프로토콜을 따라 HTTPS를 통해 WNS에 자격 증명을 보냅니다.The cloud service sends its credentials to WNS over HTTPS following the OAuth 2.0 protocol. 이는 WNS를 사용 하 여 서비스를 인증 합니다.This authenticates the service with WNS.
  2. 인증에 성공 하면 WNS는 액세스 토큰을 반환 합니다.WNS returns an access token if the authentication was successful. 이 액세스 토큰은 만료 될 때까지 이후의 모든 알림 요청에 사용 됩니다.This access token is used in all subsequent notification requests until it expires.

클라우드 서비스 인증에 대 한 wns 다이어그램

WNS를 사용 하는 인증에서 클라우드 서비스는 SSL(Secure Sockets Layer) (SSL)을 통해 HTTP 요청을 제출 합니다.In the authentication with WNS, the cloud service submits an HTTP request over Secure Sockets Layer (SSL). 매개 변수는 "application/x-www-form-urlencoded" 형식으로 제공 됩니다.The parameters are supplied in the "application/x-www-for-urlencoded" format. _다음 예제에 표시 된 것 처럼 "클라이언트 id" 필드에 패키지 SID를 제공 하 고 "클라이언트 암호" 필드에 비밀 키를 제공 _ 합니다.Supply your Package SID in the "client_id" field and your secret key in the "client_secret" field as shown in the following example. 구문에 대 한 자세한 내용은 액세스 토큰 요청 참조를 참조 하세요.For syntax details, see the access token request reference.

참고

이는 사용자의 코드에서 성공적으로 사용할 수 있는 잘라내기 및 붙여넣기 코드가 아닌 예제 일 뿐입니다.This is just an example, not cut-and-paste code that you can successfully use in your own code.

 POST /accesstoken.srf HTTP/1.1
 Content-Type: application/x-www-form-urlencoded
 Host: https://login.live.com
 Content-Length: 211
 
 grant_type=client_credentials&client_id=ms-app%3a%2f%2fS-1-15-2-2972962901-2322836549-3722629029-1345238579-3987825745-2155616079-650196962&client_secret=Vex8L9WOFZuj95euaLrvSH7XyoDhLJc7&scope=notify.windows.com

WNS는 클라우드 서비스를 인증 하 고, 성공 하면 "200 OK" 응답을 보냅니다.The WNS authenticates the cloud service and, if successful, sends a response of "200 OK". 액세스 토큰은 "application/json" 미디어 유형을 사용 하 여 HTTP 응답 본문에 포함 된 매개 변수에 반환 됩니다.The access token is returned in the parameters included in the body of the HTTP response, using the "application/json" media type. 서비스에서 액세스 토큰을 받은 후 알림을 보낼 준비가 된 것입니다.After your service has received the access token, you are ready to send notifications.

다음 예에서는 액세스 토큰을 포함 하 여 성공적인 인증 응답을 보여 줍니다.The following example shows a successful authentication response, including the access token. 구문에 대 한 자세한 내용은 푸시 알림 서비스 요청 및 응답 헤더를 참조 하세요.For syntax details, see Push notification service request and response headers.

 HTTP/1.1 200 OK   
 Cache-Control: no-store
 Content-Length: 422
 Content-Type: application/json
 
 {
     "access_token":"EgAcAQMAAAAALYAAY/c+Huwi3Fv4Ck10UrKNmtxRO6Njk2MgA=", 
     "token_type":"bearer"
 }

중요Important notes

  • 이 절차에서 지원 되는 OAuth 2.0 프로토콜은 draft 버전 V16를 따릅니다.The OAuth 2.0 protocol supported in this procedure follows draft version V16.
  • RFC (OAuth Request for Comments)는 "클라이언트" 라는 용어를 사용 하 여 클라우드 서비스를 참조 합니다.The OAuth Request for Comments (RFC) uses the term "client" to refer to the cloud service.
  • OAuth 초안이 종료 되 면이 절차가 변경 될 수 있습니다.There might be changes to this procedure when the OAuth draft is finalized.
  • 여러 알림 요청에 대 한 액세스 토큰을 다시 사용할 수 있습니다.The access token can be reused for multiple notification requests. 이렇게 하면 클라우드 서비스에서 한 번만 인증 하 여 많은 알림을 보낼 수 있습니다.This allows the cloud service to authenticate just once to send many notifications. 그러나 액세스 토큰이 만료 되 면 클라우드 서비스는 새 액세스 토큰을 받기 위해 다시 인증 해야 합니다.However, when the access token expires, the cloud service must authenticate again to receive a new access token.

알림 보내기Sending a notification

클라우드 서비스는 채널 URI를 사용 하 여 사용자에 대 한 업데이트가 있을 때마다 알림을 보낼 수 있습니다.Using the channel URI, the cloud service can send a notification whenever it has an update for the user.

위에서 설명한 액세스 토큰은 여러 알림 요청에 다시 사용할 수 있습니다. 클라우드 서버는 모든 알림에 대해 새 액세스 토큰을 요청 하는 데 필요 하지 않습니다.The access token described above can be reused for multiple notification requests; the cloud server is not required to request a new access token for every notification. 액세스 토큰이 만료 되 면 알림 요청에서 오류를 반환 합니다.If the access token has expired, the notification request will return an error. 액세스 토큰이 거부 된 경우 알림을 두 번 이상 다시 전송 하지 않는 것이 좋습니다.We recommended that you do not try to re-send your notification more than once if the access token is rejected. 이 오류가 발생 하는 경우 새 액세스 토큰을 요청 하 고 알림을 다시 전송 해야 합니다.If you encounter this error, you will need to request a new access token and resend the notification. 정확한 오류 코드는 푸시 알림 응답 코드를 참조 하세요.For the exact error code, see Push notification response codes.

  1. 클라우드 서비스는 채널 URI에 HTTP POST를 수행 합니다.The cloud service makes an HTTP POST to the channel URI. 이 요청은 SSL을 통해 수행 해야 하며 필요한 헤더와 알림 페이로드를 포함 합니다.This request must be made over SSL and contains the necessary headers and the notification payload. 권한 부여 헤더는 권한 부여를 위해 획득 된 액세스 토큰을 포함 해야 합니다.The authorization header must include the acquired access token for authorization.

    예제 요청은 다음과 같습니다.An example request is shown here. 구문 정보는 푸시 알림 응답 코드를 참조하세요.For syntax details, see Push notification response codes.

    알림 페이로드를 작성 하는 방법에 대 한 자세한 내용은 빠른 시작: 푸시 알림 보내기를 참조 하세요.For details on composing the notification payload, see Quickstart: Sending a push notification. 타일, 알림 또는 배지 푸시 알림의 페이로드는 정의 된 각 적응 타일 스키마 또는 레거시 타일 스키마를 준수 하는 XML 콘텐츠로 제공 됩니다.The payload of a tile, toast, or badge push notification is supplied as XML content that adheres to their respective defined Adaptive tiles schema or Legacy tiles schema. 원시 알림의 페이로드에 지정 된 구조체가 없습니다.The payload of a raw notification does not have a specified structure. 엄격 하 게 앱을 정의 합니다.It is strictly app-defined.

     POST https://cloud.notify.windows.com/?token=AQE%bU%2fSjZOCvRjjpILow%3d%3d HTTP/1.1
     Content-Type: text/xml
     X-WNS-Type: wns/tile
     Authorization: Bearer EgAcAQMAAAAALYAAY/c+Huwi3Fv4Ck10UrKNmtxRO6Njk2MgA=
     Host: cloud.notify.windows.com
     Content-Length: 24
    
     <body>
     ....
    
  2. WNS는 알림이 수신 되었으며 다음에 사용할 수 있는 기회에서 배달 됨을 나타내는 데 응답 합니다.WNS responds to indicate that the notification has been received and will be delivered at the next available opportunity. 그러나 WNS는 장치 또는 응용 프로그램에서 알림을 수신 했다는 종단 간 확인을 제공 하지 않습니다.However, WNS does not provide end-to-end confirmation that your notification has been received by the device or application.

다음 다이어그램은 데이터 흐름을 보여 줍니다.This diagram illustrates the data flow:

알림을 보내기 위한 wns 다이어그램

중요Important notes

  • WNS는 알림의 안정성 또는 대기 시간을 보장 하지 않습니다.WNS does not guarantee the reliability or latency of a notification.
  • 알림에는 기밀 데이터 나 중요 한 데이터가 포함 되어서는 안 됩니다.Notifications should never include confidential or sensitive data.
  • 알림을 보내려면 클라우드 서비스에서 먼저 WNS를 사용 하 여 인증 하 고 액세스 토큰을 받아야 합니다.To send a notification, the cloud service must first authenticate with WNS and receive an access token.
  • 액세스 토큰을 사용 하면 클라우드 서비스에서 토큰이 생성 된 단일 앱에만 알림을 보낼 수 있습니다.An access token only allows a cloud service to send notifications to the single app for which the token was created. 한 액세스 토큰을 사용 하 여 여러 앱에서 알림을 보낼 수는 없습니다.One access token cannot be used to send notifications across multiple apps. 따라서 클라우드 서비스에서 여러 앱을 지 원하는 경우 각 채널 URI에 알림을 푸시할 때 앱에 대 한 올바른 액세스 토큰을 제공 해야 합니다.Therefore, if your cloud service supports multiple apps, it must provide the correct access token for the app when pushing a notification to each channel URI.
  • 장치가 오프 라인 상태인 경우 기본적으로 WNS는 최대 5 개의 타일 알림 (큐를 사용 하도록 설정 된 경우), 각 채널 URI에 대 한 배지 알림 하나 및 원시 알림은 저장 하지 않습니다.When the device is offline, by default WNS will store up to five tile notifications (if queuing is enabled; otherwise, one tile notification) and one badge notification for each channel URI, and no raw notifications. 이 기본 캐싱 동작은 X WNS 캐시 정책 헤더를 통해 변경할 수 있습니다.This default caching behavior can be changed through the X-WNS-Cache-Policy header. 장치가 오프 라인인 경우에는 알림 알림이 저장 되지 않습니다.Note that toast notifications are never stored when the device is offline.
  • 알림 콘텐츠가 사용자에 게 개인 설정 된 시나리오에서 WNS는 클라우드 서비스에서 해당 업데이트를 수신 하는 즉시 전송 하도록 권장 합니다.In scenarios where the notification content is personalized to the user, WNS recommends that the cloud service immediately send those updates when those are received. 이 시나리오의 예로는 소셜 미디어 피드 업데이트, 인스턴트 통신 초대, 새 메시지 알림 또는 경고가 있습니다.Examples of this scenario include social media feed updates, instant communication invitations, new message notifications, or alerts. 또는 동일한 일반 업데이트가 사용자의 많은 하위 집합에 자주 전달 되는 시나리오를 사용할 수 있습니다. 예: 날씨, 재고 및 뉴스 업데이트.As an alternative, you can have scenarios in which the same generic update is frequently delivered to a large subset of your users; for example, weather, stock, and news updates. WNS 지침은 이러한 업데이트의 빈도가 30 분 마다 최대 1이 되도록 지정 합니다.WNS guidelines specify that the frequency of these updates should be at most one every 30 minutes. 최종 사용자 또는 WNS는 자주 사용 하지 않는 일상적인 업데이트를 확인할 수 있습니다.The end user or WNS may determine more frequent routine updates to be abusive.
  • Windows 알림 플랫폼은 소켓을 연결 하 고 정상 상태로 유지 하기 위해 WNS와 주기적인 데이터 연결을 유지 관리 합니다.Windows Notification Platform maintains a periodic data connection with WNS to keep the socket alive and healthy. 알림 채널을 요청 하거나 사용 하는 응용 프로그램이 없으면 소켓이 생성 되지 않습니다.If there are no applications requesting or using notification channels then the socket will not be created.

타일 및 배지 알림 만료Expiration of tile and badge notifications

기본적으로 타일 및 배지 알림은 다운로드 된 후 3 일 후에 만료 됩니다.By default, tile and badge notifications expire three days after being downloaded. 알림이 만료 되 면 타일 또는 큐에서 콘텐츠가 제거 되 고 사용자에 게 더 이상 표시 되지 않습니다.When a notification expires, the content is removed from the tile or queue and is no longer shown to the user. 타일 콘텐츠가 관련 된 것 보다 오래 지속 되지 않도록 모든 타일 및 배지 알림에서 만료 (앱에 맞는 시간 사용)를 설정 하는 것이 가장 좋습니다.It's a best practice to set an expiration (using a time that makes sense for your app) on all tile and badge notifications so that your tile's content doesn't persist longer than it is relevant. 지정 된 수명의 콘텐츠에는 명시적 만료 시간이 필요 합니다.An explicit expiration time is essential for content with a defined lifespan. 이를 통해 클라우드 서비스에서 알림 전송을 중지 하거나 오랫동안 네트워크에서 연결을 끊는 경우에도 오래 된 콘텐츠가 제거 됩니다.This also assures the removal of stale content if your cloud service stops sending notifications, or if the user disconnects from the network for an extended period.

클라우드 서비스는 수신 된 후 알림이 유효한 상태로 유지 되는 시간 (초)을 지정 하 여 각 알림에 대해 만료를 설정할 수 있습니다.Your cloud service can set an expiration for each notification by setting the X-WNS-TTL HTTP header to specify the time (in seconds) that your notification will remain valid after it is sent. 자세한 내용은 푸시 알림 서비스 요청 및 응답 헤더를 참조 하세요.For more information, see Push notification service request and response headers.

예를 들어, 재고 시장의 활성 거래 시간 동안 주가 업데이트에 대 한 만료를 전송 간격의 두 배 (예: 1 시간 마다 알림을 보내는 경우 1 시간 후)로 설정할 수 있습니다.For example, during a stock market's active trading day, you can set the expiration for a stock price update to twice that of your sending interval (such as one hour after receipt if you are sending notifications every half-hour). 또 다른 예로, 뉴스 앱은 일일 뉴스 타일 업데이트에 대해 하루에 적절 한 만료 시간을 결정할 수 있습니다.As another example, a news app might determine that one day is an appropriate expiration time for a daily news tile update.

푸시 알림 및 배터리 절약Push notifications and battery saver

배터리 절약 장치에서 백그라운드 작업을 제한 하 여 배터리 수명을 연장 합니다.Battery saver extends battery life by limiting background activity on the device. Windows 10에서는 배터리가 지정 된 임계값 아래로 떨어지면 사용자가 배터리 보호기를 자동으로 켤 수 있습니다.Windows 10 lets the user set battery saver to turn on automatically when the battery drops below a specified threshold. 배터리 절약이 켜져 있으면 에너지를 절약 하기 위해 푸시 알림 수신이 사용 하지 않도록 설정 됩니다.When battery saver is on, the receipt of push notifications is disabled to save energy. 그러나이에 대 한 몇 가지 예외가 있습니다.But there are a couple exceptions to this. 다음 Windows 10 배터리 보호기 설정 ( 설정 앱에 있음)을 사용 하면 배터리 절약 모드가 설정 된 경우에도 앱이 푸시 알림을 받을 수 있습니다.The following Windows 10 battery saver settings (found in the Settings app) allow your app to receive push notifications even when battery saver is on.

  • 배터리 절약 모드 동안 모든 앱에서 푸시 알림 허용:이 설정을 사용 하면 배터리 절약 모드가 설정 되어 있는 동안 모든 앱에서 푸시 알림을 받을 수 있습니다.Allow push notifications from any app while in battery saver: This setting lets all apps receive push notifications while battery saver is on. 이 설정은 데스크톱 버전의 Windows 10 (Home, Pro, Enterprise 및 교육용)에만 적용 됩니다.Note that this setting applies only to Windows 10 for desktop editions (Home, Pro, Enterprise, and Education).
  • 항상 허용:이 설정을 사용 하면 배터리 보호기가 설정 되어 있는 동안 특정 앱이 백그라운드에서 실행 될 수 있습니다 (푸시 알림 수신 포함).Always allowed: This setting lets specific apps run in the background while battery saver is on - including receiving push notifications. 이 목록은 사용자가 수동으로 유지 관리 합니다.This list is maintained manually by the user.

이러한 두 설정의 상태를 확인할 수 있는 방법은 없지만 배터리 절약 상태를 확인 하는 방법은 없습니다.There is no way to check the state of these two settings, but you can check the state of battery saver. Windows 10에서는 EnergySaverStatus 속성을 사용 하 여 배터리 절약 상태를 확인 합니다.In Windows 10, use the EnergySaverStatus property to check battery saver state. 앱은 EnergySaverStatusChanged 이벤트를 사용 하 여 배터리 절약에 대 한 변경 내용을 수신할 수도 있습니다.Your app can also use the EnergySaverStatusChanged event to listen for changes to battery saver.

앱이 푸시 알림에 크게 의존 하는 경우 배터리 보호기가 설정 되어 있는 동안 사용자에 게 알림을 수신 하지 못할 수 있음을 알리고 배터리 절약 설정을 쉽게 조정할 수 있도록 하는 것이 좋습니다.If your app depends heavily on push notifications, we recommend notifying users that they may not receive notifications while battery saver is on and to make it easy for them to adjust battery saver settings. Windows 10의 배터리 보호기 설정 URI 체계를 사용 하 여 ms-settings:batterysaver-settings 설정 앱에 대 한 편리한 링크를 제공할 수 있습니다.Using the battery saver settings URI scheme in Windows 10, ms-settings:batterysaver-settings, you can provide a convenient link to the Settings app.

사용자에 게 배터리 절약 시간 설정을 알리는 경우 나중에 메시지를 표시 하지 않도록 하는 방법을 제공 하는 것이 좋습니다.When notifying the user about battery saver settings, we recommend providing a way to suppress the message in the future. 예를 들어 dontAskMeAgainBox 다음 예제의 확인란은 LocalSettings에서 사용자의 기본 설정을 유지 합니다.For example, the dontAskMeAgainBox checkbox in the following example persists the user's preference in LocalSettings.

다음은 Windows 10에서 배터리 절약이 켜져 있는지 여부를 확인 하는 방법의 예입니다.Here's an example of how to check whether battery saver is turned on in Windows 10. 이 예제에서는 사용자에 게 알리고 설정 앱을 배터리 절약 설정 으로 시작 합니다.This example notifies the user and launches the Settings app to battery saver settings. dontAskAgainSetting 사용 하면 사용자가 메시지를 다시 표시 하지 않으려면 메시지를 표시 하지 않을 수 있습니다.The dontAskAgainSetting lets the user suppress the message if they don't want to be notified again.

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using Windows.System;
using Windows.System.Power;
...
...
async public void CheckForEnergySaving()
{
   //Get reminder preference from LocalSettings
   bool dontAskAgain;
   var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
   object dontAskSetting = localSettings.Values["dontAskAgainSetting"];
   if (dontAskSetting == null)
   {  // Setting does not exist
      dontAskAgain = false;
   }
   else
   {  // Retrieve setting value
      dontAskAgain = Convert.ToBoolean(dontAskSetting);
   }
   
   // Check if battery saver is on and that it's okay to raise dialog
   if ((PowerManager.EnergySaverStatus == EnergySaverStatus.On)
         && (dontAskAgain == false))
   {
      // Check dialog results
      ContentDialogResult dialogResult = await saveEnergyDialog.ShowAsync();
      if (dialogResult == ContentDialogResult.Primary)
      {
         // Launch battery saver settings (settings are available only when a battery is present)
         await Launcher.LaunchUriAsync(new Uri("ms-settings:batterysaver-settings"));
      }

      // Save reminder preference
      if (dontAskAgainBox.IsChecked == true)
      {  // Don't raise dialog again
         localSettings.Values["dontAskAgainSetting"] = "true";
      }
   }
}
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Storage.h>
#include <winrt/Windows.System.h>
#include <winrt/Windows.System.Power.h>
#include <winrt/Windows.UI.Xaml.h>
#include <winrt/Windows.UI.Xaml.Controls.h>
#include <winrt/Windows.UI.Xaml.Navigation.h>
using namespace winrt;
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::Storage;
using namespace winrt::Windows::System;
using namespace winrt::Windows::System::Power;
using namespace winrt::Windows::UI::Xaml;
using namespace winrt::Windows::UI::Xaml::Controls;
using namespace winrt::Windows::UI::Xaml::Navigation;
...
winrt::fire_and_forget CheckForEnergySaving()
{
    // Get reminder preference from LocalSettings.
    bool dontAskAgain{ false };
    auto localSettings = ApplicationData::Current().LocalSettings();
    IInspectable dontAskSetting = localSettings.Values().Lookup(L"dontAskAgainSetting");
    if (!dontAskSetting)
    {
        // Setting doesn't exist.
        dontAskAgain = false;
    }
    else
    {
        // Retrieve setting value
        dontAskAgain = winrt::unbox_value<bool>(dontAskSetting);
    }

    // Check whether battery saver is on, and whether it's okay to raise dialog.
    if ((PowerManager::EnergySaverStatus() == EnergySaverStatus::On) && (!dontAskAgain))
    {
        // Check dialog results.
        ContentDialogResult dialogResult = co_await saveEnergyDialog().ShowAsync();
        if (dialogResult == ContentDialogResult::Primary)
        {
            // Launch battery saver settings
            // (settings are available only when a battery is present).
            co_await Launcher::LaunchUriAsync(Uri(L"ms-settings:batterysaver-settings"));
        }

        // Save reminder preference.
        if (dontAskAgainBox().IsChecked())
        {
            // Don't raise the dialog again.
            localSettings.Values().Insert(L"dontAskAgainSetting", winrt::box_value(true));
        }
    }
}

이 예제에서 제공 되는 Contentdialog 의 XAML입니다.This is the XAML for the ContentDialog featured in this example.

<ContentDialog x:Name="saveEnergyDialog"
               PrimaryButtonText="Open battery saver settings"
               SecondaryButtonText="Ignore"
               Title="Battery saver is on."> 
   <StackPanel>
      <TextBlock TextWrapping="WrapWholeWords">
         <LineBreak/><Run>Battery saver is on and you may 
          not receive push notifications.</Run><LineBreak/>
         <LineBreak/><Run>You can choose to allow this app to work normally
         while in battery saver, including receiving push notifications.</Run>
         <LineBreak/>
      </TextBlock>
      <CheckBox x:Name="dontAskAgainBox" Content="OK, got it."/>
   </StackPanel>
</ContentDialog>