共用方式為


使用應用程式 URI 處理常式為網站啟用應用程式

適用於網站的應用程式會將您的應用程式與網站建立關聯,因此當有人開啟您網站的連結時,您的應用程式就會啟動,而不是開啟瀏覽器。 如果您的應用程式未安裝,您的網站會照常在瀏覽器中開啟。 使用者可以信任這種體驗,因為只有經過驗證的內容擁有者才能註冊連結。 用戶將能夠通過轉到網站的設置 > 應用程序 > 應用程序來檢查他們所有註冊的網絡到應用程序鏈接。

這很重要

從 Windows 10 創意者更新和所有 Windows 11 版本開始,在 Microsoft Edge Legacy 中點擊支援的連結將啟動相應的應用程式。 在支援的瀏覽器 (例如 Microsoft Edge Chromium、Firefox、Internet Explorer 等) 中按一下支援的連結,可讓您保持瀏覽體驗。

若要啟用網頁到應用程式連結,您需要:

  • 識別應用程式將在資訊清單檔案中處理的 URI
  • 定義應用程式與網站之間關聯的 JSON 檔案。 取代為與應用程式資訊清單宣告相同的主機根目錄上的應用程式套件系列名稱。
  • 在應用程式中處理啟動。

您的應用程式必須識別其將處理之網站的 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, and example.com),請在每個地址內<uap3:AppUriHandler>新增單獨<uap3:Host Name=... />的條目。

將您的應用程式和網站與 JSON 檔案建立關聯

若要確保只有您的應用程式可以開啟網站上的內容,請在位於網頁伺服器根目錄或網域上已知目錄的 JSON 檔案中包含應用程式的套件系列名稱。 這表示您的網站同意列出的應用程式開啟您網站上的內容。 您可以在應用程式資訊清單設計工具的 [套件] 區段中找到套件系列名稱。

這很重要

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 連接,並在您的 Web 服務器上查找相應的 JSON 文件。

子網域支援

如果您的應用程式資訊清單同時包含主要網域 (例如 example.com) 和萬用字元子網域 (例如 *.example.com),您必須將欄位 allowSubdomains 新增至 JSON 檔案,才能啟用子網域連結。 如果沒有此欄位,子網域的連結將在瀏覽器中開啟,而不是在您的應用程式中開啟。

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

allowSubdomains 設定為 true時,子網域的連結 (例如 subdomain.example.com/path ) 將在您的應用程式 (而不是瀏覽器) 中正確開啟。

萬用字元

上述 JSON 檔案範例示範萬用字元的使用。 萬用字元可讓您以較少的程式碼行數支援各種連結。 Web 到應用程式連結支援 JSON 檔案中的兩種萬用字元:

萬用字元 說明
* 代表任何子字串
代表單一字元

例如,在上述範例中,"excludePaths" : [ "/news/*", "/blog/*" ]您的應用程式將支援以您網站位址開頭的所有路徑 (例如 msn.com),但 和 /blog//news/ 的路徑除外msn.com/weather.html 將得到支持,但不會 msn.com/news/topnews.html

多個應用程式

如果您想要連結至網站的兩個應用程式,請在 windows-app-web-link JSON 檔案中列出這兩個應用程式套件系列名稱。 這兩個應用程序都可以支持。 如果兩者都安裝了,使用者將選擇哪個是預設連結。 如果他們稍後想更改默認鏈接,他們可以在 “設置 > ”“網站應用程序”中進行更改。 開發人員也可以隨時變更 JSON 檔案,最早在更新後的同一天看到變更,但不遲於更新後八天。

[{
  "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/*" ]
 }]

備註

如果您的應用程式需要支援子網域,請新增至 "allowSubdomains": true JSON 檔案中的每個應用程式項目。

若要為您的使用者提供最佳體驗,請使用排除路徑來確保從 JSON 檔案中支援的路徑中排除僅限線上的內容。

首先檢查排除路徑,如果有匹配的路徑,則使用瀏覽器而不是指定的應用程式開啟相應的頁面。 在上述範例中,'/news/*' 包含該路徑下的任何頁面,而 '/news*' (沒有正斜線追蹤 'news') 包含 'news*' 下的任何路徑,例如 'newslocal/'、'newsinternational/' 等。

流覽至應用程式的 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

使用下列參數執行此工具,以測試應用程式和網站的設定:

AppHostRegistrationVerifier.exe主機名稱 packagefamilyname 檔案路徑

  • 主機名稱:您的網站 (例如 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

測試一下:Web 驗證

關閉您的應用程式,以確認當您按一下連結時應用程式已啟動。 然後,複製您網站中支援路徑之一的位址。 例如,如果您網站的地址是“msn.com”,而其中一個支持路徑是“path1”,您將使用 http://msn.com/path1

確認您的應用程式已關閉。 按 Windows 鍵 + R 打開 “運行” 對話框並將鏈接粘貼到窗口中。 您的應用程式應該啟動,而不是網頁瀏覽器啟動。

此外,您可以使用 LaunchUriAsync API 從另一個應用程式啟動應用程式來測試您的應用程式。 您也可以使用此 API 在手機上進行測試。

如果您想要遵循通訊協定啟用邏輯,請在 OnActivated 事件處理常式中設定中斷點。

AppUriHandlers 提示

這些提示將幫助您充分利用 AppUriHandlers 功能:

  • 請務必只指定應用程式可以處理的連結。
  • 列出您將支援的所有主機。 請注意,www.example.com and example.com 是不同的主機。
  • 用戶可以在“設置”中選擇他們喜歡處理網站的應用程序。
  • 您的 JSON 檔案必須上傳至 https 伺服器。
  • 如果您需要變更想要支援的路徑,您可以重新發佈 JSON 檔案,而不重新發佈應用程式。 用戶將在 1-8 天內看到更改。
  • 所有具有 AppUriHandlers 的側載應用程式都會在安裝時具有主機的驗證連結。 您不需要上傳 JSON 檔案即可測試功能。
  • 只要您的應用程式是使用 LaunchUriAsync 啟動的 UWP 應用程式,或使用 ShellExecuteEx 啟動的 Windows 傳統型應用程式,此功能就會運作。 如果 URL 對應至已註冊的應用程式 URI 處理常式,則會啟動應用程式,而不是瀏覽器。

Web-to-App 範例專案

windows.protocol 註冊

處理 URI 啟用