Registro de controladores de protocolo de URL para AWPs

Permite que las AWP instaladas controlen los vínculos que usan un protocolo específico para obtener una experiencia más integrada.

Información general sobre los esquemas (también conocidos como protocolos)

Un identificador de recursos uniforme (URI) es una secuencia compacta de caracteres que identifica un recurso físico o abstracto. Cada URI comienza con un nombre de esquema que hace referencia a una especificación para asignar identificadores dentro de ese esquema. Por lo tanto, la sintaxis de URI es un sistema de nombres federado y extensible en el que la especificación de cada esquema puede restringir aún más la sintaxis y la semántica de los identificadores que usan ese esquema. Los esquemas también se conocen como protocolos. A continuación, puedes ver algunos ejemplos de esquemas.

tel:+1-816-555-1212
mailto:Jane.Doe@example.com
news:comp.infosystems.www.servers.unix
https://web.dev/

El término localizador uniforme de recursos (URL) hace referencia al subconjunto de URIs que, además de identificar un recurso, proporcionan un medio para ubicarlo mediante la descripción de su mecanismo de acceso principal (p.ej., su ubicación de red).

Información general sobre el método registerProtocolHandler()

El método Navigator de solo contenido seguro registerProtocolHandler() permite que los sitios registren su capacidad para abrir o controlar esquemas de URL en particular. Por lo tanto, los sitios deben llamar al método de la siguiente manera: navigator.registerProtocolHandler(scheme, url). Los dos parámetros se definen de la siguiente manera:

  • scheme: Es una cadena que contiene el protocolo que el sitio desea controlar.
  • url: Es una cadena que contiene la URL del controlador. Esta URL debe incluir %s, como un marcador de posición que se reemplazará por la URL escapada que se controlará.

El esquema debe ser uno de los esquemas de la lista de entidades seguras (por ejemplo, mailto, bitcoin o magnet) o comenzar con web+, seguido de al menos una o más letras ASCII en minúsculas después del prefijo web+, por ejemplo, web+coffee.

Para que esto quede más claro, aquí tienes un ejemplo concreto del flujo:

  1. El usuario visita un sitio en https://coffeeshop.example.com/ que realiza la siguiente llamada: navigator.registerProtocolHandler('web+coffee', 'coffee?type=%s').
  2. Más adelante, mientras visita https://randomsite.example.com/, el usuario hace clic en un vínculo como <a href="web+coffee:latte-macchiato">All about latte macchiato</a>.
  3. Esto hace que el navegador navegue a la siguiente URL: https://coffeeshop.example.com/coffee?type=web%2Bcoffee%3A%2F%2Flatte-macchiato. La cadena de búsqueda decodificada de URL se lee como ?type=web+coffee://latte-macchiato.

De qué se trata el manejo de protocolos

El presente mecanismo de registro de controladores de protocolo de URL para AWPs consiste en ofrecer el registro de controladores de protocolo como parte de una instalación de AWP a través de su manifiesto. Después de registrar una AWP como controlador de protocolo, cuando un usuario haga clic en un hipervínculo con un esquema específico, como mailto, bitcoin o web+music, desde un navegador o una app específica de la plataforma, se abrirá la AWP registrada y recibirá la URL. Es importante tener en cuenta que, en la práctica, el registro propuesto basado en manifiestos y el registerProtocolHandler() tradicional desempeñan funciones muy similares, a la vez que permiten la posibilidad de experiencias del usuario complementarias:

  • Las similitudes incluyen requisitos relacionados con la lista de esquemas que se pueden registrar, el nombre y el formato de los parámetros, etcétera.
  • Las diferencias en el registro basado en manifiestos son sutiles, pero pueden ser útiles para mejorar la experiencia de los usuarios de la AWP. Por ejemplo, el registro de la AWP basada en manifiestos puede no requerir una acción adicional del usuario, aparte de la instalación de la AWP que inicia el usuario.

Casos de uso

  • En una AWP de procesamiento de texto, el usuario encuentra un vínculo a una presentación como web+presentations://deck2378465 en un documento. Cuando el usuario hace clic en el vínculo, la PWA de presentación se abre automáticamente en el alcance correcto y muestra la presentación de diapositivas.
  • En una app de chat específica de la plataforma, el usuario recibe un vínculo a una URL de magnet en un mensaje de chat. Cuando haces clic en el vínculo, se inicia una AWP de torrent instalada y comienza la descarga.
  • El usuario tiene instalada una AWP de transmisión de música. Cuando un amigo comparte un vínculo a una canción como web+music://songid=1234&time=0:13 y el usuario hace clic en él, la AWP de transmisión de música se inicia automáticamente en una ventana independiente.

Cómo usar el registro de controladores de protocolo de URL para AWP

La API para el registro del controlador de protocolo de URL se basa en navigator.registerProtocolHandler(). Solo que esta vez, la información se pasa de forma declarativa a través del manifiesto de la app web en una propiedad nueva llamada "protocol_handlers" que toma un array de objetos con las dos claves requeridas "protocol" y "url". En el siguiente fragmento de código, se muestra cómo registrar web+tea y web+coffee. Los valores son cadenas que contienen la URL del controlador con el marcador de posición %s obligatorio para la URL con escape.

{
  "protocol_handlers": [
    {
      "protocol": "web+tea",
      "url": "/tea?type=%s"
    },
    {
      "protocol": "web+coffee",
      "url": "/coffee?type=%s"
    }
  ]
}

Varias apps que se registran para el mismo protocolo

Si varias aplicaciones se registran como controladores del mismo esquema, por ejemplo, el protocolo mailto, el sistema operativo le mostrará al usuario un selector y le permitirá decidir cuál de los controladores registrados usar.

La misma app se registra para varios protocolos

La misma app puede registrarse para varios protocolos, como puedes ver en el ejemplo de código anterior.

Actualizaciones de apps y registro de controladores

Los registros de controladores se sincronizan con la versión de manifiesto más reciente que proporciona la app. Hay dos casos:

  • Una actualización que agrega controladores nuevos activa el registro de controladores (separado de la instalación de la app).
  • Una actualización que quita controladores activa el desregistro del controlador (separado de la desinstalación de la app).

Depuración del controlador de protocolos en DevTools

Navega a la sección Protocol Handlers a través del panel Application > Manifest. Aquí puedes ver y probar todos los protocolos disponibles.

Por ejemplo, instala esta AWP de demostración. En la sección Protocol Handlers, escribe "americano" y haz clic en Test protocol para abrir la página de café en la AWP.

Controladores de protocolo en el panel Manifiesto

Demostración

Puedes ver una demostración del registro de controladores de protocolo de URL para AWPs en Glitch.

  1. Ve a https://protocol-handler.glitch.me/, instala la app web progresiva y vuelve a cargar la app después de la instalación. El navegador ahora registró la AWP como un controlador para el protocolo web+coffee con el sistema operativo.
  2. En la ventana de la AWP instalada, haz clic en el vínculo https://protocol-handler-link.glitch.me/. Se abrirá una pestaña nueva del navegador con tres vínculos. Haz clic en el primero o el segundo (latte macchiato o americano). Ahora, el navegador te mostrará un mensaje y te preguntará si estás de acuerdo con que la app sea un controlador de protocolo para el protocolo web+coffee. Si aceptas, se abrirá la AWP y se mostrará el café seleccionado.
  3. Para compararlo con el flujo tradicional que usa navigator.registerProtocolHandler(), haz clic en el botón Register protocol handler en la AWP. Luego, en la pestaña del navegador, haz clic en el tercer vínculo (chai). También mostrará un mensaje, pero luego abrirá la AWP en una pestaña, no en una ventana del navegador.
  4. Envíate un mensaje en una aplicación específica de la plataforma, como Skype en Windows, con un vínculo como <a href="web+coffee://americano">Americano</a> y haz clic en él. También debería abrir la PWA instalada.

Demostración del controlador de protocolo de URL con la pestaña del navegador con vínculos a la izquierda y la ventana de la AWP independiente a la derecha.

Consideraciones de seguridad

Dado que la instalación de la AWP requiere que el contexto sea seguro, el manejo de protocolos hereda esta restricción. La lista de controladores de protocolo registrados no se expone a la Web de ninguna manera, por lo que no se puede usar como vector de creación de huellas digitales.

Intentos de navegación que no inició el usuario

Es posible que los intentos de navegación que no inicia el usuario, sino que son programáticos, no abran apps. La URL del protocolo personalizado solo se puede usar en contextos de navegación de nivel superior, pero no, por ejemplo, como la URL de un iframe.

Lista de entidades permitidas de protocolos

Al igual que con registerProtocolHandler(), hay una lista de entidades permitidas de protocolos que las apps pueden registrar para controlar.

En el primer inicio de la AWP debido a un protocolo invocado, se le mostrará al usuario un diálogo de permiso. En este diálogo, se mostrará el nombre y el origen de la app, y se le preguntará al usuario si esta puede controlar los vínculos del protocolo. Si un usuario rechaza el diálogo de permisos, el sistema operativo ignorará el controlador de protocolo registrado. Para cancelar el registro del controlador de protocolo, el usuario debe desinstalar la AWP que lo registró. El navegador también anulará el registro del controlador de protocolo si el usuario selecciona "Recordar mi elección" y "No permitir".

Comentarios

El equipo de Chromium quiere conocer tus experiencias con el registro de controladores de protocolo de URL para AWPs.

Cuéntanos sobre el diseño de la API

¿Hay algo en la API que no funciona como esperabas? ¿O faltan métodos o propiedades que necesitas para implementar tu idea? ¿Tienes alguna pregunta o comentario sobre el modelo de seguridad? Informa un problema de especificación en el repositorio de GitHub correspondiente o agrega tus comentarios a un problema existente.

Denuncia un problema con la implementación

¿Encontraste un error con la implementación de Chromium? ¿O la implementación es diferente de la especificación? Informa un error en new.crbug.com. Asegúrate de incluir tantos detalles como sea posible, instrucciones simples para reproducirlo y, luego, ingresa UI>Browser>WebAppInstalls en el cuadro Componentes. Glitch es excelente para compartir reproducciones rápidas y fáciles.

Cómo mostrar compatibilidad con la API

¿Planeas usar el registro de controladores de protocolo de URL para AWPs? Tu apoyo público ayuda al equipo de Chromium a priorizar las funciones y les muestra a otros proveedores de navegadores lo importante que es admitirlas.

Comparte cómo planeas usarlo en la conversación de Discourse de WICG. Envía un tuit a @ChromiumDev con el hashtag #ProtocolHandler y cuéntanos dónde y cómo lo usas.

Agradecimientos

Fabio Rocha, Diego González, Connor Moody y Samuel Tang, del equipo de Microsoft Edge, implementaron y especificaron el registro de controladores de protocolo de URL para AWP. Joe Medley y Fabio Rocha revisaron este artículo. Imagen hero de JJ Ying en Unsplash.