Cómo crear una lista de instrucciones

Las instrucciones se alojan en una lista de instrucciones codificadas en JSON en una ubicación conocida en un principal, como se define en la Especificación de vínculos de activos. Una lista de instrucciones 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 instrucciones

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

Listas de instrucciones 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

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

Cualquier respuesta del servidor, además de HTTP 200, se trata como un error y dará como resultado 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 instrucciones vacía.

Ejemplo

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

Listas de instrucciones 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 instrucción de sitio web, pero está incorporada en el archivo strings.xml y se hace referencia a ella 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 incluye un fragmento de ejemplo res/values/strings.xml para una app de Android que admite el uso compartido de la ubicación con la app (actualmente no se admite una función de Android):

<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 está relacionada con un objetivo. Cuando consume una declaración, debe hacer que el objetivo coincida con una entidad en 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:

Orientaciones de 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 un destino de instrucción describe http://www.example.com:80, se considera que el sitio web http://www.example.com es una coincidencia.

Ejemplo

Dado el siguiente objetivo de la declaración

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

Los siguientes URI PENDIEN coincidir:

  • 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://usuario@contraseña:www.google.com/

Las siguientes URL 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 aplicación

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