Delen via


Apps voor websites inschakelen met behulp van app-URI-handlers

Apps voor websites koppelen uw app aan een website, zodat wanneer iemand een koppeling naar uw website opent, uw app wordt gestart in plaats van de browser te openen. Als uw app niet is geïnstalleerd, wordt uw website zoals gebruikelijk geopend in de browser. Gebruikers kunnen deze ervaring vertrouwen omdat alleen geverifieerde inhoudseigenaren zich kunnen registreren voor een koppeling. Gebruikers kunnen al hun geregistreerde web-naar-app-koppelingen controleren door naar Instellingen > Apps > Apps voor websites te gaan.

Belangrijk

Vanaf de Windows 10 Creators Update en in alle Windows 11-versies worden ondersteunde koppelingen die in Microsoft Edge Legacy zijn aangeklikt, geopend in de bijbehorende app. Ondersteunde koppelingen die zijn geklikt in ondersteunde browsers (bijvoorbeeld Microsoft Edge Chromium, Firefox, Internet Explorer, enzovoort), houden u in de browse-ervaring.

Als u web-naar-app-koppeling wilt inschakelen, moet u het volgende doen:

  • De URI's identificeren die door uw app worden verwerkt in het manifestbestand
  • Een JSON-bestand dat de koppeling tussen uw app en uw website definieert. met de familienaam van het app-pakket in dezelfde hosthoofdmap als de declaratie van het app-manifest.
  • De activering in de app afhandelen.

Uw app moet de URI's identificeren voor de websites die door deze app worden verwerkt. Hiervoor voegt u de Windows.appUriHandler extensieregistratie toe aan het manifestbestand van uw app Package.appxmanifest.

Als het adres van uw website bijvoorbeeld 'msn.com' is, maakt u de volgende vermelding in het manifest van uw app:

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

De bovenstaande declaratie registreert uw app om koppelingen van de opgegeven host te verwerken. Als uw website meerdere adressen heeft (bijvoorbeeld: m.example.com, www.example.com, and example.com) voegt u een afzonderlijke <uap3:Host Name=... /> vermelding toe binnen de <uap3:AppUriHandler> voor elk adres.

Uw app en website koppelen aan een JSON-bestand

Als u ervoor wilt zorgen dat alleen uw app inhoud op uw website kan openen, moet u de familienaam van uw app opnemen in een JSON-bestand in de hoofdmap van de webserver of in de bekende map in het domein. Hiermee wordt aangegeven dat uw website toestemming geeft voor de vermelde apps om inhoud op uw site te openen. U vindt de familienaam van het pakket in de sectie Pakketten in de app-manifestontwerper.

Belangrijk

Het JSON-bestand mag geen .json achtervoegsel hebben.

Maak een JSON-bestand (zonder de .json bestandsextensie) met de naam windows-app-web-link en geef de familienaam van uw app op. Bijvoorbeeld:

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

Windows maakt een https-verbinding met uw website en zoekt naar het bijbehorende JSON-bestand op uw webserver.

Jokertekens

In het bovenstaande voorbeeld van het JSON-bestand ziet u het gebruik van jokertekens. Met jokertekens kunt u een groot aantal koppelingen met minder regels code ondersteunen. Web-naar-app-koppeling ondersteunt twee typen jokertekens in het JSON-bestand:

jokerteken beschrijving
* Vertegenwoordigt een subtekenreeks
? Vertegenwoordigt één teken

Op basis van "excludePaths" : [ "/news/*", "/blog/*" ] in het bovenstaande voorbeeld ondersteunt uw app bijvoorbeeld alle paden die beginnen met het adres van uw website (bijvoorbeeld msn.com), behalve paden onder /news/ en /blog/. msn.com/weather.html wordt ondersteund, maar niet msn.com/news/topnews.html.

Meerdere apps

Als u twee apps hebt die u wilt koppelen aan uw website, vermeldt u beide familienamen van het toepassingspakket in uw windows-app-web-link JSON-bestand. Beide apps kunnen worden ondersteund. De gebruiker krijgt een keuze te zien waarvan de standaardkoppeling is als beide zijn geïnstalleerd. Als ze de standaardkoppeling later willen wijzigen, kunnen ze deze wijzigen in Instellingen > Apps voor Websites. Ontwikkelaars kunnen het JSON-bestand ook op elk gewenst moment wijzigen en de wijziging zien zo vroeg als dezelfde dag, maar niet later dan acht dagen na de update.

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

Als u uw gebruikers de beste ervaring wilt bieden, gebruikt u uitsluitingspaden om ervoor te zorgen dat alleen-online-inhoud wordt uitgesloten van de ondersteunde paden in uw JSON-bestand.

Uitgesloten paden worden eerst gecontroleerd en als er een overeenkomst is, wordt de bijbehorende pagina geopend met de browser in plaats van de aangewezen app. In het bovenstaande voorbeeld omvat '/news/*' alle pagina's onder dat pad, terwijl '/news*' (geen schuine streep na 'news') alle paden omvat onder 'news*', zoals 'newslocal/', 'newsinternational/', enzovoort.

Navigeer naar App.xaml.cs in de Visual Studio-oplossing van uw app en voeg in OnActivated() verwerking voor gekoppelde inhoud toe. In het volgende voorbeeld is de pagina die in de app wordt geopend, afhankelijk van het URI-pad:

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

Belangrijk

Zorg ervoor dat u de uiteindelijke logica van if (rootFrame.Content == null) vervangt door rootFrame.Navigate(deepLinkPageType, e);, zoals wordt weergegeven in het bovenstaande voorbeeld.

Testen in een lokaal validatieprogramma

U kunt de configuratie van uw app en website testen door het controleprogramma voor app-hostregistratie uit te voeren dat beschikbaar is in:

%windir%\system32\AppHostRegistrationVerifier.exe

Test de configuratie van uw app en website door dit hulpprogramma uit te voeren met de volgende parameters:

AppHostRegistrationVerifier.exehostname packagefamilyname filepath

  • Hostnaam: Uw website (bijvoorbeeld microsoft.com)
  • PfN (Package Family Name): PFN van uw app
  • Bestandspad: het JSON-bestand voor lokale validatie (bijvoorbeeld C:\SomeFolder\windows-app-web-link)

Als het hulpprogramma niets retourneert, werkt de validatie bij het uploaden van dat bestand. Als er een foutcode is, werkt deze niet.

U kunt de volgende registersleutel inschakelen om padkoppeling af te dwingen voor apps die naast elkaar zijn geladen als onderdeel van lokale validatie:

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

Sleutelnaam: ForceValidation waarde: 1

Testen: webvalidatie

Sluit uw toepassing om te controleren of de app is geactiveerd wanneer u op een koppeling klikt. Kopieer vervolgens het adres van een van de ondersteunde paden op uw website. Als het adres van uw website bijvoorbeeld 'msn.com' is en een van de ondersteuningspaden 'pad1' is, gebruikt u http://msn.com/path1

Controleer of uw app is gesloten. Druk op Windows-toets + R- om het dialoogvenster Uitvoeren te openen en plak de koppeling in het venster. Uw app moet worden gestart in plaats van de webbrowser.

Daarnaast kunt u uw app testen door deze vanuit een andere app te starten met behulp van de LaunchUriAsync-API. U kunt deze API ook gebruiken om te testen op telefoons.

Als u de logica voor protocolactivering wilt volgen, stelt u een onderbrekingspunt in de OnActivated gebeurtenis-handler in.

Tips voor AppUriHandlers

Deze tips helpen u optimaal gebruik te maken van de functie AppUriHandlers:

  • Zorg ervoor dat u alleen koppelingen opgeeft die door uw app kunnen worden verwerkt.
  • Vermeld alle hosts die u wilt ondersteunen. Houd er rekening mee dat www.example.com and example.com verschillende hosts zijn.
  • Gebruikers kunnen in Instellingen kiezen welke app zij de voorkeur geven om websites te openen.
  • Uw JSON-bestand moet worden geüpload naar een https-server.
  • Als u de paden wilt wijzigen die u wilt ondersteunen, kunt u uw JSON-bestand opnieuw publiceren zonder de app opnieuw te publiceren. Gebruikers zien de wijzigingen in 1-8 dagen.
  • Alle sideloaded apps met AppUriHandlers zullen bij installatie gevalideerde koppelingen voor de host hebben. U hoeft geen JSON-bestand te hebben geüpload om de functie te testen.
  • Deze functie werkt wanneer uw app een UWP-app is die wordt gestart met LaunchUriAsync- of een Windows-bureaublad-app die wordt gestart met ShellExecuteEx. Als de URL overeenkomt met een geregistreerde app-URI-handler, wordt de app gestart in plaats van de browser.

web-naar-app-voorbeeldproject

registratie van windows.protocol

Activeren van URI verwerken