Aggiungere filtri per intent per i link per app

I link per app sono link diretti che utilizzano lo schema HTTP o HTTPS e vengono verificati da Android come associati al tuo sito web. Per registrarti per gestire i link per app, segui questi passaggi:

  1. Aggiungi uno o più filtri per intent al manifest dell'app che specificano il dominio o gli URL del tuo sito web.
  2. Aggiungi autoVerify="true"attribute agli elementi del filtro per intent. Questo indica al sistema di tentare di verificare lo schema e i domini host rispetto alla configurazione assetlinks.json del tuo sito web.
  3. Dichiarare le associazioni con i siti web.

Di seguito è riportato un esempio di dichiarazione di link per app con schemi e host, nonché autoVerify="true":

<activity
    android:name=".MainActivity"
    android:exported="true"
    ...>
    <!-- Make sure you explicitly set android:autoVerify to "true". -->
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <!-- If a user clicks on a link that uses the "http" scheme, your
             app should be able to delegate that traffic to "https". -->
        <!-- Do not include other schemes, as this will prevent verification. -->
        <data android:scheme="http" />
        <data android:scheme="https" />

        <!-- Include one or more domains that should be verified. -->
        <data android:host="www.example.com" />
        <data android:host="*.example.com" />
    </intent-filter>
</activity>

Punti chiave del codice

  • Verifica automatica: l'attributo android:autoVerify="true" è obbligatorio per gli app link. Indica al sistema di tentare di verificare l'associazione tra la tua app e gli schemi e i domini specificati nei tag <data>. Ti consigliamo di aggiungere autoVerify="true a ogni filtro intent che vuoi che sia verificabile.
  • Elementi di dati: ogni filtro per intent App Links deve includere uno o più elementi <data> che specificano gli schemi e i formati host corrispondenti al tuo dominio del sito web verificabile.
  • Schemi: il filtro per intent deve includere elementi <data> per gli schemi http e https.
  • Host: se vuoi, puoi aggiungere <data> elementi in modo che corrispondano a uno o più host. Utilizza un carattere jolly (*) per trovare la corrispondenza con più sottodomini (ad esempio *.example.com). Il sistema tenterà di verificare ogni host rispetto al file assetlinks.json sul tuo sito web. Tieni presente che qualsiasi routing a livello di percorso deve essere gestito dal file assetlinks.json (vedi la sezione delle best practice di seguito).

  • Più host: se dichiari più domini host, il sistema (su Android 12 e versioni successive) tenta di verificare ciascuno. Se un host viene verificato, l'app diventa il gestore predefinito per i link provenienti da quell'host verificato. Su Android 11 e versioni precedenti, la verifica non riesce se anche un solo host non può essere verificato.

  • Più filtri per intent: è importante creare filtri separati quando l'intenzione è dichiarare URL unici (ad esempio una combinazione specifica di schema e host), perché più elementi <data> nello stesso filtro per intent vengono uniti per tenere conto di tutte le varianti dei loro attributi combinati.

Considerazioni sulle regole di filtro dei manifest

Se stai configurando filtri da utilizzare con i link dinamici per app in Android 15 e versioni successive, è importante ricordare che le regole dinamiche dichiarate nel file assetlinks.json lato server non possono espandere l'ambito delle regole URL dichiarate staticamente nel file manifest dell'app.

Per questo motivo, ti consigliamo di utilizzare questo approccio:

  • Nel file manifest dell'app, imposta l'ambito più ampio possibile, ad esempio dichiarando solo lo schema e il dominio
  • Affidati alle regole assetlinks.json lato server per un ulteriore perfezionamento, ad esempio il routing a livello di percorso.

Con questa configurazione ideale, potrai aggiungere dinamicamente nuovi percorsi App Links nel file assetlinks.json in base alle esigenze, sapendo che rientreranno nell'ampio ambito che hai impostato nel manifest dell'app.

Supportare i link per app per più host

Il sistema deve essere in grado di verificare l'host specificato negli elementi di dati dei filtri per intent URL dell'app rispetto ai file Digital Asset Links ospitati sui rispettivi domini web in quel filtro per intent. Se la verifica non va a buon fine, il sistema torna al suo comportamento standard per risolvere l'intent, come descritto in Creare deep link ai contenuti dell'app. Tuttavia, l'app può comunque essere verificata come gestore predefinito per uno qualsiasi dei pattern URL definiti negli altri filtri per intent dell'app.

Ad esempio, un'app con i seguenti filtri per intent supererebbe la verifica solo per https://www.example.com se venisse trovato un file assetlinks.json in https://www.example.com/.well-known/assetlinks.json ma non https://www.example.net/.well-known/assetlinks.json:

<application>

  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="http" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
    </intent-filter>
  </activity>
  <activity android:name="SecondActivity">
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
     <data android:host="www.example.net" />
    </intent-filter>
  </activity>

</application>

Supportare il collegamento di app per più sottodomini

Il protocollo Digital Asset Links considera i sottodomini nei filtri per intent come host unici e separati. Pertanto, se il filtro per intent elenca più host con sottodomini diversi, devi pubblicare un assetlinks.json valido su ogni dominio. Ad esempio, il seguente filtro di intent include www.example.com e mobile.example.com come host URL di intent accettati. Pertanto, un assetlinks.json valido deve essere pubblicato sia su https://www.example.com/.well-known/assetlinks.json sia su https://mobile.example.com/.well-known/assetlinks.json.

<application>
  <activity android:name="MainActivity">
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
      <data android:host="mobile.example.com" />
    </intent-filter>
  </activity>
</application>

In alternativa, se dichiari il nome host con un carattere jolly (ad esempio *.example.com), devi pubblicare il file assetlinks.json nel nome host di primo livello (example.com). Ad esempio, un'app con il seguente filtro per intent supererà la verifica per qualsiasi nome secondario di example.com (ad esempio foo.example.com) a condizione che il file assetlinks.json sia pubblicato all'indirizzo https://example.com/.well-known/assetlinks.json:

<application>
  <activity android:name="MainActivity">
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
      <data android:host="*.example.com" />
    </intent-filter>
  </activity>
</application>

Controllare se sono presenti più app associate allo stesso dominio

Se pubblichi più app associate allo stesso dominio, ognuna può essere verificata correttamente. Tuttavia, se le app possono risolvere lo stesso host e percorso di dominio esatto, come potrebbe accadere con le versioni lite e complete di un'app, solo l'app installata più di recente può risolvere gli intent web per quel dominio.

In un caso come questo, verifica la presenza di possibili app in conflitto sul dispositivo dell'utente, a condizione che tu disponga della visibilità del pacchetto necessaria. Poi, nella tua app, mostra una finestra di dialogo personalizzata per la selezione che contiene i risultati della chiamata queryIntentActivities. L'utente può selezionare l'app che preferisce dall'elenco delle app corrispondenti visualizzate nella finestra di dialogo.