Aktivieren von Apps für Websites mit App-URI-Handlern

Apps für Websites ordnet Ihre App einer Website zu, sodass ihre App gestartet wird, anstatt den Browser zu öffnen, wenn jemand einen Link zu Ihrer Website öffnet. Wenn Ihre App nicht installiert ist, wird Ihre Website wie gewohnt im Browser geöffnet. Benutzer können dieser Erfahrung vertrauen, da nur Urheber verifizierten Contents registrieren können. Benutzer können alle registrierten Web-to-App-Links überprüfen, indem Sie zu Einstellungen > Apps > Apps für Websites wechseln.

Zum Aktivieren der Web-zu-App-Verknüpfung müssen Sie Folgendes ausführen:

  • Identifizieren Sie die URIs, die Ihrer App in der Manifestdatei behandeln wird.
  • Eine JSON-Datei, die die Zuordnung zwischen Ihrer App und Ihrer Website definiert. mit dem App-Paketfamiliennamen am gleichen Hoststamm wie die App-Manifestdeklaration.
  • Behandeln Sie die Aktivierung in der App

Hinweis

Ab dem Windows 10 Creators-Update werden unterstützte Links, die in Vorgängerversion von Microsoft Edge geklickt werden, die entsprechende App starten. Unterstützte Links, die in anderen Browsern geklickt werden (z. B. Microsoft Edge-Chromium, Internet Explorer usw.), halten Sie in der Browserumgebung.

Ihre App muss die URIs für die Websites zu identifizieren, die sie behandeln soll. Fügen Sie hierzu die Windows.appUriHandler Erweiterung Registrierung zu Ihrer app-Manifestdatei hinzu Package.appxmanifest.

Wenn beispielsweise die Adresse Ihrer Website "msn.com" lautet, würden Sie den folgenden Eintrag in Ihrem App-Manifest machen:

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

Die obige Deklaration registriert Ihre App zur Behandlung von Links vom angegebenen Host. Wenn Ihre Website mehrere Adressen hat (z. B.: m.example.com, www.example.com und example.com), fügen Sie einen separaten <uap3:Host Name=... /> Eintrag innerhalb des <uap3:AppUriHandler> für die einzelnen Adressen hinzu.

Verknüpfen Sie Ihre App und die Website mit einer JSON-Datei

Um sicherzustellen, dass nur Ihre App die Inhalte auf Ihrer Website öffnen kann, sollten Sie den Paketfamiliennamen Ihrer App in eine JSON-Datei einbinden, die auf dem Webserver-Stammverzeichnis oder in einem bekannten Verzeichnis der Domäne liegt. Dies bedeutet, dass Ihre Website die Zustimmung gibt, dass die aufgeführten Apps Inhalte auf Ihrer Website öffnen können. Sie können den Paketfamiliennamen im Packages-Abschnitt Pakete des App-Manifest-Designers finden.

Wichtig

Die JSON-Datei sollte kein .json Dateisuffix aufweisen.

Erstellen Sie eine JSON-Datei (ohne die Erweiterung .json) mit dem Namen Windows-App-Web-Link und stellen Sie den Paketfamiliennamen Ihrer App bereit. Beispiel:

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

Windows wird eine Https-Verbindung mit Ihrer Website herstellen und nach der entsprechenden JSON Datei auf dem Webserver suchen.

Platzhalter

Das obige für eine JSON-Datei veranschaulicht die Verwendung von Platzhaltern. Platzhalter erlauben es Ihnen eine Vielzahl von Links mit weniger Codezeilen zu unterstützen. Die Web-zu-App-Verknüpfung unterstützt zwei Arten von Platzhaltern in der JSON-Datei:

Platzhalter Beschreibung
* Repräsentiert eine beliebige Teilzeichenfolge
? Steht für ein einzelnes Zeichen

Im obigen "excludePaths" : [ "/news/*", "/blog/*" ] Beispiel unterstützt Ihre App beispielsweise alle Pfade, die mit der Adresse Ihrer Website beginnen (z. B. msn.com), mit Ausnahme der Pfade unter /news/ und /blog/. msn.com/weather.html werden unterstützt, aber nicht msn.com/news/topnews.html.

Mehrere Apps

Wenn Sie zwei Apps haben, die Sie mit Ihrer Website verknüpfen möchten, listen Sie beide Paketfamiliennamen der Apps in der Windows-App-Web-Link JSON-Datei auf. Beide Apps können unterstützt werden. Dem Benutzer wird eine Auswahl für den Standardlink angezeigt, wenn beide Apps installiert sind. Wenn sie den Standardlink später ändern möchten, können sie ihn unter Einstellungen > Apps für Websites ändern. Entwickler können auch die JSON-Datei jederzeit ändern und die Änderung noch am selben Tag, aber bis spätestens acht Tage nach dem Update einsehen.

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

Um Ihren Benutzern die bestmögliche Erfahrung zu bieten, verwenden Sie Ausschlusspfade, um sicherzustellen, dass der nur online verfügbare Inhalt von den unterstützten Pfaden in der JSON-Datei ausgenommen ist.

Ausschlusspfade werden zuerst überprüft, und wenn eine Übereinstimmung vorliegt wird die entsprechende Seite mit dem Browser anstelle der angegebenen App geöffnet. Im obigen Beispiel enthält "/news/*" alle Seiten unter diesem Pfad, während "/news*" (kein Schrägstrich "News") alle Pfade unter "news*" enthält, z. B. "newslocal/", "newsinternational/", usw.

Navigieren Sie zu App.xaml.cs in der Visual Studio Lösung für Ihrer App und fügen Sie in OnActivated() die Behandlung für verknüpfte Inhalte hinzu. Im folgenden Beispiel hängt die Seite, die in der App geöffnet wird, vom URI-Pfad ab:

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();
}

Wichtig Stellen Sie sicher, dass das finale if (rootFrame.Content == null) logic durch rootFrame.Navigate(deepLinkPageType, e); ersetzt wird, wie im obigen Beispiel gezeigt wird.

Testen Sie: Lokales Überprüfungswerkzeug

Sie können die Konfiguration Ihrer App und Website durch Ausführen des App-Host Registration Verifier Werkzeugs prüfen, der hier verfügbar ist:

%windir%\system32\AppHostRegistrationVerifier.exe

Testen Sie die Konfiguration Ihrer App und, indem Sie dieses Werkzeug mit folgenden Parametern ausführen.

AppHostRegistrationVerifier.exehostname packagefamilyname filepath

  • Hostname: Ihre Website (z. B. microsoft.com)
  • Paketfamiliennamen (PFN): Ihre App-PFN
  • Dateipfad: Die JSON-Datei für die lokale Überprüfung (z. B. C:\SomeFolder\windows-app-web-link)

Wenn das Tool nichts zurückgibt, funktioniert die Überprüfung für diese Datei beim Hochladen. Wenn ein Fehlercode vorhanden ist, funktioniert er nicht.

Sie können den folgenden Registrierungsschlüssel aktivieren, um den Pfadabgleich für quer geladene Apps im Rahmen der lokalen Überprüfung zu erzwingen:

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

Schlüsselname: ForceValidation Wert: 1

Testen Sie es: Web-Überprüfung

Schließen Sie die Anwendung, um sicherzustellen, dass die App aktiviert wird, wenn Sie auf einen Link klicken. Kopieren Sie dann die Adresse eines unterstützten Pfades in Ihrer Website. Wenn die Adresse Ihrer Website beispielsweise "msn.com" lautet und einer der Supportpfade "path1" ist, würden Sie verwenden. http://msn.com/path1

Stellen Sie sicher, dass Ihre app geschlossen ist. Drücken Sie die Windows-Taste + R zum Öffnen des ausführen-Dialogfelds fügen Sie den Link im Fenster ein. Ihre app sollte anstelle des Webbrowsers gestartet werden.

Darüber hinaus können Sie Ihre App testen, indem Sie sie über eine andere app mithilfe der LaunchUriAsync API starten. Diese API können auch Sie nutzen, um dies auf Telefonen zu testen.

Wenn Sie der protocol activation logic zu folgen möchten, legen Sie einen Haltepunkt im OnActivated -Ereignishandler fest.

AppUriHandlers Tipps:

  • Stellen Sie sicher, dass Sie nur Links angeben, die mit Ihrer App kompatibel sind.
  • Listen Sie alle Hosts auf, die Sie unterstützen werden. Beachten Sie, dass www.example.com und example.com verschiedene Hosts sind.
  • Benutzer können in den Einstellungen auswählen, welche App sie zum Öffnen von Websites bevorzugen.
  • Ihre JSON-Datei muss auf einen Https-Server hochgeladen werden.
  • Wenn Sie die Pfade, die Sie unterstützen möchten, ändern müssen, können Sie JSON-Datei erneut hochladen, ohne Ihre App erneut veröffentlichen zu müssen. Benutzern wird die Änderungen in 1 bis 8 Tagen angezeigt.
  • Alle quergeladenen Apps mit AppUriHandlern werden validierte Links für den Host on Install haben Sie müssen kein JSON-Datei hochgeladen haben, um das Feature zu testen.
  • Dieses Feature funktioniert immer dann, wenn es sich bei Ihrer App um eine mit LaunchUriAsync gestartete UWP-App oder um eine Windows-Desktop-App handelt, die mit ShellExecuteEx gestartet wurde. Wenn die URL einen registrierten URI App Handler entspricht, wird die App anstelle des Browsers gestartet werden.

Siehe auch

Web-to-App-Beispielprojektwindows.protocol registrierungHandle URI ActivationAssociation Launchbeispiel veranschaulicht die Verwendung der LaunchUriAsync()-API.