Ein Android-App-Link ist ein spezieller Deeplink, über den Ihre Website-URLs um die entsprechenden Inhalte sofort in Ihrer Android-App zu öffnen, Nutzer müssen die App auswählen. Für Android-App-Links wird das digitale Asset verwendet. Links API, um Vertrauen aufzubauen dass deine App von der Website genehmigt wurde, Links für für diese Domain. Wenn das System erfolgreich bestätigt, dass Sie der Inhaber der URLs sind, wird das Feld das System diese URL-Intents automatisch an Ihre App weiterleitet.
Um zu bestätigen, dass Sie der Inhaber Ihrer App und der Website-URLs sind, füllen Sie die folgenden Schritten:
Füge Intent-Filter hinzu, die
autoVerify
enthalten. . Dieses Attribut signalisiert dem System, dass es überprüfen soll, ob gehört deine App zu den URL-Domains, die in deinen Intent-Filtern verwendet werden.Verknüpfung zwischen Ihrer Website und Ihrer Absicht deklarieren filtert, indem eine Digital Asset Links-JSON-Datei unter folgendem Speicherort gehostet wird:
https://domain.name/.well-known/assetlinks.json
Weitere Informationen finden Sie in den folgenden Ressourcen:
Intent-Filter für die Bestätigung von App-Links hinzufügen
Fügen Sie Intent-Filter mit übereinstimmenden Intent-Filtern hinzu, um die Überprüfung der Linkverarbeitung für Ihre App zu aktivieren im folgenden Format:
<!-- 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". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
Es reicht zwar aus, autoVerify
nur in einer <intent-filter>
anzugeben.
-Deklaration für jeden Host, selbst wenn dieser Host in anderen, nicht gekennzeichneten
Deklarationen empfehlen, jeweils autoVerify
hinzuzufügen
<intent-filter>
-Element aus Gründen der Einheitlichkeit. Damit stellen Sie auch sicher,
Wenn Sie Elemente in Ihrer Manifest-Datei entfernen oder refaktorieren, bleibt Ihre App verknüpft
mit allen Domains, die Sie noch definieren.
Für die Domainbestätigung ist eine Internetverbindung erforderlich und kann bis zu
etwas Zeit vergeht. Um die Effizienz des Prozesses zu verbessern,
die Domain einer App bestätigt, die auf Android 12 oder höher ausgerichtet ist
wenn sich diese Domain in einem <intent-filter>
-Element befindet, das das Schlüssel/Wert-Paar
genau das Format, das im vorherigen Code-Snippet angegeben wurde.
App-Verknüpfung für mehrere Hosts unterstützen
Das System muss in der Lage sein, den in den URL-Intent-Filtern der App angegebenen Host zu verifizieren. mit den Digital Asset Links-Dateien, die auf den entsprechenden Webdomains gehostet werden, Intent-Filter. Wenn die Bestätigung fehlschlägt, wird das System auf das Standardverhalten zurückgesetzt um den Intent aufzulösen, wie in Erstelle Deeplinks zu App-Inhalten. Die Anwendung kann jedoch weiterhin als Standard-Handler überprüft werden. für alle URL-Muster, die in den anderen Intent-Filtern der App definiert sind.
Hinweis:Unter Android 11 (API-Level 30) und niedriger wird das System überprüft Ihre App nur dann als Standard-Handler, wenn sie einen übereinstimmenden Digital Asset Links-Datei für alle Hosts, die du in den Manifests.
Eine App mit den folgenden Intent-Filtern besteht beispielsweise nur die Überprüfung für https://www.example.com
, wenn eine assetlinks.json
-Datei unter https://www.example.com/.well-known/assetlinks.json
, aber nicht unter https://www.example.net/.well-known/assetlinks.json
gefunden wird:
<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>
Hinweis:Alle <data>
-Elemente im selben Intent-Filter
werden zusammengeführt, um alle Variationen ihrer kombinierten Attribute zu berücksichtigen. Beispiel: Der Parameter
der erste Intent-Filter oben ein <data>
-Element enthält, das nur das
HTTPS-Schema. aber es wird mit dem anderen <data>
-Element kombiniert, damit der Intent
Filter unterstützt sowohl http://www.example.com
als auch https://www.example.com
.
Daher müssen Sie separate Intent-Filter erstellen, wenn Sie bestimmte Kombinationen definieren möchten.
von URI-Schemata und -Domains.
Anwendungsverknüpfungen für mehrere Subdomains unterstützen
Das Digital Asset Links-Protokoll behandelt Subdomains in Ihren Intent-Filtern als eindeutig,
separaten Hosts. Wenn Ihre Absicht
mehrere Hosts mit unterschiedlichen Sub-Domains auflistet, müssen Sie eine gültige
assetlinks.json
für jede Domain. Beispiel:
enthält der folgende Intent-Filter www.example.com
und
mobile.example.com
als akzeptierte Intent-URL-Hosts. Eine gültige
assetlinks.json
muss in beiden Diensten veröffentlicht werden
https://www.example.com/.well-known/assetlinks.json
und
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>
Wenn Sie Ihren Hostnamen alternativ mit einem Platzhalter wie *.example.com
angeben,
Du musst deine assetlinks.json
-Datei unter dem Stamm-Hostnamen veröffentlichen
(example.com
). Beispiel: Eine App mit dem folgenden Intent-Filter übergibt
Bestätigung für jeden beliebigen Unternamen von example.com
(z. B. foo.example.com
) als
Voraussetzung ist, dass die Datei assetlinks.json
unter folgendem Pfad veröffentlicht wird:
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>
Prüfen, ob mehrere Apps mit derselben Domain verknüpft sind
Wenn Sie mehrere Apps veröffentlichen, die jeweils mit derselben Domain verknüpft sind, können sie jeweils bestätigt werden. Können die Apps das Problem Domain-Host und -Pfad, wie dies bei Lite- und Vollversionen von Web Intents können nur von der zuletzt installierten App aufgelöst werden. für diese Domain.
Suchen Sie in einem solchen Fall nach
möglichen in Konflikt stehenden Apps auf dem Gerät des Nutzers,
vorausgesetzt, Sie haben das erforderliche Paket
Sichtbarkeit. Zeigen Sie dann in Ihrer App ein benutzerdefiniertes
Auswahldialogfeld, das die Ergebnisse des Aufrufs enthält.
queryIntentActivities()
Der Nutzer kann seine bevorzugte App aus der Liste der übereinstimmenden Apps auswählen, die
werden im Dialogfeld angezeigt.
Websiteverknüpfungen deklarieren
Ein digitales Asset Links Die JSON-Datei muss auf Ihrer Website veröffentlicht werden, um die Android-Apps anzugeben. die mit der Website verknüpft sind, und verifizieren Sie die URL-Intents der App. In der JSON-Datei werden die folgenden Felder verwendet, um zugehörige Anwendungen zu identifizieren:
package_name
: die Anwendungs-ID in derbuild.gradle
-Datei der App deklariert sein.sha256_cert_fingerprints
: Die SHA256-Fingerabdrücke des Signaturzertifikats Ihrer App. Mit dem folgenden Befehl können Sie den Fingerabdruck über das Java-Keytool generieren: Dieses Feld unterstützt mehrere Fingerabdrücke, die zur Unterstützung verschiedene Versionen Ihrer App zu testen, z. B. Debug- und Produktions-Builds.keytool -list -v -keystore my-release-key.keystore
Wenn Sie die Play App-Signatur für Ihre App verwenden, wird in der Regel ein Fingerabdruck erstellt, der durch die lokale Ausführung von
keytool
generiert wird. stimmt nicht mit der auf der Geräte. Sie können überprüfen, ob Sie Die Play App-Signatur für Ihre App finden Sie in Ihrem Play Console-Entwicklerkonto unterRelease > Setup > App signing
; dann werden Sie auch das richtige Digital Asset Links-JSON-Snippet für Ihre App auf derselben Seite.
In der folgenden Beispiel-assetlinks.json
-Datei werden einer com.example
-Android-App Berechtigungen zum Öffnen von Links gewährt:
[{ "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"] } }]
Eine Website mit mehreren Apps verknüpfen
Eine Website kann Verknüpfungen mit mehreren Apps innerhalb derselben assetlinks.json
deklarieren
-Datei. Die folgende Dateiliste zeigt ein Beispiel für eine Erklärungsdatei, die die Verknüpfung mit zwei Apps separat deklariert und sich unter https://www.example.com/.well-known/assetlinks.json
befindet:
[{ "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"] } }]
Verschiedene Apps können Links für verschiedene Ressourcen unter demselben Webhost verarbeiten. Beispiel:
app1 kann einen Intent-Filter für https://example.com/articles
und app2 deklarieren
Intent-Filter für https://example.com/videos
.
Hinweis: Mehrere Apps, die einer Domain zugeordnet sind, können mit demselben oder verschiedene Zertifikate.
Mehrere Websites mit einer einzelnen App verknüpfen
Mehrere Websites können Verknüpfungen mit derselben App in ihrer
entsprechende assetlinks.json
-Dateien. Die folgenden Dateieinträge zeigen ein Beispiel dafür, wie die Verknüpfung von beispiel.de und beispiel.net mit app1 deklariert wird. Der erste Eintrag zeigt die Verknüpfung von example.com.
mit app1:
[{ "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"] } }]
Im nächsten Eintrag ist die Verknüpfung von beispiel.de mit app1 zu sehen. Lediglich der Speicherort, an dem diese Dateien gehostet werden, ist unterschiedlich (.com
und .net
):
[{ "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"] } }]
JSON-Bestätigungsdatei veröffentlichen
Sie müssen Ihre JSON-Bestätigungsdatei an folgendem Ort veröffentlichen:
https://domain.name/.well-known/assetlinks.json
Achten Sie auf Folgendes:
- Die Datei
assetlinks.json
wird mit dem Inhaltstyp bereitgestellt.application/json
. - Die Datei
assetlinks.json
muss über eine HTTPS-Verbindung zugänglich sein. unabhängig davon, ob die Intent-Filter Ihrer App HTTPS als Datenschema deklarieren. - Auf die
assetlinks.json
-Datei muss ohne Weiterleitungen zugegriffen werden können (keine 301- oder 302-Weiterleitungen). - Wenn deine App-Links mehrere Hostdomains unterstützen, musst du die
assetlinks.json
-Datei pro Domain. Weitere Informationen finden Sie unter App-Verknüpfung für mehrere Hosts unterstützen. - Veröffentlichen Sie Ihre App nicht mit Entwicklungs-/Test-URLs in der Manifestdatei, die möglicherweise für die Öffentlichkeit zugänglich sein, z. B. solche, die nur über ein VPN zugänglich sind. A Behelfslösung in solchen Fällen besteht darin, den Build Varianten, um eine andere Manifestdatei für Entwicklungs-Builds zu generieren.
Bestätigung von Android-App-Links
Wenn android:autoVerify="true"
in mindestens einem Intent-Filter Ihrer App vorhanden ist, werden die Hosts, die mit den URLs in den Intent-Filtern Ihrer App verknüpft sind, automatisch vom System überprüft, wenn Ihre App auf einem Gerät mit Android 6.0 (API-Level 23) oder höher installiert wird. Unter Android 12 und höher
Sie können den Überprüfungsprozess auch manuell starten,
die Überprüfungslogik testen.
Automatische Bestätigung
Die automatische Überprüfung des Systems umfasst Folgendes:
- Das System prüft alle Intent-Filter, die eines der folgenden Elemente enthalten:
- Aktion:
android.intent.action.VIEW
- Kategorien:
android.intent.category.BROWSABLE
undandroid.intent.category.DEFAULT
- Datenschema:
http
oderhttps
- Aktion:
- Für jeden eindeutigen Hostnamen, der in den oben genannten Intent-Filtern gefunden wird, sucht Android auf den entsprechenden Websites nach der Datei „Digital Asset Links“ unter
https://hostname/.well-known/assetlinks.json
.
Nachdem Sie die Liste der Websites bestätigt haben, die mit Ihrer App verknüpft werden sollen, und Sie sich vergewissert haben, dass die gehostete JSON-Datei gültig ist, installieren Sie die App auf Ihrem . Warten Sie mindestens 20 Sekunden, bis die asynchrone Bestätigung abgeschlossen ist. Überprüfen Sie mit dem folgenden Befehl, ob das System Ihre und die richtigen Richtlinien für die Linkverarbeitung festlegen:
adb shell am start -a android.intent.action.VIEW \ -c android.intent.category.BROWSABLE \ -d "http://domain.name:optional_port"
Manuelle Bestätigung
Ab Android 12 können Sie Domain manuell aufrufen für eine App, die auf einem Gerät installiert ist. Sie können Folgendes ausführen: unabhängig davon, ob deine App auf Android 12 ausgerichtet ist.
Internetverbindung herstellen
Damit die Domainbestätigung durchgeführt werden kann, muss Ihr Testgerät mit dem Internet.
Den aktualisierten Domainbestätigungsprozess unterstützen
Wenn deine App auf Android 12 oder höher ausgerichtet ist, verwendet das System die automatisch aktualisiert.
Andernfalls können Sie den aktualisierten Bestätigungsprozess manuell aktivieren. Führen Sie dazu in einem Terminalfenster den folgenden Befehl aus:
adb shell am compat enable 175408749 PACKAGE_NAME
Status von Android-App-Links auf einem Gerät zurücksetzen
Bevor Sie die Domainbestätigung auf einem Gerät manuell aufrufen, müssen Sie den Status von Android-App-Links auf dem Testgerät. Führen Sie dazu folgenden Befehl aus: -Befehl in einem Terminalfenster:
adb shell pm set-app-links --package PACKAGE_NAME 0 all
Durch diesen Befehl wird das Gerät in den Zustand versetzt, in dem es sich vor dem Nutzer befindet Standard-Apps für alle Domains auswählt.
Domainbestätigungsprozess aufrufen
Nachdem Sie den Status von Android-App-Links auf einem Gerät zurückgesetzt haben, können Sie Überprüfung selbst. Führen Sie dazu den folgenden Befehl in einem Terminalfenster aus:
adb shell pm verify-app-links --re-verify PACKAGE_NAME
Ergebnisse der Überprüfung prüfen
Nachdem der Verifizierungs-Agent einige Zeit gewartet hat, um seine Anfragen abzuschließen, überprüfen Sie die Ergebnisse der Überprüfung. Führen Sie dazu den folgenden Befehl aus:
adb shell pm get-app-links PACKAGE_NAME
Die Ausgabe dieses Befehls sieht in etwa so aus:
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
Die Domains, die die Bestätigung bestehen, haben einen Domainbestätigungsstatus.
von verified
. Bei jedem anderen Status konnte die Domainbestätigung nicht durchgeführt werden. Der Status none
bedeutet insbesondere, dass die Bestätigung
Der Agent hat den Bestätigungsprozess möglicherweise noch nicht abgeschlossen.
In der folgenden Liste sind die möglichen Rückgabewerte aufgeführt, die bei der Domainbestätigung für eine bestimmte Domain zurückgegeben werden können:
none
- Für diese Domain wurde nichts aufgezeichnet. Warten Sie noch ein paar Minuten, bis die Bestätigungs-Agent, um die Anfragen zur Domainbestätigung abzuschließen. den Prozess zur Domainbestätigung noch einmal aufrufen.
verified
- Die Domain wurde für die deklarierende App bestätigt.
approved
- Die Genehmigung der Domain wurde erzwungen, in der Regel durch Ausführen eines Shell-Befehls.
denied
- Die Domain wurde erzwungen, in der Regel durch Ausführen eines Shell-Befehls.
migrated
- Das Ergebnis eines früheren Prozesses, bei dem die alte Domain verwendet wurde, wurde im System beibehalten Überprüfung.
restored
- Die Domain wurde genehmigt, nachdem der Nutzer eine Datenwiederherstellung durchgeführt hat. Es wird angenommen, dass die Domain bereits bestätigt wurde.
legacy_failure
- Die Domain wurde von einem alten Prüfer abgelehnt. Der genaue Grund für den Fehler ist unbekannt.
system_configured
- Die Domain wurde von der Gerätekonfiguration automatisch genehmigt.
- Fehlercode:
1024
oder höher Benutzerdefinierter Fehlercode, der für den Prüfer des Geräts spezifisch ist.
Vergewissern Sie sich, dass Sie ein Netzwerk eingerichtet haben, Verbindung und rufen Sie die Domain auf. noch einmal prüfen.
Nutzer auffordern, Ihre Anwendung mit einer Domain zu verknüpfen
Eine weitere Möglichkeit, wie Ihre App für eine Domain genehmigt werden kann, besteht darin, den Nutzer zu bitten, Ihre App mit dieser Domain zu verknüpfen.
Prüfen, ob Ihre App bereits für die Domain genehmigt wurde
Bevor Sie den Nutzer auffordern, prüfen Sie, ob Ihre App der Standard-Handler für
Die Domains, die du in deinen <intent-filter>
-Elementen definiert hast. Sie können den Genehmigungsstatus mit einer der folgenden Methoden abfragen:
- Die
DomainVerificationManager
API (zur Laufzeit) - Ein Befehlszeilenprogramm (während des Tests).
DomainVerificationManager
Das folgende Code-Snippet zeigt, wie das Tag
DomainVerificationManager
-API:
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); } }
Befehlszeilenprogramm
Wenn Sie Ihre App während der Entwicklung testen, können Sie den folgenden Befehl ausführen, den Bestätigungsstatus der Domains abfragen, die Ihrer Organisation gehören:
adb shell pm get-app-links --user cur PACKAGE_NAME
In der folgenden Beispielausgabe sehen Sie, dass die App die Prüfung für den „beispiel.de“ Domain hat Nutzer 0 die App manuell in den Systemeinstellungen genehmigt, und kein anderes Paket für diese Domain bestätigt wird.
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
Sie können auch Shell-Befehle verwenden, um den Vorgang zu simulieren, bei dem der Nutzer auswählt, welche App mit einer bestimmten Domain verknüpft ist. Eine vollständige Erklärung dieser
stehen in der Ausgabe von adb shell pm
zur Verfügung.
Geben Sie den Kontext für die Anfrage an
Bevor Sie die Domaingenehmigung beantragen, sollten Sie dem Nutzer etwas Kontext geben. Beispielsweise könnten Sie ihnen einen Ladebildschirm, ein Dialogfeld oder Ähnliches zeigen. UI-Element, das dem Nutzer erklärt, warum Ihre App der Standard-Handler sein sollte für eine bestimmte Domain.
Anfrage stellen
Nachdem der Nutzer verstanden hat, worum er von Ihrer App gebeten wird, stellen Sie die Anfrage.
Rufen Sie dazu einen Intent auf, der den
ACTION_APP_OPEN_BY_DEFAULT_SETTINGS
Intent-Aktion und ein Datenstringabgleich
package:com.example.pkg
für die Ziel-App, wie in
das folgende Code-Snippet:
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);
Wenn die Intent aufgerufen wird, sehen Nutzer den Einstellungsbildschirm Standardmäßig öffnen. Hier sehen Sie ein Optionsfeld Unterstützte Links öffnen. wie in Abbildung 1 dargestellt.
Wenn der Nutzer Unterstützte Links öffnen aktiviert, werden mehrere Kästchen angezeigt. im Abschnitt Links, die in dieser App geöffnet werden sollen. Hier können Nutzer und wählen Sie die Domains aus, die Sie mit Ihrer Anwendung verknüpfen möchten. Sie können auch Wählen Sie Link hinzufügen aus, um Domains hinzuzufügen (siehe Abbildung 2). Wenn Nutzer später einen beliebigen Link in den hinzugefügten Domains auswählen, wird der Link in Ihrer App geöffnet. automatisch.
Domains in Ihrer Anwendung öffnen, die von Ihrer Anwendung nicht bestätigt werden können
Die Hauptfunktion Ihrer App besteht möglicherweise darin, Links als Dritte zu öffnen, ohne die die Möglichkeit, die verarbeiteten Domains zu bestätigen. Erklären Sie den Nutzern in diesem Fall, dass sie beim Auswählen eines Weblinks nicht zwischen einer App des Unternehmens und Ihrer App (Drittanbieter) wählen können. Nutzer müssen die Domains manuell mit Ihrer Drittanbieter-App verknüpfen.
Sie können auch Dialoge oder Trampolinübungen ob der Nutzer den Link in der Erstanbieter-App öffnen möchte, als Bevollmächtigter handelt. Bevor Sie eine solche Dialog- oder Trampolinaktivität einrichten, Richten Sie Ihre App so ein, dass sie Paketsichtbarkeit hat. Erstanbieter-Apps, die dem Web Intent-Filter Ihrer App entsprechen.
App-Links testen
Bei der Implementierung der App-Verknüpfungsfunktion sollten Sie die Verknüpfungsfunktion für dass das System Ihre App mit Ihren Websites verknüpfen und URL-Anfragen verarbeiten kann. wie erwartet.
Zum Testen einer vorhandenen Anweisungsdatei können Sie die Methode Statement List Generator und Tester.
Liste der zu bestätigenden Hosts bestätigen
Prüfen Sie beim Testen die Liste der verknüpften Hosts, die das System für Ihre App überprüfen soll. Erstellen Sie eine Liste aller URLs, deren entsprechende Intent-Filter die folgenden Attribute und Elemente enthalten:
- Attribut
android:scheme
mit dem Werthttp
oderhttps
- Attribut
android:host
mit einem Domain-URL-Muster android.intent.action.VIEW
Aktionselement- Kategorieelement „
android.intent.category.BROWSABLE
“
Anhand dieser Liste können Sie prüfen, ob auf jedem benannten Host eine Digital Asset Links-JSON-Datei bereitgestellt wird und Subdomain.
Digital Asset Links-Dateien bestätigen
Verwende für jede Website die Digital Asset Links API, um zu prüfen, ob die Digital Asset Links-JSON-Datei -Datei ordnungsgemäß gehostet und definiert ist:
https://digitalassetlinks.googleapis.com/v1/statements:list? source.web.site=https://domain.name:optional_port& relation=delegate_permission/common.handle_all_urls
Linkrichtlinien prüfen
Im Rahmen des Testverfahrens kannst du die aktuellen Systemeinstellungen für die Linkverarbeitung überprüfen. Verwenden Sie den folgenden Befehl, um eine Liste der vorhandenen Richtlinien zur Linkbehandlung für alle Apps auf Ihrem verbundenen Gerät:
adb shell dumpsys package domain-preferred-apps
Oder Sie können auch so vorgehen:
adb shell dumpsys package d
Hinweis: Warten Sie nach der Installation Ihrer App mindestens 20 Sekunden, damit das System die Überprüfung abschließen kann.
Der Befehl gibt eine Liste aller auf dem Gerät definierten Nutzer oder Profile zurück. vorangestelltem Header im folgenden Format:
App linkages for user 0:
Nach diesem Header wird in der Ausgabe das folgende Format verwendet, um die Einstellungen für die Linkverarbeitung aufzulisten. für diesen Nutzer:
Package: com.android.vending Domains: play.google.com market.android.com Status: always : 200000002
Diese Liste gibt an, welche Apps mit welchen Domains des jeweiligen Nutzers verknüpft sind:
Package
– Identifiziert eine App anhand ihres Paketnamens, wie im Manifest angegeben.Domains
: Zeigt die vollständige Liste der Hosts an, deren Weblinks von dieser App verarbeitet werden, mithilfe von Leerzeichen als Trennzeichen.Status
: Zeigt die aktuelle Einstellung für die Linkverarbeitung für diese App an. Eine App mit die Überprüfung bestanden hat und deren Manifestandroid:autoVerify="true"
enthält, wird der Status angezeigt. vonalways
. Die Hexadezimalzahl nach diesem Status bezieht sich auf die die Präferenzen der Nutzenden für die App-Verknüpfung. Dieser Wert gibt nicht an, ob die Bestätigung erfolgreich war.
Hinweis:Wenn ein Nutzer die App-Link-Einstellungen für eine App vor der Bestätigung ändert abgeschlossen ist, wird für eine erfolgreiche Überprüfung möglicherweise ein falsch positives Ergebnis angezeigt, obwohl Bestätigung fehlgeschlagen. Diese fehlgeschlagene Bestätigung spielt jedoch keine Rolle, hat die App explizit aktiviert, um unterstützte Links ohne Nachfrage zu öffnen. Das liegt daran, dass die Nutzereinstellungen Vorrang vor der programmatischen Überprüfung (oder dem Fehlen einer solchen) haben. Daher gelangen Sie über diesen Link direkt zu Ihrer App, ohne dass ein Dialogfeld angezeigt wird, als ob bei der Bestätigung erfolgreich war.
Testbeispiel
Damit App-Links bestätigt werden können, muss das System Ihre App mit jeder der folgenden Die Websites, die Sie in einem bestimmten Intent-Filter angeben, der die Kriterien für App erfüllt Links. Das folgende Beispiel zeigt eine Manifestkonfiguration mit mehreren definierten App-Links:
<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>
Die Liste der Hosts, die die Plattform anhand des obigen Manifests bestätigen würde, lautet:
www.example.com mobile.example.com www.example2.com account.example.com
Die Liste der Hosts, die die Plattform nicht anhand des obigen Manifests überprüfen würde, lautet:
map.example.com (it does not have android.intent.category.BROWSABLE) market://example.com (it does not have either an "http" or "https" scheme)
Weitere Informationen zu Anweisungslisten finden Sie unter Erstellen einer Anweisungsliste.
Häufige Implementierungsfehler beheben
Wenn Sie Ihre Android-App-Links nicht bestätigen können, prüfen Sie Folgendes:
Fehler. In diesem Abschnitt wird example.com
als Platzhalter-Domainname verwendet. wann
diese Prüfungen durchführen, ersetzen Sie example.com
durch den tatsächlichen
Domain-Namen eingeben.
- Falsche Einrichtung des Intent-Filters
- Prüfe, ob du eine URL, die nicht zu deiner App gehört, in einer
<intent-filter>
-Element. - Falsche Serverkonfiguration
Prüfen Sie die JSON-Konfiguration Ihres Servers und achten Sie darauf, dass der SHA-Wert richtig.
Prüfen Sie außerdem, ob für
example.com.
(mit dem Punkt) dieselben Werte ausgegeben werden. Inhalte alsexample.com
anzeigen.- Serverseitige Weiterleitungen
Das System überprüft keine Android-App-Links für Ihre App, wenn Sie eine Weiterleitung wie die folgende:
http://example.com
bishttps://example.com
example.com
biswww.example.com
Dieses Verhalten dient dem Schutz Ihrer App.
- Serverstabilität
Prüfen Sie, ob der Server eine Verbindung zu Ihren Client-Apps herstellen kann.
- Nicht überprüfbare Links
Zu Testzwecken können Sie absichtlich nicht überprüfbare Links hinzufügen. Notizen Beachten Sie, dass diese Links unter Android 11 und niedriger nicht alle Android-App-Links für Ihre App bestätigen.
- Falsche Signatur in assetlinks.json
Prüfen Sie, ob Ihre Unterschrift korrekt ist und mit der Unterschrift übereinstimmt, die zum Signieren Ihrer App verwendet wurde. Häufige Fehler:
- App mit einem Debug-Zertifikat signieren und nur den Release haben
Signatur in
assetlinks.json
. - Eine Signatur in Kleinbuchstaben in
assetlinks.json
. Die Signatur sollte in Großbuchstaben. - Wenn Sie die Play App-Signatur verwenden, achten Sie darauf, dass Sie die Signatur verwenden. mit dem Google jeden deiner Veröffentlichungen signiert. Sie können diese Details, einschließlich eines vollständigen JSON-Snippets, überprüfen. Folgen Sie dazu der Anleitung zum Deklarieren von Websiteverknüpfungen.
- App mit einem Debug-Zertifikat signieren und nur den Release haben
Signatur in