다음을 통해 공유


URI 활성화 처리

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

해당 유형의 URI 스키마에 대한 모든 URI 시작 처리를 예상하는 경우에만 URI 스키마 이름을 등록하는 것이 좋습니다. URI 체계 이름을 등록하도록 선택하는 경우 해당 URI 스키마에 대해 앱이 활성화될 때 예상되는 기능을 최종 사용자에게 제공해야 합니다. 예를 들어 mailto: URI 스키마 이름을 등록하는 앱은 사용자가 새 전자 메일을 작성할 수 있도록 새 전자 메일 메시지에 대해 열어야 합니다. URI 연결에 대한 자세한 내용은 파일, 폴더 및 라이브러리를 참조하세요.

다음 단계에서는 사용자 지정 URI 체계 이름, alsdk://등록하는 방법 및 사용자가 alsdk:// URI를 실행할 때 앱을 활성화하는 방법을 보여 줍니다.

중요 API

이 항목에서는 다음 API가 사용됩니다.

비고

Windows에서 특정 URI 및 파일 확장명은 기본 제공 앱 및 운영 체제에서 사용하도록 예약되어 있습니다. 예약된 URI 또는 파일 확장자를 사용하여 앱을 등록하려는 시도는 무시됩니다. 예약되었거나 금지되어 있으므로 앱에 등록할 수 없는 사전순 URI 스키마 목록은 예약된 URI 스키마 이름 및 파일 형식 을 참조하세요.

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

앱은 패키지 매니페스트에 나열된 URI 체계 이름에 대해서만 활성화 이벤트를 받습니다. 앱이 alsdk URI 체계 이름을 처리함을 나타내는 방법은 다음과 같습니다.

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

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

분야 설명
로고 제어판에서 기본 프로그램 설정의 URI 체계 이름을 식별하는 용도로 사용되는 로고를 지정합니다. 로고를 지정하지 않으면 앱의 작은 로고가 사용됩니다.
표시 이름 기본 프로그램 설정에서 URI 체계 이름을 식별하기 위해 표시 이름을 제어판에 지정합니다.
이름 Uri 스키마의 이름을 선택합니다.
주의 이름은 모두 소문자로 되어 있어야 합니다.
예약 및 금지된 파일 형식 예약되거나 금지되어 있으므로 Windows 앱에 등록할 수 없는 사전순 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. Ctrl+S를 눌러 package.appxmanifest에 대한 변경 사항을 저장합니다.

    그러면 패키지 매니페스트에 이와 같은 Extension 요소가 추가되었습니다. 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단계: 활성화된 이벤트 처리

비고

WinUI 앱의 App.OnLaunched(또는 실제로 언제든지)에서 (AppInstance.GetActivatedEventArgs)를 호출하여 활성화된 이벤트 인수를 검색하고 이를 확인하여 앱이 활성화된 방법을 확인할 수 있습니다. UWP 및 WinUI 앱 간의 수명 주기 차이에 대한 자세한 내용은 애플리케이션 수명 주기 기능 마이그레이션을 참조하세요.

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

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
      }
   }
}
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 Frame 대한 탐색 백스택에는 일시 중단 시 앱이 현재 창에 있을 수 있는 이전 콘텐츠가 포함되지 않습니다. 시작 및 파일 계약에 단일 XAML Frame 사용하기로 결정한 앱은 새 페이지로 이동하기 전에 Frame 네비게이션 저널의 페이지를 지워야 합니다.

프로토콜 활성화를 통해 시작할 때 앱은 사용자가 앱의 맨 위 페이지로 돌아갈 수 있도록 하는 UI를 포함하는 것을 고려해야 합니다.

비고

악성 앱이나 웹 사이트를 포함하여 모든 앱이나 웹 사이트가 귀하의 URI 체계 이름을 사용할 수 있습니다. 따라서 URI에서 가져오는 모든 데이터는 신뢰할 수 없는 원본에서 가져올 수 있습니다. URI에서 수신하는 매개 변수를 기반으로 영구 작업을 수행하지 않는 것이 좋습니다. 예를 들어 URI 매개 변수를 사용하여 사용자의 계정 페이지로 앱을 시작할 수 있지만 사용자 계정을 직접 수정하는 데는 사용하지 않는 것이 좋습니다.

비고

앱에 대한 새 URI 체계 이름을 만드는 경우 RFC 4395지침을 따라야 합니다. 이렇게 하면 이름이 URI 스키마에 대한 표준을 충족합니다.

비고

프로토콜 계약을 통해 UWP 앱을 시작하면 뒤로 단추가 사용자를 앱의 이전 콘텐츠가 아닌 앱을 시작한 화면으로 다시 이동해야 합니다.

앱에서 새 Uri 대상을 여는 각 활성화 이벤트에 대해 새로운 XAML Frame을 만드는 것을 권장합니다. 이렇게 하면 새 XAML Frame 대한 탐색 백스택에는 일시 중단 시 앱이 현재 창에 있을 수 있는 이전 콘텐츠가 포함되지 않습니다.

앱이 시작 및 프로토콜 계약에 단일 XAML Frame을 사용하도록 하기로 결정했다면, 새 페이지로 이동하기 전에 Frame 탐색 저널의 페이지를 지우십시오. 프로토콜 계약을 통해 시작할 때 사용자가 앱의 맨 위로 돌아갈 수 있도록 앱에 UI를 포함하는 것이 좋습니다.