アプリの URI ハンドラーを使用して web サイト用のアプリを有効にします。Enable apps for websites using app URI handlers

Web サイト用のアプリは、アプリが起動の代わりに、ブラウザーを開いて、web サイトへのリンクを開いたときにできるように、web サイトでアプリを関連付けます。Apps for Websites associates your app with a website so that when someone opens a link to your website, your app is launched instead of opening the browser. アプリがインストールされていない場合、web サイトを通常どおり、ブラウザーで開きます。If your app is not installed, your website opens in the browser as usual. 検証済みのコンテンツ所有者だけがリンクに登録できるため、ユーザーはこのエクスペリエンスを信頼することができます。Users can trust this experience because only verified content owners can register for a link. ユーザーがすべてが登録されている web-に-アプリへのリンクの設定に移動してにチェックできる > アプリ > web サイト用のアプリです。Users will be able to check all of their registered web-to-app links by going to Settings > Apps > Apps for websites.

Web のアプリのリンクを有効にするのには必要があります。To enable web-to-app linking you will need to:

  • アプリが処理する URI をマニフェスト ファイル内に指定します。Identify the URIs your app will handle in the manifest file
  • アプリと web サイト間の関係を定義する JSON ファイルを指定します。A JSON file that defines the association between your app and your website. アプリと同じホスト ルートで、アプリ パッケージ ファミリ名マニフェストの宣言を実行します。with the app Package Family Name at the same host root as the app manifest declaration.
  • アプリでアクティブ化を処理します。Handle the activation in the app.

注意

Windows 10 の作成者の更新プログラムを開始、サポートされているリンクをクリックしてで Microsoft Edge は、対応するアプリを起動します。Starting with the Windows 10 Creators update, supported links clicked in Microsoft Edge will launch the corresponding app. サポートされているリンクを他のブラウザー (例: Internet Explorer など) をクリックしてでは、参照のエクスペリエンスで保持されます。Supported links clicked in other browsers (e.g. Internet Explorer, etc.), will keep you in the browsing experience.

アプリでは、処理する Web サイトの URI を指定する必要があります。Your app needs to identify the URIs for the websites it will handle. そのためには、Windows.appUriHandler 拡張機能登録をアプリのマニフェスト ファイル Package.appxmanifest に追加します。To do so, add the Windows.appUriHandler extension registration to your app’s manifest file Package.appxmanifest.

たとえば、Web サイトのアドレスが “msn.com” である場合は、アプリのマニフェスト内に次のエントリを作成します。For example, if your website’s address is “msn.com” you would make the following entry in your app’s manifest:

<Applications>
  <Application ... >
      ...
      <Extensions>
         <uap3:Extension Category="windows.appUriHandler">
          <uap3:AppUriHandler>
            <uap3:Host Name="msn.com" />
          </uap3:AppUriHandler>
        </uap3:Extension>
      </Extensions>
  </Application>
</Applications>

上記の宣言によって、指定されたホストからのリンクを処理するようにアプリが登録されます。The declaration above registers your app to handle links from the specified host. Web サイトに複数のアドレス (m.example.com、www.example.com、example.com など) がある場合は、各アドレスに対応するように、<uap3:AppUriHandler> 内に個別の <uap3:Host Name=... /> エントリを追加します。If your website has multiple addresses (for example: m.example.com, www.example.com, and example.com) then add a separate <uap3:Host Name=... /> entry inside of the <uap3:AppUriHandler> for each address.

アプリと Web サイトを JSON ファイルに関連付けるAssociate your app and website with a JSON file

アプリで開くことができるのがお客様の Web サイトのコンテンツのみにする場合は、Web サーバーのルートまたはドメイン上の既知のディレクトリに配置されている JSON ファイル内に、アプリのパッケージ ファミリ名を指定します。To ensure that only your app can open content on your website, include your app's package family name in a JSON file located in the web server root, or at the well-known directory on the domain. これにより、お客様の Web サイトは、指定されている一連のアプリがサイト上のコンテンツを開くことに同意したことになります。This signifies that your website gives consent for the listed apps to open content on your site. パッケージ ファミリ名は、アプリケーション マニフェスト デザイナーの [パッケージ] セクションで確認できます。You can find the package family name in the Packages section in the app manifest designer.

重要

JSON ファイルには、.json ファイル接尾辞を指定しないでください。The JSON file should not have a .json file suffix.

windows-app-web-link という名前で JSON ファイルを作成し (.json ファイル拡張子は付加しない)、アプリのパッケージ ファミリ名を指定します。Create a JSON file (without the .json file extension) named windows-app-web-link and provide your app’s package family name. 次に例を示します。For example:

[{
  "packageFamilyName": "Your app's package family name, e.g MyApp_9jmtgj1pbbz6e",
  "paths": [ "*" ],
  "excludePaths" : [ "/news/*", "/blog/*" ]
 }]

Windows によって、Web サイトへの https 接続が行われ、Web サーバー上の対応する JSON ファイルが検索されます。Windows will make an https connection to your website and will look for the corresponding JSON file on your web server.

ワイルドカードWildcards

上記の JSON ファイルの例では、ワイルドカードの使用も示しています。The JSON file example above demonstrates the use of wildcards. ワイルドカードを使用すると、数行のコードでさまざまなリンクをサポートすることができます。Wildcards allow you to support a wide variety of links with fewer lines of code. Web とアプリのリンクでは、JSON ファイルで 2 種類のワイルドカードを使用できます。Web-to-app linking supports two types of wildcards in the JSON file:

ワイルドカードWildcard 説明Description
\* 任意の部分文字列を表しますRepresents any substring
?? 1 つの文字を表しますRepresents a single character

たとえば、 "excludePaths" : [ "/news/*", "/blog/*" ] 、上記の例では、アプリは、下にあるものを除くweb サイトのアドレス (例: msn.com) で始まるすべてのパスをサポート/news//blog/します。For example, given "excludePaths" : [ "/news/*", "/blog/*" ] in the example above, your app will support all paths that start with your website’s address (e.g. msn.com), except those under /news/ and /blog/. つまり、msn.com/weather.html はサポートされますが、*msn.com/news/topnews.html* はサポートされません。msn.com/weather.html will be supported, but not *msn.com/news/topnews.html*.

複数のアプリMultiple apps

Web サイトにリンクするアプリが 2 つある場合、両方のアプリケーションのパッケージ ファミリ名を windows-app-web-link JSON ファイルに指定します。If you have two apps that you would like to link to your website, list both of the application package family names in your windows-app-web-link JSON file. これで、どちらのアプリもサポートされます。Both apps can be supported. 両方のアプリがインストールされている場合、ユーザーに対して、どちらを既定のリンクとして選ぶかが示されます。The user will be presented with a choice of which is the default link if both are installed. 既定のリンクを後で変更する場合は、[設定] > [Web サイト用のアプリ] で変更できます。If they want to change the default link later, they can change it in Settings > Apps for Websites. また、開発者はいつでも JSON ファイルを変更できます。変更内容は、変更と同日内になるべく早く確認するか、更新後 8 日以内に確認してください。Developers can also change the JSON file at any time and see the change as early as the same day but no later than eight days after the update.

[{
  "packageFamilyName": "Your apps's package family name, e.g MyApp_9jmtgj1pbbz6e",
  "paths": [ "*" ],
  "excludePaths" : [ "/news/*", "/blog/*" ]
 },
 {
  "packageFamilyName": "Your second app's package family name, e.g. MyApp2_8jmtgj2pbbz6e",
  "paths": [ "/example/*", "/links/*" ]
 }]

ユーザーに最適なエクスペリエンスを提供するには、JSON ファイル内のサポート対象のパスからオンラインのみのコンテンツが除外されるように、除外パスを使用してください。To provide the best experience for your users, use exclude paths to make sure that online-only content is excluded from the supported paths in your JSON file.

最初に除外パスが確認され、除外パスが一致すると、そのパスに対応するページは、指定されたアプリではなくブラウザーで開かれます。Exclude paths are checked first and if there is a match the corresponding page will be opened with the browser instead of the designated app. 上記の例では、‘/news/*’ と指定すると、そのパスの下にあるすべてのページが対象となりますが、‘/news*’ ('news' の後にスラッシュを付けない) と指定すると、‘news*’ で始まるパス (‘newslocal/’、‘newsinternational/’ など) の下にあるすべてのパスが対象となります。In the example above, ‘/news/*’ includes any pages under that path while ‘/news*’ (no forward slash trails 'news') includes any paths under ‘news*’ such as ‘newslocal/’, ‘newsinternational/’, and so on.

アプリの Visual Studio ソリューションで App.xaml.cs に移動し、OnActivated() に、リンクされたコンテンツの処理を追加します。Navigate to App.xaml.cs in your app’s Visual Studio solution and in OnActivated() add handling for linked content. 次の例では、アプリで開かれるページは URI パスによって異なります。In the following example, the page that is opened in the app depends on the URI path:

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); に置き換えてください。Important Make sure to replace the final if (rootFrame.Content == null) logic with rootFrame.Navigate(deepLinkPageType, e); as shown in the example above.

テストの実行: ローカルの検証ツールTest it out: Local validation tool

アプリ ホスト登録検証ツールを実行して、アプリと Web サイトの構成をテストできます。このツールは次の場所にあります。You can test the configuration of your app and website by running the App host registration verifier tool which is available in:

%windir%\system32\AppHostRegistrationVerifier.exe%windir%\system32\AppHostRegistrationVerifier.exe

次のパラメーターを使用してこのツールを実行し、アプリと Web サイトの構成をテストしてください。Test the configuration of your app and website by running this tool with the following parameters:

AppHostRegistrationVerifier.exe hostname packagefamilyname filepathAppHostRegistrationVerifier.exe hostname packagefamilyname filepath

  • ホスト名: Web サイト (microsoft.com など)Hostname: Your website (e.g. microsoft.com)
  • パッケージ ファミリ名 (PFN): アプリの PFNPackage Family Name (PFN): Your app’s PFN
  • ファイル パス: ローカルな検証のための JSON ファイル (C:\SomeFolder\windows-app-web-link など)File path: The JSON file for local validation (e.g. C:\SomeFolder\windows-app-web-link)

場合は、ツールは何か、そのファイルをアップロードするときに入力規則が有効です。If the tool does not return anything, validation will work on that file when uploaded. エラー コードがある場合は使用できません。If there is an error code, it will not work.

パスのローカルの入力規則の一部として側にロードされているアプリの一致を強制する次のレジストリ キーを有効にすることができます。You can enable the following registry key to force path matching for side-loaded apps as part of local validation:

HKCU\Software\Classes\LocalSettings\Software\Microsoft\Windows\CurrentVersion\ AppModel\SystemAppData\YourApp\AppUriHandlers

キー名:ForceValidation値。Keyname: ForceValidation Value: 1

テストの実行: Web 検証Test it: Web validation

リンクをクリックしたときにアプリがアクティブ化されるかどうか確認するには、アプリケーションを閉じておきます。Close your application to verify that the app is activated when you click a link. 次に、Web サイトでサポートされるパスのいずれかのアドレスをコピーします。Then, copy the address of one of the supported paths in your website. たとえば、Web サイトのアドレスが “msn.com” であり、サポートされるパスの 1 つが “path1” である場合、アドレスは次のようになります。For example, if your website’s address is “msn.com”, and one of the support paths is “path1”, you would use http://msn.com/path1

アプリが閉じていることを確認します。Verify that your app is closed. Windows キー + R キーを押し、[ファイル名を指定して実行] ダイアログ ボックスを開き、ウィンドウにリンクを貼り付けます。Press Windows Key + R to open the Run dialog box and paste the link in the window. Web ブラウザーではなく、アプリが起動します。Your app should launch instead of the web browser.

また、LaunchUriAsync API を使用し、他のアプリから目的のアプリを起動してテストすることもできます。Additionally, you can test your app by launching it from another app using the LaunchUriAsync API. この API を使用して、電話でテストすることもできます。You can use this API to test on phones as well.

プロトコルのアクティブ化ロジックを実行する場合は、OnActivated イベント ハンドラーにブレークポイントを設定します。If you would like to follow the protocol activation logic, set a breakpoint in the OnActivated event handler.

AppUriHandlers のヒント:AppUriHandlers tips:

  • アプリで処理できるリンクのみを必ず指定してください。Make sure to only specify links that your app can handle.
  • サポートするすべてのホストの一覧を指定します。List all of the hosts that you will support. www.example.com と example.com は、異なるホストになります。Note that www.example.com and example.com are different hosts.
  • ユーザーは、Web サイトを処理する特定のアプリを [設定] で選ぶことができます。Users can choose which app they prefer to handle websites in Settings.
  • JSON ファイルは、https サーバーにアップロードする必要があります。Your JSON file must be uploaded to an https server.
  • サポートするパスを変更する場合は、アプリを再公開しなくても、JSON ファイルを再公開することができます。If you need to change the paths that you wish to support, you can republish your JSON file without republishing your app. ユーザーには、1 ~ 8 日の間、変更内容が表示されます。Users will see the changes in 1-8 days.
  • AppUriHandlers と共にサイドロードされたすべてのアプリでは、インストール時にホストのリンクが検証されます。All sideloaded apps with AppUriHandlers will have validated links for the host on install. 機能をテストするために JSON ファイルをアップロードする必要はありません。You do not need to have a JSON file uploaded to test the feature.
  • この機能は、アプリが LaunchUriAsync によって起動された UWP アプリである場合、または ShellExecuteEx によって起動された Windows デスクトップ アプリである場合は、必ず動作します。This feature works whenever your app is a UWP app launched with LaunchUriAsync or a Windows desktop app launched with ShellExecuteEx. URL が、登録されているアプリの URI ハンドラーに対応している場合、ブラウザーではなくアプリが起動されます。If the URL corresponds to a registered App URI handler, the app will be launched instead of the browser.

関連項目See also

プロジェクトのアプリを web 例 windows.protocol 登録 URI のライセンス認証を処理 サンプルの関連付けを起動するLaunchUriAsync() API を使用する方法を示します。Web-to-App example project windows.protocol registration Handle URI Activation Association Launching sample illustrates how to use the LaunchUriAsync() API.