Un link per app Android è un tipo speciale di link diretto che consente agli URL del tuo sito web di aprire immediatamente i contenuti corrispondenti nella tua app per Android, senza richiedere all'utente di selezionare l'app. I link per app Android utilizzano l'API Digital Asset Links per stabilire l'affidabilità della tua app, che è stata approvata dal sito web per aprire automaticamente i link per quel dominio. Se il sistema verifica correttamente che gli URL sono di tua proprietà, il sistema instrada automaticamente gli intent URL alla tua app.
Per verificare di avere la proprietà sia dell'app sia degli URL del sito web, segui questi passaggi:
Aggiungi filtri per intent che contengano l'attributo
autoVerify
. Questo attributo indica al sistema di verificare se la tua app appartiene ai domini URL utilizzati nei filtri per intent.Dichiara l'associazione tra il tuo sito web e i tuoi filtri per intent ospitando un file JSON Digital Asset Links nel seguente percorso:
https://domain.name/.well-known/assetlinks.json
Puoi trovare informazioni correlate nelle seguenti risorse:
Aggiungere filtri per intent per la verifica dei link dell'app
Per attivare la verifica della gestione dei link per la tua app, aggiungi filtri per intent che corrispondano al seguente formato:
<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<!-- Do not include other schemes. -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
Sebbene sia sufficiente includere autoVerify
in una sola dichiarazione <intent-filter>
per ogni host, anche se questo host viene utilizzato in altre dichiarazioni non contrassegnate, per coerenza ti consigliamo di aggiungere autoVerify
a ogni elemento <intent-filter>
. In questo modo, dopo aver
rimosso o refattorizzato gli elementi nel file manifest, la tua app rimane associata
a tutti i domini che definisci ancora.
La procedura di verifica del dominio richiede una connessione a internet e potrebbe richiedere
un po' di tempo. Per migliorare l'efficienza della procedura, il sistema verifica un dominio per un'app che ha come target Android 12 o versioni successive solo se il dominio si trova all'interno di un elemento <intent-filter>
che contiene il formato esatto specificato nello snippet di codice precedente.
Ad esempio, gli schemi diversi da "http" e "https", come
<data android:scheme="custom" />
, impediranno a un <intent-filter>
di
attivare la verifica del dominio.
Supporto del collegamento delle app per più host
Il sistema deve essere in grado di verificare l'host specificato negli elementi di dati dei filtri per intent URL dell'app rispetto ai file Digital Asset Links ospitati sui rispettivi domini web in quel filtro per intent. Se la verifica non va a buon fine, il sistema torna al suo comportamento standard per risolvere l'intent, come descritto in Creare deep link ai contenuti delle app. Tuttavia, l'app può comunque essere verificata come gestore predefinito per uno qualsiasi dei pattern URL definiti negli altri filtri per intent dell'app.
Nota:su Android 11 (livello API 30) e versioni precedenti, il sistema non verifica la tua app come gestore predefinito a meno che non trovi un file Digital Asset Links corrispondente per tutti gli host che definisci nel manifest.
Ad esempio, un'app con i seguenti filtri
di intent supererebbe la verifica solo per https://www.example.com
se venisse trovato un file assetlinks.json
in
https://www.example.com/.well-known/assetlinks.json
ma non
https://www.example.net/.well-known/assetlinks.json
:
<application> <activity android:name=”MainActivity”> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" /> <data android:scheme="https" /> <data android:host="www.example.com" /> </intent-filter> </activity> <activity android:name=”SecondActivity”> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:host="www.example.net" /> </intent-filter> </activity> </application>
Nota:tutti gli elementi <data>
nello stesso filtro per intent
vengono uniti per tenere conto di tutte le varianti dei relativi attributi combinati. Ad esempio, il
primo filtro per intent sopra include un elemento <data>
che dichiara solo lo
schema HTTPS. ma viene combinato con l'altro elemento <data>
in modo che il filtro
per intent supporti sia http://www.example.com
che https://www.example.com
.
Pertanto, devi creare filtri per intent separati quando vuoi definire combinazioni specifiche
di schemi URI e domini.
Supporto del collegamento app per più sottodomini
Il protocollo Digital Asset Links considera i sottodomini nei filtri per intent come host unici e separati. Pertanto, se il filtro
per intent elenca più host con sottodomini diversi, devi pubblicare un assetlinks.json
valido
su ogni dominio. Ad esempio,
il seguente filtro di intent include www.example.com
e
mobile.example.com
come host URL di intent accettati. Pertanto, un assetlinks.json
valido deve essere pubblicato sia su https://www.example.com/.well-known/assetlinks.json
sia su https://mobile.example.com/.well-known/assetlinks.json
.
<application> <activity android:name=”MainActivity”> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:scheme="https" /> <data android:host="www.example.com" /> <data android:host="mobile.example.com" /> </intent-filter> </activity> </application>
In alternativa, se dichiari il nome host con un carattere jolly (ad esempio *.example.com
),
devi pubblicare il file assetlinks.json
nel nome host principale
(example.com
). Ad esempio, un'app con il seguente filtro per intent supererà
la verifica per qualsiasi nome secondario di example.com
(ad esempio foo.example.com
) se
il file assetlinks.json
viene pubblicato all'indirizzo
https://example.com/.well-known/assetlinks.json
:
<application> <activity android:name=”MainActivity”> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:host="*.example.com" /> </intent-filter> </activity> </application>
Controllare la presenza di più app associate allo stesso dominio
Se pubblichi più app associate allo stesso dominio, ognuna può essere verificata correttamente. Tuttavia, se le app possono risolvere lo stesso host e percorso di dominio esatto, come potrebbe accadere con le versioni lite e complete di un'app, solo l'app installata più di recente può risolvere gli intent web per quel dominio.
In un caso come questo, verifica la presenza di possibili app in conflitto sul dispositivo dell'utente,
a condizione che tu disponga della visibilità
dei pacchetti necessaria. Quindi, nella tua app, mostra una finestra
di dialogo personalizzata per la scelta che contiene i risultati della chiamata
queryIntentActivities()
.
L'utente può selezionare l'app che preferisce dall'elenco delle app corrispondenti
che vengono visualizzate nella finestra di dialogo.
Dichiarare le associazioni di siti web
Sul tuo sito web deve essere pubblicato un file JSON Digital Asset Links per indicare le app per Android associate al sito web e verificare gli intent URL dell'app. Il file JSON utilizza i seguenti campi per identificare le app associate:
package_name
: l'ID applicazione dichiarato nel filebuild.gradle
dell'app.sha256_cert_fingerprints
: le impronte SHA256 del certificato di firma della tua app. Puoi utilizzare il seguente comando per generare l'impronta tramite Java Keytool: Questo campo supporta più impronte, che possono essere utilizzate per supportare diverse versioni dell'app, ad esempio build di debug e di produzione.keytool -list -v -keystore my-release-key.keystore
Se utilizzi la firma delle app di Play per la tua app, la fingerprint del certificato prodotta eseguendo
keytool
localmente di solito non corrisponde a quella sui dispositivi degli utenti. Puoi verificare se utilizzi Play App Signing per la tua app nell'account sviluppatore Play Console nella sezioneRelease > Setup > App signing
. In questo caso, nella stessa pagina troverai anche lo snippet JSON Digital Asset Links corretto per la tua app.
Il seguente esempio di file assetlinks.json
concede i diritti di apertura dei link a un'app Android com.example
:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Associare un sito web a più app
Un sito web può dichiarare associazioni con più app all'interno dello stesso file assetlinks.json
. Il seguente elenco di file mostra un esempio di file delle dichiarazioni che dichiara l'associazione
con due app, separatamente, e si trova in
https://www.example.com/.well-known/assetlinks.json
:
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.puppies.app", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }, { "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.monkeys.app", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
App diverse potrebbero gestire i link per risorse diverse nello stesso host web. Ad esempio,
app1 può dichiarare un filtro per intent per https://example.com/articles
e app2 può dichiarare
un filtro per intent per https://example.com/videos
.
Nota:più app associate a un dominio possono essere firmate con lo stesso certificato o con certificati diversi.
Associare più siti web a una singola app
Più siti web possono dichiarare associazioni con la stessa app nei rispettivi
file assetlinks.json
. I seguenti elenchi di file
mostrano un esempio di come dichiarare l'associazione di example.com e
example.net con app1. La prima scheda mostra l'associazione di example.com
con app1:
https://www.example.com/.well-known/assetlinks.json
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.mycompany.app1", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
La seguente scheda mostra l'associazione di example.net ad app1. Solo la
posizione in cui sono ospitati questi file è diversa (.com
e .net
):
https://www.example.net/.well-known/assetlinks.json
[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.mycompany.app1", "sha256_cert_fingerprints": ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"] } }]
Pubblicazione del file di verifica JSON
Devi pubblicare il file di verifica JSON nella seguente posizione:
https://domain.name/.well-known/assetlinks.json
Assicurati di quanto segue:
- Il file
assetlinks.json
viene pubblicato con content-typeapplication/json
. - Il file
assetlinks.json
deve essere accessibile tramite una connessione HTTPS, indipendentemente dal fatto che i filtri per intent dell'app dichiarino HTTPS come schema di dati. - Il file
assetlinks.json
deve essere accessibile senza reindirizzamenti (nessun reindirizzamento 301 o 302). - Se i link della tua app supportano più domini host, devi pubblicare il file
assetlinks.json
su ogni dominio. Vedi Supporto del collegamento di app per più host. - Non pubblicare la tua app con URL di sviluppo/test nel file manifest che potrebbero non essere accessibili al pubblico (ad esempio quelli accessibili solo con una VPN). Una soluzione alternativa in questi casi è configurare le varianti di build per generare un file manifest diverso per le build di sviluppo.
Verifica dei link per app Android
Quando android:autoVerify="true"
è presente in almeno uno dei filtri
di intent della tua app, l'installazione dell'app su un dispositivo con Android 6.0 (livello API 23) o
versioni successive fa sì che il sistema verifichi automaticamente gli host associati agli
URL nei filtri di intent della tua app. Su Android 12 e versioni successive, puoi anche richiamare manualmente la procedura di verifica per testare la logica di verifica.
Verifica automatica
La verifica automatica del sistema prevede quanto segue:
- Il sistema esamina tutti i filtri per intent che includono uno dei seguenti elementi:
- Azione:
android.intent.action.VIEW
- Categorie:
android.intent.category.BROWSABLE
eandroid.intent.category.DEFAULT
- Schema dei dati:
http
ohttps
- Azione:
- Per ogni nome host univoco trovato nei filtri per intent sopra indicati, Android esegue query
sui siti web corrispondenti per il file Digital Asset Links all'indirizzo
https://hostname/.well-known/assetlinks.json
.
Dopo aver confermato l'elenco dei siti web da associare alla tua app e aver verificato che il file JSON ospitato sia valido, installa l'app sul tuo dispositivo. Attendi almeno 20 secondi affinché la procedura di verifica asincrona venga completata. Utilizza questo comando per verificare se il sistema ha verificato la tua app e ha impostato i criteri di gestione dei link corretti:
adb shell am start -a android.intent.action.VIEW \ -c android.intent.category.BROWSABLE \ -d "http://domain.name:optional_port"
Verifica manuale
A partire da Android 12, puoi richiamare manualmente la verifica del dominio per un'app installata su un dispositivo. Puoi eseguire questa procedura indipendentemente dal fatto che la tua app abbia come target Android 12.
Stabilire una connessione a internet
Per eseguire la verifica del dominio, il dispositivo di test deve essere connesso a internet.
Supportare la procedura di verifica del dominio aggiornata
Se la tua app ha come target Android 12 o versioni successive, il sistema utilizza automaticamente la procedura di verifica del dominio aggiornata.
In caso contrario, puoi attivare manualmente la procedura di verifica aggiornata. Per farlo, esegui questo comando in una finestra del terminale:
adb shell am compat enable 175408749 PACKAGE_NAME
Reimpostare lo stato dei link per app Android su un dispositivo
Prima di richiamare manualmente la verifica del dominio su un dispositivo, devi reimpostare lo stato dei link per app Android sul dispositivo di test. Per farlo, esegui questo comando in una finestra del terminale:
adb shell pm set-app-links --package PACKAGE_NAME 0 all
Questo comando riporta il dispositivo allo stato in cui si trovava prima che l'utente scegliesse le app predefinite per i domini.
Richiamare la procedura di verifica del dominio
Dopo aver reimpostato lo stato dei link per app Android su un dispositivo, puoi eseguire la verifica. Per farlo, esegui questo comando in una finestra del terminale:
adb shell pm verify-app-links --re-verify PACKAGE_NAME
Esaminare i risultati della verifica
Dopo aver lasciato un po' di tempo all'agente di verifica per completare le richieste, esamina i risultati della verifica. Per farlo, esegui questo comando:
adb shell pm get-app-links PACKAGE_NAME
L'output di questo comando è simile al seguente:
com.example.pkg: ID: 01234567-89ab-cdef-0123-456789abcdef Signatures: [***] Domain verification state: example.com: verified sub.example.com: legacy_failure example.net: verified example.org: 1026
I domini che superano la verifica hanno uno stato di verifica del dominio
verified
. Qualsiasi altro stato indica che non è stato possibile
eseguire la verifica del dominio. In particolare, uno stato none
indica che l'agente di verifica potrebbe non aver ancora completato la procedura di verifica.
Il seguente elenco mostra i possibili valori restituiti che la verifica del dominio può restituire per un determinato dominio:
none
- Non è stato registrato nulla per questo dominio. Attendi qualche altro minuto affinché l'agente di verifica completi le richieste relative alla verifica del dominio, quindi richiama di nuovo la procedura di verifica del dominio.
verified
- Il dominio è stato verificato correttamente per l'app dichiarante.
approved
- Il dominio è stato approvato forzatamente, di solito eseguendo un comando shell.
denied
- Il dominio è stato rifiutato forzatamente, in genere eseguendo un comando shell.
migrated
- Il sistema ha conservato il risultato di un processo precedente che utilizzava la verifica del dominio legacy.
restored
- Il dominio è stato approvato dopo che l'utente ha eseguito un ripristino dei dati. Si presume che il dominio sia stato verificato in precedenza.
legacy_failure
- Il dominio è stato rifiutato da un verificatore legacy. Il motivo specifico del mancato invio è sconosciuto.
system_configured
- Il dominio è stato approvato automaticamente dalla configurazione del dispositivo.
- Codice di errore
1024
o superiore Codice di errore personalizzato specifico per il verificatore del dispositivo.
Verifica di aver stabilito una connessione di rete e richiama di nuovo la procedura di verifica del dominio.
Chiedi all'utente di associare la tua app a un dominio
Un altro modo per ottenere l'approvazione della tua app per un dominio è chiedere all'utente di associare la tua app a quel dominio.
Controllare se la tua app è già approvata per il dominio
Prima di chiedere all'utente, verifica se la tua app è il gestore predefinito per
i domini che definisci negli elementi <intent-filter>
. Puoi eseguire query
sullo stato di approvazione utilizzando uno dei seguenti metodi:
- L'API
DomainVerificationManager
(in fase di esecuzione). - Un programma a riga di comando (durante i test).
DomainVerificationManager
Il seguente snippet di codice mostra come utilizzare l'API
DomainVerificationManager
:
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val manager = context.getSystemService(DomainVerificationManager::class.java) val userState = manager.getDomainVerificationUserState(context.packageName) // Domains that have passed Android App Links verification. val verifiedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_VERIFIED } // Domains that haven't passed Android App Links verification but that the user // has associated with an app. val selectedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_SELECTED } // All other domains. val unapprovedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_NONE }
Java
Context context = TODO("Your activity or fragment's Context"); DomainVerificationManager manager = context.getSystemService(DomainVerificationManager.class); DomainVerificationUserState userState = manager.getDomainVerificationUserState(context.getPackageName()); Map<String, Integer> hostToStateMap = userState.getHostToStateMap(); List<String> verifiedDomains = new ArrayList<>(); List<String> selectedDomains = new ArrayList<>(); List<String> unapprovedDomains = new ArrayList<>(); for (String key : hostToStateMap.keySet()) { Integer stateValue = hostToStateMap.get(key); if (stateValue == DomainVerificationUserState.DOMAIN_STATE_VERIFIED) { // Domain has passed Android App Links verification. verifiedDomains.add(key); } else if (stateValue == DomainVerificationUserState.DOMAIN_STATE_SELECTED) { // Domain hasn't passed Android App Links verification, but the user has // associated it with an app. selectedDomains.add(key); } else { // All other domains. unapprovedDomains.add(key); } }
Programma a riga di comando
Quando testi la tua app durante lo sviluppo, puoi eseguire il seguente comando per interrogare lo stato di verifica dei domini di proprietà della tua organizzazione:
adb shell pm get-app-links --user cur PACKAGE_NAME
Nell'output di esempio seguente, anche se la verifica dell'app non è riuscita per il dominio "example.org", l'utente 0 ha approvato manualmente l'app nelle impostazioni di sistema e nessun altro pacchetto è verificato per quel dominio.
com.example.pkg: ID: *** Signatures: [***] Domain verification state: example.com: verified example.net: verified example.org: 1026 User 0: Verification link handling allowed: true Selection state: Enabled: example.org Disabled: example.com example.net
Puoi anche utilizzare i comandi della shell per simulare la procedura in cui l'utente seleziona
l'app associata a un determinato dominio. Una spiegazione completa di questi
comandi è disponibile nell'output di adb shell pm
.
Fornire il contesto della richiesta
Prima di inviare questa richiesta di approvazione del dominio, fornisci un contesto per l'utente. Ad esempio, puoi mostrare una schermata iniziale, una finestra di dialogo o un elemento UI simile che spieghi all'utente perché la tua app deve essere il gestore predefinito per un determinato dominio.
Effettuare la richiesta
Dopo che l'utente ha capito cosa gli chiede di fare la tua app, effettua la richiesta.
Per farlo, richiama un intent che includa l'azione
ACTION_APP_OPEN_BY_DEFAULT_SETTINGS
dell'intent e una stringa di dati corrispondente a
package:com.example.pkg
per l'app di destinazione, come mostrato nello
snippet di codice seguente:
Kotlin
val context: Context = TODO("Your activity or fragment's Context") val intent = Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:${context.packageName}")) context.startActivity(intent)
Java
Context context = TODO("Your activity or fragment's Context"); Intent intent = new Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:" + context.getPackageName())); context.startActivity(intent);
Quando viene richiamato l'intent, gli utenti vedono una schermata delle impostazioni chiamata Apri per impostazione predefinita. Questa schermata contiene un pulsante di opzione chiamato Apri link supportati, come mostrato nella Figura 1.
Quando l'utente attiva l'opzione Apri link supportati, viene visualizzato un insieme di caselle di controllo in una sezione chiamata Link da aprire in questa app. Da qui, gli utenti possono selezionare i domini che vogliono associare alla tua app. Possono anche selezionare Aggiungi link per aggiungere domini, come mostrato nella figura 2. Quando gli utenti selezionano in un secondo momento un link all'interno dei domini che aggiungono, il link si apre automaticamente nella tua app.
Apri i domini nella tua app che non può essere verificata
La funzione principale della tua app potrebbe essere quella di aprire link come terza parte, senza la possibilità di verificare i domini gestiti. In questo caso, spiega agli utenti che, quando selezionano un link web, non possono scegliere tra un'app proprietaria e la tua app (di terze parti). Gli utenti devono associare manualmente i domini alla tua app di terze parti.
Inoltre, valuta la possibilità di introdurre una finestra di dialogo o un'attività di trampolino che consenta all'utente di aprire il link nell'app proprietaria se preferisce farlo, fungendo da proxy. Prima di configurare una finestra di dialogo o un'attività trampoline, configura la tua app in modo che abbia la visibilità dei pacchetti nelle app proprietarie che corrispondono al filtro per intent web della tua app.
Testare i link per app
Quando implementi la funzionalità di collegamento delle app, devi testare la funzionalità di collegamento per assicurarti che il sistema possa associare la tua app ai tuoi siti web e gestire le richieste di URL come previsto.
Per testare un file di istruzioni esistente, puoi utilizzare lo Strumento di generazione e test dell'elenco delle istruzioni.
Conferma l'elenco degli host da verificare
Durante il test, devi confermare l'elenco degli host associati che il sistema deve verificare per la tua app. Crea un elenco di tutti gli URL i cui filtri per intent corrispondenti includono i seguenti attributi ed elementi:
- Attributo
android:scheme
con un valore dihttp
ohttps
- Attributo
android:host
con un pattern URL di dominio - Elemento di azione
android.intent.action.VIEW
- Elemento della categoria
android.intent.category.BROWSABLE
Utilizza questo elenco per verificare che un file JSON Digital Asset Links sia fornito su ogni host e sottodominio denominato.
Conferma i file Digital Asset Links
Per ogni sito web, utilizza l'API Digital Asset Links per verificare che il file JSON Digital Asset Links sia ospitato e definito correttamente:
https://digitalassetlinks.googleapis.com/v1/statements:list? source.web.site=https://domain.name:optional_port& relation=delegate_permission/common.handle_all_urls
Controllare le norme relative ai link
Nell'ambito della procedura di test, puoi controllare le impostazioni di sistema correnti per la gestione dei link. Utilizza il seguente comando per ottenere un elenco delle norme di gestione dei link esistenti per tutte le app sul dispositivo connesso:
adb shell dumpsys package domain-preferred-apps
In alternativa, puoi fare la stessa cosa con il seguente comando:
adb shell dumpsys package d
Nota:assicurati di attendere almeno 20 secondi dopo l'installazione dell'app per consentire al sistema di completare la procedura di verifica.
Il comando restituisce un elenco di ogni utente o profilo definito sul dispositivo, preceduto da un'intestazione nel seguente formato:
App linkages for user 0:
Dopo questa intestazione, l'output utilizza il seguente formato per elencare le impostazioni di gestione dei link per l'utente:
Package: com.android.vending Domains: play.google.com market.android.com Status: always : 200000002
Questo elenco indica quali app sono associate a quali domini per l'utente:
Package
: identifica un'app in base al nome del pacchetto, come dichiarato nel manifest.Domains
- Mostra l'elenco completo degli host i cui link web vengono gestiti da questa app, utilizzando gli spazi vuoti come delimitatori.Status
: mostra l'impostazione attuale di gestione dei link per questa app. Un'app che ha superato la verifica e il cui manifest contieneandroid:autoVerify="true"
, mostra lo statoalways
. Il numero esadecimale dopo questo stato è correlato al record delle preferenze di collegamento delle app dell'utente nel sistema Android. Questo valore non indica se la verifica ha avuto esito positivo.
Nota:se un utente modifica le impostazioni dei link dell'app per un'app prima del completamento della verifica, potresti visualizzare un falso positivo per una verifica riuscita, anche se la verifica non è riuscita. Questo errore di verifica, tuttavia, non ha importanza se l'utente ha attivato esplicitamente l'apertura dei link supportati da parte dell'app senza chiedere. Questo perché le preferenze dell'utente hanno la precedenza sulla verifica programmatica (o sulla sua assenza). Di conseguenza, il link rimanda direttamente alla tua app, senza mostrare una finestra di dialogo, proprio come se la verifica fosse andata a buon fine.
Esempio di test
Affinché la verifica dei link per app vada a buon fine, il sistema deve essere in grado di verificare la tua app con ciascuno dei siti web specificati in un determinato filtro per intent che soddisfa i criteri per i link per app. L'esempio seguente mostra una configurazione del file manifest con diversi link per app definiti:
<application> <activity android:name=”MainActivity”> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:scheme="https" /> <data android:host="www.example.com" /> <data android:host="mobile.example.com" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:host="www.example2.com" /> </intent-filter> </activity> <activity android:name=”SecondActivity”> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> <data android:host="account.example.com" /> </intent-filter> </activity> <activity android:name=”ThirdActivity”> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="https" /> <data android:host="map.example.com" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="market" /> <data android:host="example.com" /> </intent-filter> </activity> </application>
L'elenco degli host che la piattaforma tenterebbe di verificare dal manifest sopra riportato è:
www.example.com mobile.example.com www.example2.com account.example.com
L'elenco degli host che la piattaforma non tenterà di verificare dal manifest precedente è:
map.example.com (it does not have android.intent.category.BROWSABLE) market://example.com (it does not have either an "http" or "https" scheme)
Per saperne di più sugli elenchi di istruzioni, consulta Creazione di un elenco di istruzioni.
Correggere gli errori di implementazione comuni
Se non riesci a verificare i link per app Android, controlla i seguenti errori comuni. Questa sezione utilizza example.com
come segnaposto per il nome di dominio; quando
esegui questi controlli, sostituisci example.com
con il nome di dominio
effettivo del tuo server.
- Configurazione del filtro per intent non corretta
- Controlla se includi un URL non di proprietà della tua app in un elemento
<intent-filter>
. - Configurazione del server errata
Controlla la configurazione JSON del server e assicurati che il valore SHA sia corretto.
Inoltre, verifica che
example.com.
(con il punto finale) mostri gli stessi contenuti diexample.com
.- Reindirizzamenti lato server
Il sistema non verifica alcun link per app Android per la tua app se configuri un reindirizzamento come il seguente:
- Da
http://example.com
ahttps://example.com
- Da
example.com
awww.example.com
Questo comportamento protegge la sicurezza della tua app.
- Da
- Robustezza del server
Controlla se il server può connettersi alle app client.
- Link non verificabili
A scopo di test, potresti aggiungere intenzionalmente link non verificabili. Tieni presente che, su Android 11 e versioni precedenti, questi link impediscono al sistema di verificare tutti i link app Android per la tua app.
- Firma errata in assetlinks.json
Verifica che la firma sia corretta e corrisponda a quella utilizzata per firmare la tua app. Gli errori comuni includono:
- Firma dell'app con un certificato di debug e presenza della sola firma di rilascio in
assetlinks.json
. - Avere una firma in minuscolo in
assetlinks.json
. La firma deve essere in maiuscolo. - Se utilizzi la firma dell'app di Google Play, assicurati di utilizzare la firma che Google usa per firmare ogni release. Puoi verificare questi dettagli, incluso uno snippet JSON completo, seguendo le istruzioni per dichiarare le associazioni di siti web.
- Firma dell'app con un certificato di debug e presenza della sola firma di rilascio in