PWA's als URL-handlers

Laat geïnstalleerde PWA's URL's verwerken voor een meer geïntegreerde ervaring.

Wat zijn PWA's als URL-handlers?

Stel je voor dat je met een vriend aan het chatten bent via een instant messenger-applicatie zoals Berichten op macOS en dat je over muziek praat. Stel je verder voor dat jullie allebei de music.example.com PWA op jullie apparaten hebben geïnstalleerd. Als je je favoriete nummer wilt delen zodat je vriend ervan kan genieten, kun je hem of haar een deep link sturen, zoals https://music.example.com/rick-astley/never-gonna-give-you-up . Omdat deze link behoorlijk lang is, hebben de ontwikkelaars van music.example.com mogelijk besloten om aan elke track een extra korte link toe te voegen, zoals bijvoorbeeld https://🎵.example.com/ra/nggyu .

Met PWA als URL-handlers kunnen apps zoals music.example.com zichzelf registreren als URL-handlers voor URL's die overeenkomen met patronen zoals https://music.example.com , https://*.music.example.com of https://🎵.example.com , zodat links van buiten de PWA, bijvoorbeeld vanuit een instant messenger-toepassing of een e-mailclient, worden geopend in de geïnstalleerde PWA in plaats van op een browsertabblad.

PWA als URL-handlers bestaat uit twee toevoegingen:

  1. Het manifestlid van de web-app "url_handlers" .
  2. De bestandsindeling web-app-origin-association voor het valideren van URL-associaties binnen en buiten het bereik.

Voorgestelde gebruiksscenario's voor PWA's als URL-handlers

Voorbeelden van sites die deze API kunnen gebruiken zijn:

  • Muziek- of videostreamingsites, dus tracklinks of afspeellijstlinks worden geopend in de spelerervaring van de app.
  • Nieuws- of RSS-lezers, dus gevolgde of geabonneerde sites, worden geopend in de leesmodus van de app.

Hoe u PWA's als URL-handlers kunt gebruiken

Inschakelen via about://flags

Als u lokaal wilt experimenteren met PWA's als URL-handlers, zonder een origin-proeftoken, schakelt u de vlag #enable-desktop-pwas-url-handling in about://flags .

Het manifestlid van de web-app "url_handlers"

Als u een geïnstalleerde PWA wilt koppelen aan URL-patronen, moeten deze patronen worden opgegeven in het web-app-manifest. Dit gebeurt via het lid "url_handlers" . Het accepteert een array van objecten met een origin eigenschap, wat een vereiste string is die een patroon is voor het matchen van origins. Deze patronen mogen een wildcard ( * )-voorvoegsel hebben om meerdere subdomeinen op te nemen (zoals https://*.example.com ). URL's die overeenkomen met deze oorsprong kunnen door deze webapp worden verwerkt. Er wordt altijd aangenomen dat het schema https:// is, maar dit moet expliciet worden vermeld.

Het onderstaande fragment van een webapp-manifest laat zien hoe het muziek-PWA-voorbeeld uit de inleidende paragraaf dit zou kunnen opzetten. De tweede invoer met het jokerteken ( "https://*.music.example.com" ) zorgt ervoor dat de app ook wordt geactiveerd voor https://www.music.example.com of mogelijke andere voorbeelden zoals https://marketing-activity.music.example.com .

{
  "url_handlers": [
    {
      "origin": "https://music.example.com"
    },
    {
      "origin": "https://*.music.example.com"
    },
    {
      "origin": "https://🎵.example.com"
    }
  ]
}

Het web-app-origin-association

Omdat de PWA op een andere oorsprong ( music.example.com ) staat dan sommige van de URL's die deze moet verwerken (bijvoorbeeld https://🎵.example.com ), moet de app het eigendom van deze andere oorsprong verifiëren. Dit gebeurt in een web-app-origin-association dat op de andere oorsprong wordt gehost.

Dit bestand moet geldige JSON bevatten. De structuur op het hoogste niveau is een object, met een lid met de naam "web_apps" . Dit lid is een array van objecten en elk object vertegenwoordigt een vermelding voor een unieke web-app. Elk voorwerp bevat:

Veld Beschrijving Type Standaard
"manifest" (Vereist) URL-tekenreeks van het webapp-manifest van de bijbehorende PWA string N.v.t
"details" (Optioneel) Een object dat arrays van opgenomen en uitgesloten URL-patronen bevat object N.v.t

Elk "details" -object bevat:

Veld Beschrijving Type Standaard
"paths" (Optioneel) Array met toegestane padreeksen string[] []
"exclude_paths" (Optioneel) Array van niet-toegestane padreeksen string[] []

Hieronder vindt u een voorbeeld van web-app-origin-association voor het muziek-PWA-voorbeeld van hierboven. Het wordt gehost op de oorsprong 🎵.example.com en brengt de associatie tot stand met de music.example.com PWA, geïdentificeerd door de manifest-URL van de webapp.

{
  "web_apps": [
    {
      "manifest": "https://music.example.com/manifest.json",
      "details": {
        "paths": ["/*"],
        "exclude_paths": ["/internal/*"]
      }
    }
  ]
}

Wanneer komt een URL overeen?

Een PWA komt overeen met een URL voor verwerking als aan beide volgende voorwaarden is voldaan:

  • De URL komt overeen met een van de oorsprongsreeksen in "url_handlers" .
  • De browser kan via het betreffende web-app-origin-association valideren dat elke origin ermee instemt om deze app een dergelijke URL te laten verwerken.

Met betrekking tot het ontdekken van web-app-origin-association

Om ervoor te zorgen dat de browser het web-app-origin-association kan ontdekken, moeten ontwikkelaars het web-app-origin-association in de map /.well-known/ in de hoofdmap van de app plaatsen. Om dit te laten werken, moet de bestandsnaam exact web-app-origin-association zijn.

Demo

Om PWA's als URL-handlers te testen, moet u de browservlag instellen zoals hierboven beschreven en vervolgens de PWA installeren op https://mandymsft.github.io/pwa/ . Door naar het webapp-manifest te kijken, kun je zien dat het URL's verwerkt met de volgende URL-patronen: https://mandymsft.github.io en https://luhuangmsft.github.io . Omdat deze laatste een andere oorsprong heeft ( luhuangmsft.github.io ) dan de PWA, moet de PWA op mandymsft.github.io het eigendom bewijzen, wat gebeurt via het web-app-origin-association -bestand dat wordt gehost op https:// luhuangmsft.github.io/.well-known/web-app-origin-association .

Om te testen of het inderdaad werkt, stuurt u uzelf een testbericht met een instant messaging-app van uw keuze of een e-mail die u bekijkt in een e-mailclient die niet webgebaseerd is, zoals Mail op macOS. Het e-mail- of sms-bericht moet een van de links https://mandymsft.github.io of https://luhuangmsft.github.io bevatten. Beide zouden moeten openen in de geïnstalleerde PWA.

De Windows Skype instant messenger-app naast de geïnstalleerde demo-PWA, die in de standalone-modus wordt geopend nadat u op een link hebt geklikt die ermee wordt afgehandeld in een Skype-chatbericht.

Beveiliging en machtigingen

Het Chromium-team ontwierp en implementeerde PWA's als URL-handlers met behulp van de kernprincipes die zijn gedefinieerd in Toegangscontrole tot krachtige webplatformfuncties , waaronder gebruikerscontrole, transparantie en ergonomie.

Gebruikerscontrole

Als er meer dan één PWA zich registreert als URL-handler voor een bepaald URL-patroon, wordt de gebruiker gevraagd te kiezen met welke PWA hij het patroon wil afhandelen, als die er al is. Navigaties die starten in een browsertabblad vallen niet onder dit voorstel, het is expliciet gericht op navigaties die buiten de browser starten.

Transparantie

Als de noodzakelijke associatievalidatie om welke reden dan ook niet succesvol kan worden voltooid tijdens de PWA-installatie, registreert de browser de app niet als actieve URL-handler voor de betreffende URL's. URL-handlers kunnen, indien onjuist geïmplementeerd, worden gebruikt om verkeer naar websites te kapen. Daarom is het app-associatiemechanisme een belangrijk onderdeel van het schema.

Platformspecifieke applicaties kunnen al gebruik maken van API's van het besturingssysteem om geïnstalleerde applicaties op het systeem van de gebruiker op te sommen. Toepassingen op Windows kunnen bijvoorbeeld de FindAppUriHandlersAsync API gebruiken om URL-handlers op te sommen. Als PWA's zich registreren als URL-handlers op besturingssysteemniveau in Windows, zou hun aanwezigheid zichtbaar zijn voor andere toepassingen.

Persistentie van toestemming

Een oorsprong kan zijn associaties met PWA's op elk moment wijzigen. Browsers zullen regelmatig proberen de associaties van geïnstalleerde webapps opnieuw te valideren. Als de registratie van een URL-handler niet opnieuw kan worden gevalideerd omdat de associatiegegevens zijn gewijzigd of niet langer beschikbaar zijn, verwijdert de browser registraties.

Feedback

Het Chromium-team wil graag horen wat uw ervaringen zijn met de PWA's als URL-handlers.

Vertel ons over het API-ontwerp

Is er iets aan de API dat niet werkt zoals je had verwacht? Of ontbreken er methoden of eigenschappen die je nodig hebt om je idee te implementeren? Heeft u een vraag of opmerking over het beveiligingsmodel? Dien een spec issue in op de corresponderende GitHub repository , of voeg uw gedachten toe aan een bestaand issue.

Meld een probleem met de implementatie

Heeft u een bug gevonden in de implementatie van Chromium? Of wijkt de uitvoering af van de specificaties? Dien een bug in op new.crbug.com . Zorg ervoor dat u zoveel mogelijk details en eenvoudige instructies voor het reproduceren opneemt, en voer UI>Browser>WebAppInstalls in het vak Componenten in. Glitch werkt uitstekend voor het delen van snelle en gemakkelijke reproducties.

Toon ondersteuning voor de API

Bent u van plan PWA's als URL-handlers te gebruiken? Jouw publieke steun helpt het Chromium-team bij het prioriteren van functies en laat andere browserleveranciers zien hoe belangrijk het is om deze te ondersteunen.

Stuur een tweet naar @ChromiumDev met de hashtag #URLHandlers en laat ons weten waar en hoe je deze gebruikt.

Handige links

Dankbetuigingen

PWA's als URL-handlers zijn gespecificeerd en geïmplementeerd door Lu Huang en Mandy Chen van het Microsoft Edge-team. Dit artikel is beoordeeld door Joe Medley . Heldenafbeelding door Bryson Hammer op Unsplash .