Quando un link o una richiesta di pubblicità programmatica selezionato richiamano un intent URI web, il sistema Android tenta ciascuna delle seguenti azioni, in ordine sequenziale, finché la richiesta ha esito positivo:
- Apri l'app preferita dell'utente in grado di gestire l'URI, se indicato.
- Apri l'unica app disponibile in grado di gestire l'URI.
- Consenti all'utente di selezionare un'app da una finestra di dialogo.
Per creare e verificare i link ai tuoi contenuti, procedi nel seguente modo. Puoi anche utilizzare l'Assistente per i link alle app in Android Studio per aggiungere 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 quest'ultima è approvata per il dominio specifico contenuto in quell'intent web. Se la tua app non viene approvata per il dominio, il web intent si risolve nell'app browser predefinita dell'utente.
Aggiungi filtri per intent per i link in arrivo
Per creare un link ai contenuti della tua app, aggiungi un filtro per intent che contenga i seguenti elementi e valori degli attributi nel file manifest:
<action>
- Specifica l'azione di intent
ACTION_VIEW
in modo che il filtro per intent possa essere raggiunto dalla 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 sue variantipathPattern
opathPrefix
per distinguere l'attività che il sistema deve aprire per i diversi percorsi URI. <category>
- Includi la categoria
BROWSABLE
. È necessario per accedere al filtro per intent da un browser web. Senza di esso, fare clic su un link in un browser non può rimandare alla tua app.Includi anche la categoria
DEFAULT
. Ciò consente alla tua app di rispondere a intent impliciti. Senza questo, 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 manifest per i link diretti. Gli URI “example://gizmos”
e
“http://www.example.com/gizmos”
si risolvono entrambi con 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 se intendi dichiarare URL
univoci (ad esempio una combinazione specifica di scheme
e host
), poiché
più elementi <data>
nello stesso filtro per intent vengono in realtà 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 supporti solo https://www.example.com
e
app://open.my.app
. Tuttavia, in realtà supporta questi due elementi, 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 esiste alcuna garanzia su quale attività gestisce il link.
Dopo aver aggiunto i filtri per intent con gli URI per i contenuti delle attività al file 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 iniziare la tua attività.
Leggi i dati dagli intent in arrivo
Dopo che il sistema avvia l'attività tramite un filtro per intent, puoi utilizzare i dati forniti da Intent
per determinare di cosa devi visualizzare. Richiama i metodi getData()
e getAction()
per recuperare i dati e l'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 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 utente:
- Il link diretto deve indirizzare gli utenti direttamente ai contenuti, senza richieste, pagine interstitial o accesso. Assicurati che gli utenti possano vedere 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 backup e su in modo che l'app soddisfi le aspettative degli utenti in termini di navigazione a ritroso dopo che sono entrati nell'app tramite un link diretto.
Test dei link diretti
Puoi utilizzare il Bridge di debug Android con lo strumento Gestione attività (am) per verificare che gli URI del filtro per intent specificati per i link diretti si risolvano 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 seguente tenta di visualizzare un'attività di destinazione dell'app 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 il gestore di intent che hai impostato in precedenza 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 di un insieme di URI, devi anche 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:
- Filtri per intent e intent
- Consentire ad altre app di iniziare la tua attività
- Aggiungere Link per app Android con Android Studio