앱 URI 처리기를 사용하여 웹 사이트에 대해 앱 활성화
웹 사이트용 앱은 앱을 웹 사이트와 연결하여 사용자가 웹 사이트 링크를 열면 브라우저가 열리지 않고 앱이 실행되도록 합니다. 앱이 설치되지 않은 경우 일반적으로 브라우저에 웹 사이트가 열립니다. 인증을 받은 콘텐츠 소유자만이 링크를 등록할 수 있으므로, 사용자는 이 환경을 신뢰할 수 있습니다. 사용자는 설정 > 앱 > 웹 사이트용 앱으로 이동하여 등록된 웹과 앱 연결을 모두 확인할 수 있습니다.
다음은 웹과 앱 연결을 사용하는 데 필요한 사항입니다.
- 앱이 매니페스트 파일에서 처리할 URI 식별하기
- 앱과 웹 사이트 간의 연결을 정의하는 JSON 파일입니다. 앱 매니페스트 선언과 같은 호스트 루트에 앱 패키지 패밀리 이름이 있습니다.
- 앱에서 활성화를 처리하세요.
참고 항목
Windows 10 크리에이터스 업데이트부터는 Microsoft Edge 레거시에서 지원 대상 링크를 클릭하면 해당 앱이 시작됩니다. 다른 브라우저(예: Microsoft Edge 크롬, Internet Explorer 등)에서 지원 대상 링크를 클릭하면 검색 환경을 계속 이용할 수 있습니다.
앱 매니페스트에서 http 및 https 링크를 처리하도록 등록하기
앱은 처리할 웹사이트의 URI를 식별해야 합니다. 이렇게 하려면 Windows.appUriHandler 확장자 등록을 앱의 매니페스트 파일인 Package.appxmanifest에 추가하세요.
그 예로 웹사이트의 주소가 “msn.com”인 경우, 앱의 매니페스트에서 다음 항목을 생성하세요.
<Applications>
<Application ... >
...
<Extensions>
<uap3:Extension Category="windows.appUriHandler">
<uap3:AppUriHandler>
<uap3:Host Name="msn.com" />
</uap3:AppUriHandler>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
위 선언에서는 지정된 호스트의 링크를 처리하기 위해 앱을 등록합니다. 웹사이트의 주소(예: m.example.com, www.example.com, example.com)가 여러 개라면 각 주소의 <uap3:AppUriHandler>
내부에 별도의 <uap3:Host Name=... />
항목을 추가하세요.
앱 및 웹사이트를 JSON 파일에 연결하기
원하는 앱으로만 웹사이트의 콘텐츠를 열 수 있게 하려면 웹 서버 루트 또는 도메인의 잘 알려진 디렉터리에 있는 JSON 파일에 담긴 앱의 패키지 제품군 이름을 입력하세요. 이는 해당 앱이 사이트에서 콘텐츠를 열 수 있도록 웹사이트가 동의한다는 것을 의미합니다. 패키지 제품군 이름은 앱 매니페스트 디자이너의 패키지 섹션에 있습니다.
Important
JSON 파일에는 .json 파일 접미사가 없어야 합니다.
이름이 windows-app-web-link인 JSON 파일(.json 파일 확장자 없음)을 생성하고 앱의 패키지 제품군 이름을 입력하세요. 예시:
[{
"packageFamilyName" : "Your app's package family name, e.g MyApp_9jmtgj1pbbz6e",
"paths" : [ "*" ],
"excludePaths" : [ "/news/*", "/blog/*" ]
}]
Windows는 웹사이트에 https를 연결하고 웹 서버에서 해당 JSON 파일을 검색합니다.
와일드카드
위 JSON 파일 예제에서는 와일드카드 사용을 보여줍니다. 와일드카드를 사용하면 코드 행이 적은 링크를 다양하게 지원할 수 있습니다. 웹-앱 연결은 JSON 파일에 대해 두 가지 유형의 와일드카드를 지원합니다.
와일드카드 | 설명 |
---|---|
* | 모든 하위 문자열을 나타냅니다. |
? | 단일 문자를 나타냅니다. |
예를 들어 위의 예제에서처럼 "excludePaths" : [ "/news/*", "/blog/*" ]
를 지정하면 앱은 /news/
및 /blog/
아래의 경로를 제외하고 웹 사이트의 주소(예: msn.com)로 시작하는 모든 경로를 지원합니다. 즉 msn.com/weather.html은 지원되지만 msn.com/news/topnews.html은 지원되지 않습니다.
다중 앱
웹사이트에 연결하려는 앱이 두 개인 경우, windows-app-web-link JSON 파일에 애플리케이션 패키지 제품군 이름 두 가지를 모두 입력하세요. 두 앱 모두 지원할 수 있습니다. 둘 다 설치되어 있다면 기본 링크로 선택할 수 있는 옵션이 사용자에게 표시됩니다. 나중에 기본 링크를 변경하려면 설정 및 웹 사이트용 앱에서 변경할 수 있습니다. 이외에도 개발자는 JSON 파일을 언제든지 변경하고, 빠르면 같은 날부터(단, 업데이트 후 8일 이내에) 변경 내용을 확인할 수 있습니다.
[{
"packageFamilyName": "Your apps's package family name, e.g MyApp_9jmtgj1pbbz6e",
"paths": [ "*" ],
"excludePaths" : [ "/news/*", "/blog/*" ]
},
{
"packageFamilyName": "Your second app's package family name, for example, MyApp2_8jmtgj2pbbz6e",
"paths": [ "/example/*", "/links/*" ]
}]
사용자에게 최상의 환경을 제공하려면 제외 경로를 사용해서 온라인 전용 콘텐츠가 JSON 파일의 지원 대상 경로에서 제외되게 하세요.
일치 항목이 있으면 제외 경로를 먼저 검사하고, 지정된 앱 대신 브라우저에서 해당 페이지가 열립니다. 위의 예제에서 ‘/news/*’(슬래시 없는 'news')에는 ‘newslocal/’, ‘newsinternational/’과 같이 ‘news*’ 아래의 모든 경로가 포함되고 그 경로 아래의 모든 페이지가 ‘/news*’에 포함됩니다.
콘텐츠에 연결할 활성화의 링크 처리하기
앱의 Visual Studio 솔루션에 있는 App.xaml.cs로 이동한 다음, OnActivated()에서 연결된 콘텐츠에 대한 처리 기능을 추가하세요. 다음 예제에서는 URI 경로에 따라 앱에서 열리는 페이지가 달라집니다.
protected override void OnActivated(IActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame == null)
{
...
}
// Check ActivationKind, Parse URI, and Navigate user to content
Type deepLinkPageType = typeof(MainPage);
if (e.Kind == ActivationKind.Protocol)
{
var protocolArgs = (ProtocolActivatedEventArgs)e;
switch (protocolArgs.Uri.AbsolutePath)
{
case "/":
break;
case "/index.html":
break;
case "/sports.html":
deepLinkPageType = typeof(SportsPage);
break;
case "/technology.html":
deepLinkPageType = typeof(TechnologyPage);
break;
case "/business.html":
deepLinkPageType = typeof(BusinessPage);
break;
case "/science.html":
deepLinkPageType = typeof(SciencePage);
break;
}
}
if (rootFrame.Content == null)
{
// Default navigation
rootFrame.Navigate(deepLinkPageType, e);
}
// Ensure the current window is active
Window.Current.Activate();
}
중요 위 예제에 나온 대로 최종 if (rootFrame.Content == null)
논리를 rootFrame.Navigate(deepLinkPageType, e);
(으)로 바꿔야 합니다.
테스트: 로컬 유효성 검사 도구
다음에서 사용할 수 있는 앱 호스트 등록 인증자 도구를 실행하면 앱 및 웹사이트의 구성을 테스트할 수 있습니다.
%windir%\system32\AppHostRegistrationVerifier.exe
다음 매개변수도 이 도구를 실행해서 앱 및 웹사이트의 구성을 테스트하세요.
hostname packagefamilyname 파일 경로 AppHostRegistrationVerifier.exe
- 호스트 이름: 웹 사이트(예: microsoft.com)
- PFN(패키지 제품군 이름): 원하는 앱의 PFN
- 파일 경로: 로컬 유효성 검사용 JSON 파일(예: C:\SomeFolder\windows-app-web-link)
도구에서 아무 것도 반환하지 않는 경우 해당 파일 업로드 시 유효성 검사가 이루어집니다. 오류 코드가 있는 경우 작동하지 않습니다.
다음 레지스트리 키를 사용하여 테스트용으로 로드된 앱에 대한 경로 일치를 로컬 유효성 검사의 일부로 강제 적용할 수 있습니다.
HKCU\Software\Classes\LocalSettings\Software\Microsoft\Windows\CurrentVersion\ AppModel\SystemAppData\YourApp\AppUriHandlers
키 이름: ForceValidation
값: 1
테스트: 웹 유효성 검사
링크를 클릭할 때 앱이 활성화되었는지 확인하려면 애플리케이션을 닫으세요. 그런 다음 웹사이트에서 지원 대상 경로 중 한 개의 주소를 복사하세요. 예를 들어 웹 사이트의 주소가 “msn.com”이고 지원 경로 중 하나가 “path1”이면 http://msn.com/path1
을 사용합니다.
앱이 닫혔는지 확인하세요. Windows 키 + R을 눌러 실행 대화 상자를 열고 링크를 해당 창에 붙여 넣으세요. 웹 브라우저 대신 앱이 열립니다.
또한 LaunchUriAsync API를 사용해 다른 앱에서 해당 앱을 열어서 테스트할 수 있습니다. 이 API를 사용하면 휴대폰으로도 테스트할 수 있습니다.
프로토콜 활성화 논리를 따르려면 OnActivated 이벤트 처리기에서 중단점을 설정하세요.
AppUriHandlers 팁:
- 앱에서 처리할 수 있는 링크만 지정해야 합니다.
- 지원할 호스트를 모두 나열하세요. www.example.com과 example.com은 서로 다른 호스트입니다.
- 사용자는 웹사이트를 처리할 때 선호하는 앱을 설정에서 선택할 수 있습니다.
- JSON 파일은 https 서버에 업로드해야 합니다.
- 지원하려는 경로를 변경해야 하는 경우, 앱을 다시 게시하지 않고도 JSON 파일을 다시 게시할 수 있습니다. 사용자는 1~8일 후에 변경 내용을 알게 됩니다.
- AppUriHandlers를 사용하여 사이드로드된 모든 앱에는 설치 시 호스트에 대해 유효성 검사를 거친 링크가 있습니다. 기능을 테스트하기 위해 JSON 파일을 업로드할 필요는 없습니다.
- 이 기능은 앱이 LaunchUriAsync로 시작된 UWP 앱이거나 ShellExecuteEx로 시작된 Windows 데스크톱 앱일 때마다 작동합니다. URL이 등록된 앱 URI 처리기에 해당한다면 브라우저 대신 앱이 시작됩니다.
참고 항목
웹-앱 예제 프로젝트windows.protocol registrationURI 활성화 처리연결 시작 샘플은 LaunchUriAsync() API 사용 방법을 보여 줍니다.