Quando un link su cui è stato fatto clic o una richiesta programmatica richiama un intent URI web, il sistema Android tenta ciascuna delle seguenti azioni, in ordine sequenziale, finché la richiesta non va a buon fine:
- Apri l'app preferita dell'utente in grado di gestire l'URI, se ne è stata designata una.
- Apri l'unica app disponibile in grado di gestire l'URI.
- Consente all'utente di selezionare un'app da una finestra di dialogo.
Segui i passaggi riportati di seguito per creare e testare i link ai tuoi contenuti. Puoi anche utilizzare l'assistente per i link per app in Android Studio per aggiungere i link per app Android.
Nota: a partire da Android 12 (livello API 31), un intent web generico viene risolto in un'attività nella tua app solo se l'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.
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 degli attributi 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 si risolve nell'attività. Come minimo, il tag<data>
deve includere l'attributoandroid:scheme
.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'attributo
android:path
o le relative variantipathPattern
opathPrefix
per distinguere l'attività che il sistema deve aprire per diversi percorsi URI. <category>
- Includi la categoria
BROWSABLE
. È necessario affinché il filtro per intent sia accessibile da un browser web. Senza, fare clic su un link in un browser non può essere risolto nella tua app.Includi anche la categoria
DEFAULT
. In questo modo, la tua app può rispondere agli intent impliciti. Senza questa impostazione, 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 il deep linking. Gli URI “example://gizmos”
e
“http://www.example.com/gizmos”
rimandano entrambi a 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 intendi dichiarare URL univoci (ad esempio una combinazione specifica di scheme
e host
), perché
più elementi <data>
nello stesso filtro per intent vengono uniti
per tenere conto di tutte le varianti dei loro attributi combinati. Ad esempio, prendi in considerazione 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 supporti solo https://www.example.com
e
app://open.my.app
. Tuttavia, supporta questi due, oltre a questi:
app://www.example.com
e https://open.my.app
.
Attenzione:se più attività contengono filtri per intent che si risolvono nello stesso link per app Android verificato, non è garantito quale attività gestirà il link.
Una volta aggiunti i filtri per intent con URI per i contenuti delle attività al manifest dell'app, Android è in grado di indirizzare qualsiasi Intent
con URI corrispondenti alla tua app in fase di runtime.
Per scoprire di più sulla definizione dei filtri per intent, consulta Consentire ad altre app di avviare la tua attività.
Legge 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 metodi getData()
e
getAction()
per recuperare i dati e
l'azione associata all'intent Intent
in entrata. Puoi
chiamare questi metodi in qualsiasi momento del ciclo di vita dell'attività, ma in genere
dovresti 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 visualizzare i contenuti dell'app anche se non l'hanno mai aperta in precedenza. È consentito chiedere agli utenti 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 accedono alla tua app tramite un link diretto.
Testare i link diretti
Puoi utilizzare Android Debug Bridge con lo strumento di gestione delle attività (am) per verificare che gli URI del filtro per intent che hai specificato per il deep linking 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 comando riportato di seguito 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
La dichiarazione del file manifest e l'handler intent che hai impostato sopra definiscono la connessione tra la tua app e un sito web e 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 anche richiedere al sistema di verificare questa connessione. La prossima lezione spiega come implementare questa verifica.
Per saperne di più sugli intent e sui link per app, consulta le seguenti risorse:
- Intent e filtri per intent
- Consenti ad altre app di avviare la tua attività
- Aggiungere link per app Android con Android Studio