Crea link diretti ai contenuti dell'app

Quando un link selezionato o una richiesta programmatica richiama un intent URI web, il sistema Android prova ciascuna delle seguenti azioni, in ordine sequenziale, finché la richiesta non va a buon fine:

  1. Apri l'app preferita dell'utente in grado di gestire l'URI, se presente.
  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.

Per creare e testare link ai tuoi contenuti, procedi nel seguente modo. Puoi utilizzare anche Assistente link app in Android Studio per aggiungerlo Link per app Android.

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

Aggiungere filtri per intent per i link in entrata

Per creare un link ai contenuti della tua app, aggiungi un filtro per intent che contiene i seguenti elementi e valori degli attributi nel file manifest:

<action>
Specifica l'azione di intent ACTION_VIEW in modo che che il filtro per intent possa essere raggiunto dalla Ricerca Google.
<data>
Aggiungi uno o più <data> , ognuno dei quali rappresenta un formato URI che risolve l'attività. Come minimo, Il tag <data> deve includere android:scheme .

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

<category>
Includi i BROWSABLE categoria. È obbligatorio affinché il filtro per intent sia accessibile da un sito web del browser. In caso contrario, il clic su un link in un browser non può indirizzare alla tua app.

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

Il seguente snippet XML mostra come specificare un filtro per intent nel file manifest per i link diretti. Gli URI “example://gizmos” e “http://www.example.com/gizmos” entrambi sono 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>

Nota 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 la tua intenzione è dichiarare valori univoci (ad esempio una combinazione specifica di scheme e host), perché più elementi <data> nello stesso filtro per intent vengono effettivamente uniti. per tenere conto di tutte le varianti degli attributi combinati. Ad esempio, considera quanto segue:

<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 questa supporti solo https://www.example.com e app://open.my.app. Tuttavia, in realtà supporta queste due funzionalità, oltre a: app://www.example.com e https://open.my.app.

Attenzione:se più attività contengono filtri per intent che si risolvono nello stesso modo Link per app Android verificato, non vi è alcuna garanzia di quale attività gestisce il link.

Dopo aver aggiunto nell'app filtri per intent con URI per i contenuti relativi all'attività manifest, Android può indirizzare qualsiasi Intent che abbia URI corrispondenti alla tua app in fase di runtime.

Per saperne di più sulla definizione dei filtri per intent, consulta Consenti ad altre app di iniziare la tua attività.

Leggi i dati dagli intent in arrivo

Una volta che il sistema avvia l'attività tramite un filtro per intent, puoi usa i dati forniti da Intent per determinare cosa devi visualizzare. Chiama getData() e getAction() metodi per recuperare i dati e azione associata a Intent in entrata. Puoi di chiamare questi metodi in qualsiasi momento durante il ciclo di vita dell'attività, dovrebbe di solito farlo durante i primi callback, ad esempio 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 utente:

  • Il link diretto deve indirizzare gli utenti direttamente ai contenuti, senza prompt, pagine interstitial o accessi. Assicurati che gli utenti possano vedere i contenuti dell'app anche se non l'hanno mai aperta in precedenza. È consentito chiedere agli utenti di interagire successivamente o di aprire l'app da Avvio app.
  • Segui le indicazioni di progettazione descritte in Navigazione con back-up e up in modo che la tua app corrisponda le aspettative per la navigazione a ritroso dopo entrano nella tua app tramite un link diretto.

Testare i link diretti

Puoi utilizzare lo strumento Debug Android Collega lo strumento Gestione attività (AM) per verificare che il filtro per intent Gli URI che hai specificato per i link diretti si risolvono nell'attività dell'app corretta. Tu puoi eseguire il comando adb su un dispositivo o un emulatore.

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

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

Ad esempio, il comando seguente tenta di visualizzare un'attività target dell'app che è associato all'URI specificato.

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

La dichiarazione del file manifest e il gestore di intent che hai impostato in precedenza definiscono la connessione tra la tua app e un sito web e su cosa fare con i link in entrata. Tuttavia, Per fare in modo che il sistema tratti la tua app come gestore predefinito per un insieme di URI, devi e richiedere al sistema di verificare questa connessione. Nella prossima lezione viene spiegato come implementare questa verifica.

Per scoprire di più sugli intent e sui link dell'app, consulta le seguenti risorse: