Criar uma lista de instruções

As instruções são hospedadas em uma lista de instruções codificadas em JSON em um local conhecido em um principal, conforme definido pela especificação de links de recursos. Uma lista de instruções contém uma ou mais instruções, e a principal pode ter apenas uma lista de instruções.

Sintaxe da lista de instruções

Consulte a sintaxe da lista de instruções.

Local da lista de extratos

A lista de instruções é hospedada em um local bem conhecido que depende do tipo de principal (o site ou app que faz as declarações).

Listas de instruções de sites

Em um site, uma lista de instruções é um arquivo de texto localizado no seguinte endereço:

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

Observe o ponto no nome da pasta .well-known.

Qualquer resposta do servidor além de HTTP 200 será tratada como um erro e resultará em uma lista de instruções vazia. Para HTTPS, qualquer conexão sem uma cadeia de certificados que possa ser verificada com a lista raiz confiável também resultará em uma lista de instruções vazia.

Exemplo

Veja um exemplo de lista de instruções em um site: http://example.digitalassetlinks.org/.well-known/assetlinks.json.

Listas de instruções de apps Android

Em um app Android, a lista de instruções é um snippet JSON com a mesma sintaxe de um arquivo de instruções de site, mas está incorporada ao arquivo strings.xml e referenciada no manifesto, conforme mostrado a seguir.

Em AndroidManifest.xml:

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

Em res/values/strings.xml:

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

Exemplo

Veja um exemplo de snippet res/values/strings.xml de um app Android compatível com o compartilhamento de local. No momento, o recurso Android não é compatível.

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

Como corresponder a uma meta

Cada instrução é sobre um destino. Ao consumir uma instrução, é necessário corresponder o alvo em uma instrução com relação a alguma entidade na realidade. Se o destino da instrução corresponder à entidade, a instrução será aplicada. Veja as regras para determinar se um destino corresponde a uma determinada entidade:

Segmentações do site

Para um site, o esquema, o host e a porta do site precisam ser idênticos. As portas padrão para HTTP e HTTPS (80 e 443, respectivamente) são presumidas implicitamente. Se um destino de instrução descreve http://www.example.com:80, o site http://www.example.com é considerado uma correspondência.

Exemplo

Considerando o objetivo da instrução a seguir

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

Os seguintes URIs vÃO corresponder:

  • 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://usuário@senha:www.google.com.br/

Os URLs a seguir NÃO serão correspondentes:

  • http://www.google.com/ (Esquema incorreto)
  • https://google.com/ (O nome do host não corresponde)
  • https://www.google.com:444/ (A porta não corresponde)

Destinos de apps

Para um app, o hash do certificado e o nome do pacote do destino precisam corresponder exatamente ao aplicativo.