Ein Android-App-Link ist ein spezieller Deeplink, mit dem 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 Eigentümer der URLs sind, 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:
- Unterstützte URLs und App-Indexierung in Android Studio
- <ph type="x-smartling-placeholder"></ph> Anweisungsliste erstellen
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 Manifestdatei 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.
Beispiel: Eine App mit folgendem Intent
Filter bestehen die Überprüfung nur für https://www.example.com
eine assetlinks.json
-Datei unter
https://www.example.com/.well-known/assetlinks.json
, aber nicht
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>
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. Er wird aber 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 auf beiden Plattformen 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>
Nach mehreren Apps suchen, die mit derselben Domain verknüpft sind
Wenn Sie mehrere Apps veröffentlichen, die jeweils mit derselben Domain verknüpft sind, können alle erfolgreich überprüft 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.
Die folgende Beispieldatei assetlinks.json
gewährt einem
Android-App von 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"] } }]
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 Anweisungsdatei, die die Verknüpfung deklariert
zwei separate Apps und befinden sich
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"] } }]
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 folgende Datei enthält
ein Beispiel für die Deklaration der Verknüpfung von „beispiel.de“ und
example.net mit app1. Der erste Eintrag zeigt die Verknüpfung von example.com.
mit 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"] } }]
Der nächste Eintrag zeigt die Verknüpfung von beispiel.net mit app1. Nur die
Der Speicherort, an dem diese Dateien gehostet werden, unterscheidet sich (.com
und .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"] } }]
JSON-Bestätigungsdatei veröffentlichen
Sie müssen Ihre JSON-Bestätigungsdatei an folgendem Speicherort 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 Datei
assetlinks.json
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 Unterstützung von App-Verknüpfungen für mehrere Hosts - 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 der App vorhanden ist
Filter, um deine App auf einem Gerät mit Android 6.0 (API-Level 23) oder
höher ist, prüft das System automatisch die mit der
URLs in den Intent-Filtern Ihrer App. 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:
<ph type="x-smartling-placeholder">
- </ph>
- 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 obigen Intent-Filtern gefunden wird, werden Android-Abfragen
entsprechenden Websites für die Digital Asset Links-Datei 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 der asynchrone Bestätigungsprozess 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. Gehen Sie dazu wie folgt vor: Führen Sie den folgenden Befehl in einem Terminalfenster 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 seine Anfragen abgeschlossen hat, überprüfen Sie die Ergebnisse. 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
. Jeder andere Status bedeutet, dass die Domainbestätigung nicht möglich war
durchgeführt werden kann. 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 möglich sind: für eine bestimmte Domain zurückgeben:
none
- Für diese Domain wurden keine Aufzeichnungen 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. Die spezifische Fehlerursache 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 zur Genehmigung Ihrer App für eine Domain besteht darin, den Nutzer zu bitten, die App mit dieser Domain 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 abfragen,
den Genehmigungsstatus mithilfe einer der folgenden Methoden abrufen:
- 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 Prozess zu simulieren, bei dem der Nutzer
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, geben Sie Kontext für die Nutzer. 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 der Intent aufgerufen wird, sehen Nutzer einen Einstellungsbildschirm mit der Bezeichnung Open by Standardeinstellung. 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. Wenn dies der Fall ist, erläutere dies den Nutzenden dass sie dann, wenn sie einen Weblink auswählen, nicht zwischen einem eigene und die Drittanbieter-App. Nutzer müssen die Domains mit Ihrer Drittanbieter-App.
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 Sie es erwarten.
Zum Testen einer vorhandenen Anweisungsdatei können Sie die Methode <ph type="x-smartling-placeholder"></ph> Statement List Generator und Tester.
Liste der zu bestätigenden Hosts bestätigen
Beim Testen sollten Sie die Liste der verknüpften Hosts überprüfen, die vom System überprüft werden sollen für Ihre App. Erstellen Sie eine Liste aller URLs, deren entsprechende Intent-Filter Folgendes enthalten: Attribute und Elemente:
- 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 vorhanden ist -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 der folgende Befehl führt das Gleiche aus:
adb shell dumpsys package d
Hinweis:Warten Sie nach der Installation Ihrer App mindestens 20 Sekunden, um damit das System den Überprüfungsprozess 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
Dieser Eintrag gibt an, welche Apps mit welchen Domains des jeweiligen Nutzers verknüpft sind:
Package
: Identifiziert eine App anhand des 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, wurde in der App ausdrücklich das Öffnen unterstützter Links ohne Nachfrage aktiviert. Das liegt daran, Nutzereinstellungen haben Vorrang vor der programmatischen Überprüfung (oder wenn diese nicht angegeben wird). 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 überprüfen 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 <ph type="x-smartling-placeholder"></ph> 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
Vergewissern Sie sich, dass Ihre Signatur korrekt ist und mit der Signatur übereinstimmt, die zum Signieren verwendet wurde. für Ihre App. Zu den häufigsten Fehlern gehören:
- 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 überprüfen, einschließlich eines vollständigen JSON-Snippets, indem Sie der Anleitung Websiteverknüpfungen deklarieren
- App mit einem Debug-Zertifikat signieren und nur den Release haben
Signatur in