Per iniziare
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Panoramica
L'API e il protocollo Digital Asset Links consentono a un'app o a un sito web di rendere Dichiarazioni pubbliche e verificabili relative ad altre app o altri siti web. Ad esempio, un sito web
può dichiarare di essere associato a una specifica app per Android o può dichiarare
che vuole condividere le credenziali utente con un altro sito web.
Di seguito sono riportati alcuni possibili utilizzi di Digital Asset Links:
- Il sito web A dichiara che i link al suo sito dovrebbero aprirsi in un'apposita app sui
dispositivi mobili, se l'app è installata.
- Il sito web A dichiara di poter condividere le proprie credenziali utente di Chrome con il sito web B, in modo che l'utente non debba accedere al sito web B se ha eseguito l'accesso al sito web A.
- L'app A dichiara di poter condividere le impostazioni del dispositivo, ad esempio la posizione, con il sito web B.
Termini chiave
- Entità:l'entità è l'app o il sito web che effettua la dichiarazione. In Digital Asset Links, l'entità è sempre l'app o il sito web che ospita l'elenco degli estratti conto.
- Elenco di istruzioni: le istruzioni sono contenute in un elenco di istruzioni che contiene una o più istruzioni. Un elenco di dichiarazioni è in testo chiaro e accessibile pubblicamente, in una posizione controllata dall'entità e difficile da spoofing o manomissione.
Può essere un file autonomo o una sezione di un altro elemento di dimensioni maggiori. Ad esempio, su un sito web si tratta di un intero file; in un'app per Android, si tratta di una sezione nel file manifest dell'app.
Le dichiarazioni possono essere visualizzate e verificate da chiunque, utilizzando metodi non proprietari. Per ulteriori informazioni, consulta la documentazione relativa all'elenco degli estratti conto.
- Dichiarazione: un'istruzione è un costrutto JSON strettamente strutturato, composto da una relation (quello che l'istruzione dice di fare, ad esempio Abilita la condivisione delle credenziali) e un relation (il sito web o l'app a cui si applica la relazione). Pertanto, ogni affermazione è come una frase, in cui principal indica relation su target.
- Consumatore di istruzioni: un consumer di istruzioni richiede un elenco di istruzioni a un'entità, verifica la presenza di un'istruzione rispetto a una determinata entità e, se esiste, può eseguire l'azione specificata. Per ulteriori informazioni, consulta l'istruzione di compilazione della documentazione.
Esempio di utilizzo rapido
Ecco un esempio molto semplificato di come il sito web www.example.com potrebbe
utilizzare Digital Asset Links per specificare che tutti i link agli URL del sito devono
aprirsi in un'app designata anziché nel browser:
- Il sito web www.example.com pubblica un elenco di dichiarazioni all'indirizzo
https://www.example.com/.well-known/assetlinks.json. Questi sono il nome
e la posizione ufficiali di un elenco di estratti conto su un sito; gli elenchi
di istruzioni, in qualsiasi altra posizione o con qualsiasi altro nome, non sono validi per questo sito. Nel nostro esempio, l'elenco di istruzioni è composto da un'istruzione, che concede alla relativa app per Android l'autorizzazione ad aprire i link sul relativo sito:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target" : { "namespace": "android_app", "package_name": "com.example.app",
"sha256_cert_fingerprints": ["hash_of_app_certificate"] }
}]
Un elenco di istruzioni supporta un array di istruzioni all'interno dei segni [ ], ma il nostro file di esempio contiene una sola istruzione.
sha256_cert_fingerprints
sono le fingerprint SHA256 del certificato di firma della tua app.
Puoi trovare maggiori dettagli nella documentazione relativa ai link per app Android.
- L'app per Android elencata nell'istruzione precedente ha un filtro per intent che specifica lo schema, l'host e il pattern del percorso degli URL che vuole gestire: in questo caso, https://www.example.com. Il filtro per intent include un attributo speciale
android:autoVerify
, nuovo per Android M, che indica che Android deve verificare l'istruzione sul sito web descritto nel filtro per intent quando l'app viene installata.
- Un utente installa l'app. Android vede il filtro per intent con l'attributo
autoVerify
e verifica la presenza dell'elenco delle istruzioni sul sito specificato; se presente, Android controlla se il file include un'istruzione che concede la gestione dei link all'app e verifica l'app in base all'istruzione tramite hash del certificato. Se la verifica ha esito positivo, Android inoltrerà tutti gli intent https://www.example.com all'app example.com.
- L'utente fa clic su un link che rimanda a https://www.example.com/puppies
sul suo dispositivo. Il link può essere ovunque: in un browser, in un suggerimento di Google Search Appliance o altrove. Android
inoltra l'intent all'app example.com.
- L'app example.com riceve l'intent e sceglie di gestirlo
aprendo la pagina dei cuccioli nell'app. Se per qualche motivo
l'app non era riuscita a gestire il link o se non fosse presente
sul dispositivo, il link sarebbe stato inviato al successivo gestore di intent predefinito corrispondente a quel pattern di intent (spesso il browser).
Considerazioni importanti e limitazioni:
- Il protocollo non autentica l'entità che effettua l'istruzione, ma l'istruzione si trova in una località specifica fortemente associata all'entità e sotto il controllo dell'entità.
- Il protocollo non autentica la destinazione dell'istruzione,
ma fornisce al chiamante un mezzo per autenticare il
target (ad esempio, un'istruzione identifica i target delle app mobile
tramite hash del certificato e nome del pacchetto).
- Il protocollo non esegue in modo nativo alcuna azione delle istruzioni, ma consente di esporre le istruzioni, che un'applicazione che utilizza deve convalidare e poi decidere se e come agire. Android M esegue in modo nativo questi passaggi per te.
Ad esempio, se un sito web delega la gestione dei link a un'app specifica,
Android controlla e verifica l'affermazione, verifica l'app di destinazione,
quindi offre all'app la possibilità di gestire il link in questione.
- Il protocollo non consente di fare affermazioni su due terze parti, ovvero il sito web A può fare una dichiarazione sul sito web B, ma il sito web A non può fare una dichiarazione sulla relazione del sito web B con il sito web C. Tuttavia, se il sito web B considera attendibile il sito web A, può controllare
se sul sito web A è presente una dichiarazione che concede l'autorizzazione al sito web C e decidere di implementarla.
Passaggi successivi
- Verifica se esiste una documentazione esplicita per il tuo caso d'uso.
- Scopri di più sulla creazione di un'istruzione.
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2024-06-26 UTC.
[null,null,["Ultimo aggiornamento 2024-06-26 UTC."],[[["\u003cp\u003eDigital Asset Links enable apps and websites to make verifiable statements about their relationships with other apps and websites, such as link handling or credential sharing.\u003c/p\u003e\n"],["\u003cp\u003eThese statements are stored in a publicly accessible statement list, typically an "assetlinks.json" file hosted by the app or website making the statement.\u003c/p\u003e\n"],["\u003cp\u003eAndroid M and above automatically uses Digital Asset Links to verify website-to-app associations and direct links to the appropriate app if installed.\u003c/p\u003e\n"],["\u003cp\u003eThe protocol provides a foundation for trust and delegation between digital entities but relies on consumers to validate and act upon the statements.\u003c/p\u003e\n"]]],[],null,["# Getting Started\n\nOverview\n--------\n\nThe Digital Asset Links protocol and API enable an app or website to make public,\nverifiable *statements* about other apps or websites. For example, a website\ncan declare that it is associated with a specific Android app, or it can declare that\nit wants to share user credentials with another website.\n\nHere are some possible uses for Digital Asset Links:\n\n- Website A declares that links to its site should open in a designated app on mobile devices, if the app is installed.\n- Website A declares that it can share its Chrome user credentials with website B so that the user won't have to log in to website B if it is logged into website A.\n- App A declares that it can share device settings, such as location, with website B.\n\n### Key terms\n\n- **Principal:** The principal is the app or website making the statement. In Digital Asset Links, the principal is always the app or website that hosts the statement list.\n- **Statement list** : Statements are contained in a *statement list* that contains one or more statements. A statement list is cleartext and publicly accessible, in a location that is controlled by the principal and difficult to spoof or tamper with. It can be a free-standing file, or a section of another, larger item. For example, on a website, it is an entire file; in an Android app, it is a section in the app manifest. Statements can be viewed and verified by anyone, using non-proprietary methods. [See the statement list documentation for more information](/digital-asset-links/v1/create-statement).\n- **Statement:** A statement is a tightly structured JSON construct that consists of a *relation* (what the statement says to do, for example: Enable sharing credentials) and a *target* (the website or app that the relation applies to). Therefore, each statement is like a sentence, where *principal* says *relation* about *target* . \n- **Statement consumer:** A statement consumer requests a statement list from a principal, checks for the presence of a statement against a given principal, and if it exists, can perform the action specified. [See the statement comsuming documentation for more information](/digital-asset-links/v1/consuming)*.*\n\nQuick usage example\n-------------------\n\nHere's a very simplified example of how the website www.example.com could\nuse Digital Asset Links to specify that any links to URLs in that site should\nopen in a designated app rather than the browser:\n\n1. The website www.example.com publishes a statement list at https://www.example.com/.well-known/assetlinks.json. This is the official name and location for a statement list on a site; statement lists in any other location, or with any other name, are not valid for this site. In our example, the statement list consists of one statement, granting its Android app the permission to open links on its site: \n\n ```\n [{\n \"relation\": [\"delegate_permission/common.handle_all_urls\"],\n \"target\" : { \"namespace\": \"android_app\", \"package_name\": \"com.example.app\",\n \"sha256_cert_fingerprints\": [\"hash_of_app_certificate\"] }\n }]\n ```\n A statement list supports an array of statements within the \\[ \\] marks, but our example file contains only one statement. `sha256_cert_fingerprints` is the SHA256 fingerprints of your app's signing certificate. Find more details in the [Android App Links documentation](https://developer.android.com/training/app-links/verify-android-applinks#web-assoc).\n2. The Android app listed in the statement above has an intent filter that specifies the scheme, host, and path pattern of URLs that it wants to handle: in this case, https://www.example.com. The intent filter includes a special attribute `android:autoVerify`, new to Android M, which indicates that Android should verify the statement on the website described in the intent filter when the app is installed.\n3. A user installs the app. Android sees the intent filter with the `autoVerify` attribute and checks for the presence of the statement list at the specified site; if present, Android checks whether that file includes a statement granting link handling to the app, and verifies the app against the statement by certificate hash. If everything checks out, Android will then forward any https://www.example.com intents to the example.com app.\n4. The user clicks a link to https://www.example.com/puppies on their device. This link could be anywhere: in a browser, in a Google Search Appliance suggestion, or anywhere else. Android forwards the intent to the example.com app.\n5. The example.com app receives the intent and chooses to handle it, opening the puppies page in the app. If for some reason the app had declined to handle the link, or if the app were not on the device, then the link would have been sent to the next default intent handler matching that intent pattern (often the browser).\n\nImportant considerations and limitations:\n-----------------------------------------\n\n- The protocol does not authenticate the principal making the statement, but the statement is located in a specific location strongly associated with the principal, and under control of the principal.\n- The protocol does not authenticate the statement target, but it provides a means for the caller to authenticate the target (for example, a statement identifies mobile app targets by certificate hash and package name).\n- The protocol does not natively perform any statement actions; rather, it enables the ability to expose statements, which a consuming application must validate and then decide whether and how to act upon. Android M natively performs these steps for you; for example, if a website delegates link handling to a specific app, Android checks and verifies the statement, verifies the target app, and then offers the app the option to handle the given link.\n- The protocol does not enable making statements about two third parties: that is, website A can make a statement about website B, but website A cannot make a statement about website B's relationship to website C. However, if website B trusts website A, it can check website A for a statement granting permission to website C, and decide to implement that.\n\nNext steps\n----------\n\n1. [See if there is explicit documentation for your use case.](/digital-asset-links/v1/using)\n2. [Learn about creating a statement.](/digital-asset-links/v1/create-statement)"]]