Creare link diretti

I link diretti ti consentono di indirizzare gli utenti direttamente alla tua app da browser web, notifiche, social media, annunci e altre fonti. I link diretti forniscono transizioni dirette da app ad app e da web ad app che possono aiutarti ad aumentare il coinvolgimento tramite contenuti contestuali e mirati.

Questa guida spiega come funzionano i link diretti e come creare e testare i link diretti ai tuoi contenuti.

Per i link diretti che fanno riferimento al tuo sito web o ai tuoi domini, ti consigliamo di utilizzare gli app link, che offrono un'esperienza fluida e affidabile per i tuoi utenti.

Come funzionano i link diretti

I link diretti sono una funzionalità di sistema generale di Android, supportata su tutte le versioni e su tutti i dispositivi. Sfruttano il sistema di intent di Android per indirizzare i link diretti alle app interessate. Le app che vogliono gestire un URI di link diretto specifico dichiarano un filtro per intent corrispondente nei file manifest dell'app.

Al runtime, quando l'utente tocca un link, Android attiva un intent e tenta di indirizzarlo a un'app. Poiché più app possono dichiarare filtri per intent che corrispondono a un determinato URI, Android esegue queste azioni, in questo ordine, per indirizzare l'intent:

  1. Apri l'app predefinita dell'utente in grado di gestire l'URI, se ne è stata designata una.
  2. Apri l'unica app disponibile in grado di gestire l'URI.
  3. Consenti all'utente di selezionare un'app da una finestra di dialogo di scelta.

Ciò significa che, anche se i filtri per intent corrispondono a un determinato URI, non è garantito che il sistema indirizzi l'intent di link diretto alla tua app. L'utente svolge un ruolo chiave nella gestione dell'app che gestisce l'intent, il che gli conferisce il controllo e offre una scelta. Per un maggiore controllo sui link diretti al tuo sito web e ai tuoi domini, prova a utilizzare gli app link.

La finestra di dialogo di scelta di Android consente all'utente di visualizzare tutte le app installate che sono state registrate per gestire un intent di link diretto. L'utente può anche selezionare un'app come predefinita per questo tipo di link. Una volta impostata un'app predefinita, il sistema non mostra più la finestra di dialogo per quell'intent specifico e l'app scelta si aprirà automaticamente.

Figura 1. La finestra di dialogo di scelta

Il comportamento della finestra di dialogo di scelta si è evoluto nelle varie versioni di Android. Ad esempio, su Android 12 e versioni successive, i link web che non sono app link verificati in genere si aprono in un browser web per impostazione predefinita, mentre nelle versioni precedenti potrebbe essere visualizzata una finestra di dialogo di scelta se un'app poteva gestire il link web.

Nota: a partire da Android 12 (livello API 31), un intent web generico viene risolto in un'attività nella tua app solo se la tua app è approvata per il dominio specifico contenuto nell'intent web. Se la tua app non è approvata per il dominio, l'intent web viene risolto nell'app browser predefinita dell'utente.

Tipi di link diretti

Esistono tre tipi di link diretti che puoi supportare su Android:

  • Link diretti personalizzati: sono link diretti che utilizzano uno schema URI personalizzato (ad esempio example://products/123) per indirizzare un utente direttamente a un contenuto specifico all'interno di un'app. Sono utili per la navigazione interna o per i link provenienti da fonti che controlli, ma non sono link web standard e possono comunque attivare la finestra di dialogo di scelta se un'altra app registra lo stesso schema personalizzato.
  • Link web: sono link diretti che utilizzano gli schemi standard http e https schemi. Sono più versatili perché sono URL standard, ma su Android 12 e versioni successive attivano quasi sempre la finestra di dialogo di scelta, il che significa che è probabile che vengano gestiti dal browser web dell'utente per impostazione predefinita, anziché essere indirizzati alla tua app.
  • App link: disponibili a partire da Android 6.0 (livello API 23), sono verificati link web. Tramite una procedura di associazione del sito web, puoi dimostrare al sistema Android di essere il proprietario del dominio. Una volta verificati, il sistema indirizza automaticamente i link per quel dominio direttamente alla tua app, saltando completamente la finestra di dialogo di scelta. In questo modo, gli utenti possono usufruire di un'esperienza affidabile e fluida.

Aggiungere filtri per intent per i link in entrata

Per creare un link ai contenuti dell'app, aggiungi un filtro per intent che contenga questi elementi e valori di attributo nel manifest:

<action>

Specifica l'azione intent ACTION_VIEW in modo che il filtro per intent sia raggiungibile da Ricerca Google.

<data>

Aggiungi uno o più tag <data>, ognuno dei quali rappresenta un formato URI che viene risolto nell'attività. Come minimo, il <data> tag deve includere l' android:scheme attributo.

Puoi aggiungere altri attributi per perfezionare ulteriormente il tipo di URI accettato dall'attività. Ad esempio, potresti avere più attività che accettano URI simili, ma che differiscono semplicemente in base al nome del percorso. In questo caso, utilizza l' android:path attributo o le relative varianti pathPattern o pathPrefix per distinguere l'attività che il sistema deve aprire per i diversi percorsi URI.

<category>

Includi la BROWSABLE categoria. È obbligatoria per rendere accessibile il filtro per intent da un browser web. Senza questa categoria, un clic su un link in un browser non può essere risolto nella tua app.

Includi anche la DEFAULT categoria. In questo modo, la tua app può rispondere agli intent impliciti. Senza questa categoria, l'attività può essere avviata solo se l'intent specifica il nome del componente dell'app.

Lo snippet XML seguente mostra come specificare un filtro per intent nel manifest per i link diretti. Gli URI "example://gizmos" e "http://www.example.com/gizmos" vengono risolti in questa attività.

<activity
    android:name="com.example.android.GizmosActivity"
    android:label="@string/title_gizmos" >
    <intent-filter android:label="@string/filter_view_http_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
        <data android:scheme="http"
              android:host="www.example.com"
              android:pathPrefix="/gizmos" />
        <!-- note that the leading "/" is required for pathPrefix-->
    </intent-filter>
    <intent-filter android:label="@string/filter_view_example_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "example://gizmos” -->
        <data android:scheme="example"
              android:host="gizmos" />
    </intent-filter>
</activity>

Tieni presente che i due filtri per intent differiscono solo per l'elemento <data>. Sebbene sia possibile includere più elementi <data> nello stesso filtro, è importante creare filtri separati quando l'intenzione è dichiarare URL unici (ad esempio una combinazione specifica di scheme e host), perché più elementi <data> nello stesso filtro per intent vengono uniti per rappresentare tutte le varianti dei loro attributi combinati. Ad esempio, prendi in considerazione quanto indicato di seguito:

<intent-filter>
  ...
  <data android:scheme="https" android:host="www.example.com" />
  <data android:scheme="app" android:host="open.my.app" />
</intent-filter>

Potrebbe sembrare che supporti solo https://www.example.com e app://open.my.app. Tuttavia, in realtà supporta questi due e anche app://www.example.com e https://open.my.app.

Attenzione: se più attività contengono filtri per intent che si riferiscono allo stesso app link Android verificato, non c'è alcuna garanzia di quale attività gestirà il link.

Dopo aver aggiunto i filtri per intent con gli URI per i contenuti delle attività al manifest dell'app, Android è in grado di indirizzare qualsiasi Intent con URI corrispondenti alla tua app al runtime.

Per scoprire di più sulla definizione dei filtri per intent, consulta Consentire ad altre app di avviare la tua attività.

Leggere i dati dagli intent in entrata

Una volta che il sistema avvia l'attività tramite un filtro per intent, puoi utilizzare i dati forniti da Intent per determinare cosa devi eseguire il rendering. Chiama i getData() e getAction() metodi per recuperare i dati e azione associati all'oggetto Intent in entrata. Puoi chiamare questi metodi in qualsiasi momento durante il ciclo di vita dell'attività, ma in genere dovresti farlo durante i callback iniziali come onCreate() o onStart.

Ecco uno snippet che mostra come recuperare i dati da un Intent:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

    val action: String? = intent?.action
    val data: Uri? = intent?.data
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent = getIntent();
    String action = intent.getAction();
    Uri data = intent.getData();
}

Segui queste best practice per migliorare l'esperienza dell'utente:

  • Il link diretto deve indirizzare gli utenti direttamente ai contenuti, senza prompt, pagine interstitial o accessi. Assicurati che gli utenti possano visualizzare i contenuti dell'app anche se non l'hanno mai aperta in precedenza. È consentito richiedere agli utenti di eseguire azioni nelle interazioni successive o quando aprono l'app da Avvio app.
  • Segui le indicazioni di progettazione descritte in Navigazione con Indietro e Su in modo che la tua app soddisfi le aspettative degli utenti per la navigazione all'indietro dopo che hanno inserito la tua app tramite un link diretto.

Verifica dei link diretti

Puoi utilizzare Android Debug Bridge con lo strumento di gestione delle attività (am) per verificare che gli URI dei filtri per intent specificati per i link diretti vengano risolti nell' attività dell'app corretta. Puoi eseguire il comando adb su un dispositivo o un emulatore.

La sintassi generale per testare un URI di filtro per intent con adb è:

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d <URI> <PACKAGE>

Ad esempio, il seguente comando tenta di visualizzare un'attività dell'app di destinazione associata all'URI specificato.

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d "example://gizmos" com.example.android

Nota: quando definisci una raccolta di tipi primitivi in una route, ad esempio **@Serializable data class Product(val colors: List)**, il formato dell'URL del link diretto generato automaticamente è **basePath?colors={value**}. Se tenti di specificare un URI con più parametri di query (ad esempio, **basepath?colors=red&colors=blue**), devi eseguire l'escape della e commerciale (ad esempio, **basepath?colors=red\&colors=blue**).

La dichiarazione del manifest e il gestore di intent impostati definiscono la connessione tra l'app e un sito web e cosa fare con i link in entrata. Tuttavia, affinché il sistema tratti la tua app come gestore predefinito per un insieme di URI, devi anche richiedere al sistema di verificare questa connessione. Verificare gli app link spiega come implementare questa verifica.

Per scoprire di più su intent e app link, consulta le seguenti risorse: