Cómo crear una lista de instrucciones

Las sentencias se alojan en una lista de sentencias codificada en JSON en una ubicación conocida de una principal, como se define en la Especificación de vínculos de recursos. Una lista de sentencias contiene una o más sentencias, y una principal solo puede tener una lista de sentencias.

Sintaxis de la lista de sentencias

Consulta la sintaxis de la lista de instrucciones.

Ubicación de la lista de estados de cuenta

La lista de declaraciones se aloja en una ubicación conocida que depende del tipo de principal (el sitio web o la app que realizan las declaraciones).

Listas de declaraciones del sitio web

En un sitio web, una lista de declaraciones es un archivo de texto ubicado en la siguiente dirección:

scheme://domain/.well-known/assetlinks.json

Ten en cuenta el punto en el nombre de la carpeta .well-known.

Cualquier respuesta del servidor que no sea HTTP 200 se trata como un error y generará una lista de instrucciones vacía. En el caso de HTTPS, cualquier conexión sin una cadena de certificados que se pueda verificar con la lista raíz de confianza también generará una lista de sentencias vacía.

Ejemplo

Esta es una lista de instrucciones de ejemplo en un sitio web: http://example.digitalassetlinks.org/.well-known/assetlinks.json

Listas de declaraciones de apps para Android

En una app para Android, la lista de instrucciones es un fragmento JSON con la misma sintaxis que un archivo de instrucciones del sitio web, pero está incorporado en el archivo strings.xml y se hace referencia a él en el manifiesto, como se muestra a continuación.

En AndroidManifest.xml:

<manifest>
  <application>
    ...
    <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
    ...
  </application>
</manifest>

En res/values/strings.xml:

<resources>
  ...
  <string name="asset_statements">
    ... statement list ...
  </string>
</resources>

Ejemplo

A continuación, se muestra un ejemplo de un fragmento de res/values/strings.xml para una app para Android que admite el uso compartido de la ubicación con la app (una función de Android que actualmente no se admite):

<resources>
    ...
    <string name="asset_statements">
      [{
        \"relation\": [\"delegate_permission/common.share_location\"],
        \"target\": {
          \"namespace\": \"web\",
          \"site\": \"https://example.com\"
        }
      }]
    </string>
</resources>

Cómo hacer coincidir un objetivo

Cada instrucción se refiere a un destino. Cuando consumes una declaración, debes hacer coincidir el objetivo de una declaración con alguna entidad en la realidad. Si el objetivo de la declaración coincide con la entidad, se aplica la declaración. Estas son las reglas para determinar si un objetivo coincide con una entidad determinada:

Segmentos de sitios web

En el caso de un sitio web, el esquema, el host y el puerto del sitio deben coincidir exactamente. Los puertos predeterminados para HTTP y HTTPS (80 y 443, respectivamente) se suponen de forma implícita. Si el destino de una declaración describe http://www.example.com:80, se considera que el sitio web http://www.example.com coincide.

Ejemplo

Dado el siguiente objetivo de la declaración

"target": {
  "namespace": "web",
  "site": "https://www.google.com"
}

Los siguientes URIs COINCIDIRÁN :

  • https://www.google.com/
  • https://www.google.com:443/
  • https://www.google.com/foo
  • https://www.google.com/foo?bar
  • https://www.google.com/foo#bar
  • https://user@password:www.google.com/

Las siguientes URLs NO coincidirán:

  • http://www.google.com/ (Esquema incorrecto)
  • https://google.com/ (El nombre del host no coincide)
  • https://www.google.com:444/ (El puerto no coincide)

Segmentación de aplicaciones

En el caso de una app, el hash del certificado y el nombre del paquete del destino deben coincidir exactamente con la aplicación.