Quando un link o una richiesta programmatica su cui è stato fatto clic richiama un'intenzione URI web, il sistema Android prova ciascuna delle seguenti azioni, in ordine sequenziale, finché la richiesta non va a buon fine:
- Apri l'app preferita dell'utente che può 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.
Per creare e testare i link ai tuoi contenuti, segui i passaggi riportati di seguito. Puoi anche utilizzare l'Assistente per i link alle app in Android Studio per aggiungere i link per app Android.
Nota: a partire da Android 12 (livello API 31), un intent web generico si risolve 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 arrivo
Per creare un link ai contenuti della tua 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 possa essere raggiunto dalla Ricerca Google. <data>
- Aggiungi uno o più tag
<data>
, ciascuno dei quali rappresenta un formato URI che risolve l'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 quale attività deve essere aperta dal sistema per percorsi URI diversi. <category>
- Includi la categoria
BROWSABLE
. È necessario affinché il filtro intent sia accessibile da un browser web. In caso contrario, il clic su un link in un browser non può risolvere la tua app.Includi anche la categoria
DEFAULT
. In questo modo, la tua app può rispondere agli intent impliciti. In caso contrario, 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. Entrambi gli URI “example://gizmos”
e
“http://www.example.com/gizmos”
risolvono 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 di intent differiscono solo per l'elemento <data>
.
Sebbene sia possibile includere più elementi <data>
nello stesso filtro,
è importante creare filtri separati se vuoi dichiarare URL unici (ad esempio una combinazione specifica di scheme
e host
), perché
più elementi <data>
nello stesso filtro intent vengono effettivamente uniti
per tenere conto di tutte le varianti dei relativi 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, supporta effettivamente questi due formati, oltre a:
app://www.example.com
e https://open.my.app
.
Attenzione: se più attività contengono filtri intent che risolvono nello stesso link dell'app Android verificato, non è garantito quale attività gestisce il link.
Dopo aver aggiunto i filtri intent con gli URI per i contenuti delle attività al manifest dell'app, Android è in grado di inoltrare qualsiasi Intent
con URI corrispondenti alla tua app in fase di esecuzione.
Per scoprire di più sulla definizione dei filtri di intent, consulta Consentire ad altre app di avviare l'attività.
Leggere i dati dagli intent in arrivo
Una volta che il sistema avvia la tua attività tramite un filtro intent, puoi
utilizzare i dati forniti da Intent
per determinare cosa devi visualizzare. Chiama i metodi getData()
e getAction()
per recuperare i dati e l'azione associati al Intent
in entrata. Puoi chiamare questi metodi in qualsiasi momento durante il ciclo di vita dell'attività, ma in genere dovresti farlo durante i primi callback 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 richieste, pagine intermedie o accessi. Assicurati che gli utenti possano vedere i contenuti dell'app anche se non hanno mai aperto l'applicazione in precedenza. È consentito chiedere agli utenti di confermare le interazioni successive o quando aprono l'app dal 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 in termini di navigazione a ritroso dopo che accedono alla tua app tramite un link diretto.
Testare i link diretti
Puoi utilizzare Android Debug Bridge con lo strumento Activity Manager (am) per verificare che gli URI del filtro per intent specificati per i link diretti risolvano nell'attività dell'app corretta. Puoi eseguire il comando adb su un dispositivo o un emulatore.
La sintassi generale per testare un URI del filtro 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 target associata all'URI specificato.
$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
La dichiarazione manifest e il gestore degli intent impostati sopra definiscono la connessione tra la tua app e un sito web e cosa fare con i link in arrivo. Tuttavia, per fare in modo che il sistema tratti la tua app come gestore predefinito per un insieme di URI, devi anche richiedere che il sistema verifichi questa connessione. La lezione successiva spiega come implementare questa verifica.
Per scoprire di più su intent e link alle app, consulta le seguenti risorse:
- Intent e filtri intent
- Consentire ad altre app di avviare la tua attività
- Aggiungere link per app Android con Android Studio