Cómo crear una lista de instrucciones

Las declaraciones se alojan en una lista de declaraciones codificadas 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 declaraciones contiene una o más declaraciones, y una principal puede tener solo una.

Sintaxis de la lista de instrucciones

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 aplicación que realiza las declaraciones).

Lista de resúmenes del sitio web

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

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

Observa el punto en el nombre de la carpeta .well-known.

Cualquier respuesta del servidor, además de HTTP 200, se considera un error y dará como resultado una lista de declaraciones vacía. En el caso de HTTPS, cualquier conexión sin una cadena de certificados que pueda verificarse con la lista raíz de confianza también dará como resultado una lista de declaraciones vacía.

Ejemplo

A continuación, se incluye una lista de declaraciones de ejemplo en un sitio web: http://example.digitalassetlinks.org/.well-known/assetlinks.json

Listas de declaraciones de la app para Android

En una app para Android, la lista de instrucciones es un fragmento JSON con la misma sintaxis que un archivo de instrucciones de sitio web, pero está incorporado en el archivo strings.xml y se hace referencia 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 del fragmento res/values/strings.xml de una app para Android que admite compartir 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 afirmación se trata de un objetivo. Cuando consumes una sentencia, debes hacer coincidir el objetivo de la sentencia con alguna entidad en realidad. Si el objetivo de la instrucción coincide con la entidad, se aplica la instrucción. Estas son las reglas para determinar si un objetivo coincide con una entidad determinada:

Segmentaciones del sitio 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 instrucció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 de host no coincide)
  • https://www.google.com:444/ (El puerto no coincide)

Orientaciones de la app

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