Quando un link cliccato programmatico richiesta invoca un web URI intento, il sistema Android cerca di ciascuna delle seguenti azioni, in ordine progressivo, fino a quando la richiesta ha esito positivo:
- Aprire il preferito dell’utente app in grado di gestire l’URI, se uno è designato.
- 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. È inoltre possibile utilizzare l’assistente Collegamenti app in Android Studio per aggiungere collegamenti App Android.
Aggiungi filtri intent per i collegamenti in arrivo
Per creare un collegamento al contenuto dell’app, aggiungi un filtro intent che contiene questi elementi e valori di attributo nel manifest:
<action>
Specifica l’azione intentACTION_VIEW
in modo che il filtro intent possa essere raggiunto dalla ricerca Google.<data>
Aggiungi uno o più tag<data>
, ognuno dei quali rappresenta un formato URI che risolve l’attività. Come minimo, il tag<data>
deve includere l’attributoandroid:scheme
.
È possibile 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, utilizzare l’attributo android:path
o le sue varianti pathPattern
o pathPrefix
per differenziare l’attività che il sistema deve aprire per diversi percorsi URI.
<category>
Includere la categoriaBROWSABLE
. È necessario affinché il filtro intent sia accessibile da un browser web. Senza di esso, facendo clic su un collegamento in un browser non può risolvere per la vostra app.
Include anche la categoria DEFAULT
.Ciò consente alla tua app di rispondere agli intenti impliciti. Senza questo, l’attività può essere avviatasolo se l’intento specifica il nome del componente dell’app.
Il seguente snippet XML mostra come è possibile specificare un filtro intent nel manifest per il deep linking. Gli URI "example://gizmos"
e"http://www.example.com/gizmos"
risolvono entrambi 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>
Si noti che i due filtri 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 è quella di dichiarare uniqueURLs (come una combinazione specifica di scheme
e host
), perchémultiple <data>
elementi nello stesso filtro intent sono effettivamente uniti insieme per tenere conto di tutte le variazioni dei loro 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 questo supporti solo https://www.example.com
eapp://open.my.app
. Tuttavia, supporta effettivamente questi due, più questi:app://www.example.com
e https://open.my.app
.
Una volta aggiunti filtri intent con URI per il contenuto di attività al tuo appmanifest, Android è in grado di instradare qualsiasi Intent
che abbia URI corrispondenti alla tua app in fase di runtime.
Per ulteriori informazioni sulla definizione dei filtri di intenti, consulta Consenti ad altre app di avviare la tua attività.
Leggere i dati dagli intenti in entrata
Una volta che il sistema avvia l’attività tramite un filtro di intenti, è possibile utilizzare i dati forniti da Intent
per determinare ciò che è necessario eseguire il rendering. Chiamare i metodi getData()
egetAction()
per recuperare i dati e l’azione associati all’ingresso Intent
. È possibile chiamare questi metodi in qualsiasi momento durante il ciclo di vita dell’attività, ma in genere è necessario farlo durante i callback iniziali come onCreate()
oonStart()
.
Ecco un frammento che mostra come recuperare i dati da unIntent
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) val action: String? = intent?.action val data: Uri? = intent?.data}
Java
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData();}
Seguire queste best practice per migliorare l’esperienza dell’utente:
- Il profondo legame che si dovrebbe prendere agli utenti di accedere direttamente al contenuto,senza alcuna richiesta, interstiziale pagine o gli account di accesso. Assicurati che gli utenti possonovedere il contenuto dell’app anche se non hanno mai aperto in precedenza l’applicazione.Va bene richiedere agli utenti le interazioni successive o quando aprono l’app dal programma di avvio.
- Segui la guida alla progettazione descritta in Navigazione con Back and Up in modo che l’app corrisponda alle aspettative degli utenti per la navigazione all’indietro dopo aver inserito l’app tramite un collegamento profondo.
Prova i tuoi collegamenti profondi
Puoi utilizzare Android DebugBridge con lo strumento Activity manager (am) per verificare che il filtro di intenti specificato per il deep linking risolva l’attività corretta dell’app. Youcan eseguire il comando adb contro un dispositivo o un emulatore.
La sintassi generale per testare un URI di filtro di intento 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à dell’app di destinazione cheè associato 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 di intenti impostati sopra definiscono la connessione tra l’app e un sito Web e cosa fare con i collegamenti in arrivo. Tuttavia, affinché il sistema tratti la tua app come gestore predefinito per un set di URI, devi anche richiedere che il sistema verifichi questa connessione. La prossima lezione spiega come implementare questa verifica.