URI 활성화 처리

중요 API

앱을 URI(Uniform Resource Identifier) 체계 이름의 기본 처리기로 등록하는 방법을 알아봅니다. Windows 데스크톱 앱과 UWP(유니버설 Windows 플랫폼) 앱 모두 URI 체계 이름의 기본 처리기로 등록할 수 있습니다. 사용자가 URI 체계 이름의 기본 처리기로 앱을 선택하면 해당 유형의 URI가 시작될 때마다 앱이 활성화됩니다.

해당 유형의 URI 체계에 대한 모든 URI 시작을 처리해야 하는 경우에만 URI 체계 이름을 등록하는 것이 좋습니다. URI 체계 이름을 등록하기로 선택한 경우에는 해당 URI 체계에 대해 앱이 활성화될 때 예상되는 기능을 최종 사용자에게 제공해야 합니다. 그 예로 mailto: URI 체계 이름을 등록하는 앱에서는 사용자가 새 이메일을 작성할 수 있도록 새 이메일 메시지가 열려야 합니다. URI 연결에 대한 자세한 내용은 파일 형식 및 URI 관련 지침 및 체크리스트를 참조하세요.

다음 단계에서는 사용자 지정 URI 스키마 이름인 alsdk://를 등록하는 방법 및 사용자가 alsdk:// URI를 시작할 때 앱을 활성화하는 방법을 보여 줍니다.

참고 항목

UWP 앱에서 특정 URI 및 파일 확장명은 기본 제공 앱과 운영 체제에서 사용하기 위해 예약되어 있습니다. 예약된 URI 또는 파일 확장자로 앱을 등록하려는 시도는 무시됩니다. 예약되어 있거나 금지되어 있어 UWP 앱에 등록할 수 없는 Uri 체계의 알파벳순 목록은 예약된 URI 체계 이름 및 파일 형식을 참조하세요.

1단계: 패키지 매니페스트에서 확장 지점 지정하기

앱은 패키지 매니페스트에 나열된 URI 체계 이름에 대해서만 활성화 이벤트를 수신합니다. 다음은 앱이 alsdk URI 스키마 이름을 처리하도록 지정하는 방법입니다.

  1. 솔루션 탐색기에서 package.appxmanifest를 두 번 클릭하여 매니페스트 디자이너를 여세요. 선언 탭을 선택하고 사용 가능한 선언 드롭다운에서 프로토콜을 선택한 다음 추가를 클릭하세요.

    다음은 프로토콜의 매니페스트 디자이너에 입력할 수 있는 필드의 각각에 대한 간략한 설명입니다(자세한 내용은 AppX 패키지 매니페스트 참조).

필드 설명
로고 제어판기본 프로그램 설정에서 URI 체계 이름을 식별하는 데 사용될 로고를 지정하세요. 로고를 지정하지 않으면 앱의 작은 로고가 사용됩니다.
표시 이름 제어판기본 프로그램 설정에서 URI 체계 이름을 식별할 표시 이름을 지정하세요.
이름 Uri 체계의 이름을 선택하세요.
참고 이름의 모든 문자는 소문자여야 합니다.
예약된/금지된 파일 형식 예약되어 있거나 금지되어 있어 UWP 앱에 등록할 수 없는 Uri 체계의 알파벳순 목록은 예약된 URI 체계 이름 및 파일 형식을 참조하세요.
실행 파일 해당 프로토콜의 기본 시작 실행 파일을 지정하세요. 파일을 지정하지 않으면 앱의 실행 파일이 사용됩니다. 지정하는 경우 문자열의 길이는 1-256자여야 하고 ".exe"로 끝나야 하며 >, <, :, ", |, ?, *를 포함할 수 없습니다. 파일을 지정하면 진입점도 사용됩니다. 진입점을 지정하지 않으면 앱에 대해 정의된 진입점이 사용됩니다.
진입점 프로토콜 확장을 처리할 작업을 지정합니다. 이 이름은 일반적으로 Windows 런타임 형식의 정규화된 네임스페이스 이름입니다. 작업을 지정하지 않으면 앱의 진입점이 사용됩니다.
시작 페이지 확장성 지점을 처리하는 웹 페이지입니다.
리소스 그룹 리소스 관리 목적으로 확장 활성화를 그룹화하는 데 사용할 수 있는 태그입니다.
원하는 뷰(Windows 전용) 해당 URI 체계 이름으로 앱의 창이 열릴 때 필요한 공간의 양을 표시하려면 원하는 뷰 필드를 지정하세요. 원하는 뷰에 사용할 수 있는 값은 기본, UseLess, UseHalf, UseMore 또는 UseMinimum입니다.
참고 Windows는 대상 앱의 최종 창 크기를 결정할 때 여러 가지 다양한 요소(예: 원본 앱의 기본 설정, 화면에 나타나는 앱의 수, 화면 방향 등)를 고려합니다. 원하는 뷰를 설정해도 대상 앱의 특정 창 생성 동작이 반드시 발생하는 것은 아닙니다.
모바일 디바이스 제품군: 원하는 뷰는 모바일 디바이스 제품군에서 지원되지 않습니다.
  1. images\Icon.png을(를) 로고로 입력하세요.

  2. SDK Sample URI Scheme을(를) 표시 이름으로 입력하세요.

  3. alsdk을(를) 이름으로 입력하세요.

  4. package.appxmanifest의 변경 사항을 저장하려면 Ctrl+S를 누르세요.

    이렇게 하면 이와 같은 확장 요소가 패키지 매니페스트에 추가됩니다. windows.protocol 범주에는 앱이 alsdk URI 체계 이름을 처리한다는 내용이 표시됩니다.

    <Applications>
        <Application Id= ... >
            <Extensions>
                <uap:Extension Category="windows.protocol">
                  <uap:Protocol Name="alsdk">
                    <uap:Logo>images\icon.png</uap:Logo>
                    <uap:DisplayName>SDK Sample URI Scheme</uap:DisplayName>
                  </uap:Protocol>
                </uap:Extension>
          </Extensions>
          ...
        </Application>
   <Applications>

2단계: 적절한 아이콘 추가하기

URI 스키마 이름의 기본값이 되는 앱에는 시스템 전체의 다양한 위치(예: 기본 프로그램 제어판)에 표시되는 아이콘이 있습니다. 이 목적을 위해 프로젝트에 44x44 아이콘을 포함합니다. 앱 타일 로고의 모양을 일치시키고, 아이콘을 투명하게 설정하는 대신 앱의 배경색을 사용하세요. 로고의 여백을 설정하지 말고 로고를 가장자리까지 확장하세요. 흰색 배경에서 아이콘을 테스트하세요. 아이콘에 대한 자세한 내용은 앱 아이콘 및 로고를 참조하세요.

3단계: 활성화된 이벤트 처리하기

OnActivated 이벤트 처리기는 모든 활성화 이벤트를 수신합니다. 종류 속성은 활성화 이벤트의 유형을 나타냅니다. 이 예제는 프로토콜 활성화 이벤트를 처리하도록 설정됩니다.

public partial class App
{
   protected override void OnActivated(IActivatedEventArgs args)
  {
      if (args.Kind == ActivationKind.Protocol)
      {
         ProtocolActivatedEventArgs eventArgs = args as ProtocolActivatedEventArgs;
         // TODO: Handle URI activation
         // The received URI is eventArgs.Uri.AbsoluteUri
      }
   }
}
Protected Overrides Sub OnActivated(ByVal args As Windows.ApplicationModel.Activation.IActivatedEventArgs)
   If args.Kind = ActivationKind.Protocol Then
      ProtocolActivatedEventArgs eventArgs = args As ProtocolActivatedEventArgs
      
      ' TODO: Handle URI activation
      ' The received URI is eventArgs.Uri.AbsoluteUri
 End If
End Sub
void App::OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs const& args)
{
    if (args.Kind() == Windows::ApplicationModel::Activation::ActivationKind::Protocol)
    {
        auto protocolActivatedEventArgs{ args.as<Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs>() };
        // TODO: Handle URI activation  
        auto receivedURI{ protocolActivatedEventArgs.Uri().RawUri() };
    }
}
void App::OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs^ args)
{
   if (args->Kind == Windows::ApplicationModel::Activation::ActivationKind::Protocol)
   {
      Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^ eventArgs =
          dynamic_cast<Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^>(args);
      
      // TODO: Handle URI activation  
      // The received URI is eventArgs->Uri->RawUri
   }
}

참고 항목

프로토콜 계약을 통해 시작될 때 뒤로 단추는 사용자가 앱의 이전 콘텐츠가 아닌 앱이 시작된 화면으로 다시 돌아가도록 해야 합니다.

다음 코드는 프로그래밍 방식으로 URI를 통해 앱을 시작합니다.

   // Launch the URI
   var uri = new Uri("alsdk:");
   var success = await Windows.System.Launcher.LaunchUriAsync(uri)

URI를 통해 앱을 실행하는 방법에 대한 자세한 내용은 URI에 대한 기본 앱 실행을 참조하세요.

새 페이지를 여는 각 활성화 이벤트에 대해 앱으로 새 XAML 프레임을 생성하는 것이 좋습니다. 이렇게 하면 새 XAML 프레임의 탐색 백스택에는 일시 중단 시 앱이 현재의 창에 있을 수 있는 이전 콘텐츠가 포함되지 않습니다. 시작 및 파일 계약에 단일 XAML 프레임을 사용하기로 결정한 앱은 새 페이지로 이동하기 전에 프레임 탐색 저널의 페이지를 지워야 합니다.

앱은 프로토콜 활성화를 통해 시작될 경우, 사용자가 앱의 최상위 페이지로 돌아갈 수 있게 해 주는 UI를 포함시키는 것이 좋습니다.

설명

모든 앱 또는 웹사이트에서는 URI 체계 이름(악성 이름 포함)을 사용할 수 있습니다. 따라서 URI에서 가져오는 데이터는 어떤 것이든 출처가 신뢰할 수 없는 원본일 수 있습니다. URI에서 수신하는 매개변수를 기준으로 한 영구 작업은 절대 수행하지 않는 것이 좋습니다. 예를 들면 URI 매개변수를 사용하여 사용자의 계정 페이지로 앱을 시작할 수는 있지만, 사용자의 계정을 직접 수정할 때는 해당 매개변수를 절대 사용하지 않는 것이 좋습니다.

참고 항목

앱에 대해 새 URI 체계 이름을 만들려는 경우 RFC 4395의 참고 자료에 따라야 합니다. 이렇게 하면 해당 이름이 URI 체계의 표준을 충족하게 됩니다.

참고 항목

프로토콜 계약을 통해 시작될 때 뒤로 단추는 사용자가 앱의 이전 콘텐츠가 아닌 앱이 시작된 화면으로 다시 돌아가도록 해야 합니다.

새 Uri 대상을 여는 각 활성화 이벤트에 대해 앱으로 새 XAML 프레임을 생성하는 것이 좋습니다. 이렇게 하면 새 XAML 프레임의 탐색 백스택에는 일시 중단 시 앱이 현재의 창에 있을 수 있는 이전 콘텐츠가 포함되지 않습니다.

앱으로 시작 및 프로토콜 계약에 단일 XAML 프레임을 사용하기로 결정한 경우, 새 페이지로 이동하기 전에 프레임 탐색 저널의 페이지를 지우세요. 프로토콜 계약을 통해 시작된 경우에는 사용자가 앱의 맨 위로 돌아갈 수 있도록 앱에 UI를 포함시키는 것이 좋습니다.

전체 샘플 앱

개념

작업

지침

참조