Ein Android-App-Link ist eine spezielle Art von Deeplink, mit der die entsprechenden Inhalte in Ihrer Android-App sofort über Ihre Website-URLs geöffnet werden können, ohne dass der Nutzer die App auswählen muss. Android-App-Links verwenden die Digital Asset Links API, um zu bestätigen, dass Ihre App von der Website genehmigt wurde, Links für diese Domain automatisch zu öffnen. Wenn das System bestätigt, dass Sie Inhaber der URLs sind, werden diese URL-Intents automatisch an Ihre App weitergeleitet.
So bestätigen Sie, dass Sie Inhaber sowohl Ihrer App als auch der Website-URLs sind:
Fügen Sie Intent-Filter hinzu, die das
autoVerify
-Attribut enthalten. Dieses Attribut signalisiert dem System, dass geprüft werden soll, ob Ihre App zu den URL-Domains gehört, die in Ihren Intent-Filtern verwendet werden.Deklarieren Sie die Verknüpfung zwischen Ihrer Website und Ihren Intent-Filtern, indem Sie eine Digital Asset Links-JSON-Datei an folgendem Speicherort hosten:
https://domain.name/.well-known/assetlinks.json
Weitere Informationen finden Sie in den folgenden Ressourcen:
Intent-Filter für die Überprüfung von App-Links hinzufügen
Wenn Sie die Überprüfung der Linkverwaltung für Ihre App aktivieren möchten, fügen Sie Intent-Filter hinzu, die dem folgenden Format entsprechen:
<!-- 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>
Es reicht aus, autoVerify
nur in einer <intent-filter>
-Deklaration für jeden Host anzugeben, auch wenn dieser Host in anderen nicht gekennzeichneten Deklarationen verwendet wird. Wir empfehlen jedoch, autoVerify
jedem <intent-filter>
-Element hinzuzufügen, um für Einheitlichkeit zu sorgen. So wird auch sichergestellt, dass Ihre App nach dem Entfernen oder Umstrukturieren von Elementen in der Manifestdatei weiterhin mit allen von Ihnen definierten Domains verknüpft bleibt.
Für die Domainbestätigung ist eine Internetverbindung erforderlich und der Vorgang kann einige Zeit dauern. Um die Effizienz des Prozesses zu verbessern, prüft das System eine Domain für eine App, die auf Android 12 oder höher ausgerichtet ist, nur dann, wenn sich diese Domain in einem <intent-filter>
-Element befindet, das genau das im vorherigen Code-Snippet angegebene Format enthält.
Andere Protokolle als „http“ und „https“, z. B. <data android:scheme="custom" />
, verhindern, dass ein <intent-filter>
die Domainbestätigung auslöst.
App-Verknüpfung für mehrere Hosts unterstützen
Das System muss den in den Datenelementen der URL-Intent-Filter der App angegebenen Host anhand der Digital Asset Links-Dateien überprüfen können, die auf den jeweiligen Webdomains in diesem Intent-Filter gehostet werden. Wenn die Überprüfung fehlschlägt, greift das System auf das Standardverhalten zurück, um die Absicht zu lösen, wie unter Deeplinks zu App-Inhalten erstellen beschrieben. Die App kann jedoch weiterhin als Standard-Handler für alle URL-Muster bestätigt werden, die in den anderen Intent-Filtern der App definiert sind.
Hinweis:Unter Android 11 (API-Level 30) und niedriger wird Ihre App vom System nur dann als Standard-Handler überprüft, wenn eine übereinstimmende Digital Asset Links-Datei für alle Hosts gefunden wird, die Sie im Manifest definieren.
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 Varianten der kombinierten Attribute zu berücksichtigen. Der erste Intent-Filter oben enthält beispielsweise ein <data>
-Element, das nur das HTTPS-Schema deklariert. Es wird jedoch mit dem anderen <data>
-Element kombiniert, sodass der Intent-Filter sowohl http://www.example.com
als auch https://www.example.com
unterstützt.
Daher müssen Sie separate Intent-Filter erstellen, wenn Sie bestimmte Kombinationen von URI-Schemas und Domains definieren möchten.
Unterstützung der App-Verknüpfung für mehrere Subdomains
Das Digital Asset Links-Protokoll behandelt Subdomains in Ihren Intent-Filtern als eindeutige, separate Hosts. Wenn Ihr Intent-Filter also mehrere Hosts mit verschiedenen Subdomains enthält, müssen Sie für jede Domain eine gültige assetlinks.json
veröffentlichen. Der folgende Intent-Filter enthält beispielsweise www.example.com
und mobile.example.com
als zulässige Intent-URL-Hosts. Ein gültiger assetlinks.json
muss also sowohl unter https://www.example.com/.well-known/assetlinks.json
als auch unter https://mobile.example.com/.well-known/assetlinks.json
veröffentlicht werden.
<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 mit einem Platzhalter (z. B. *.example.com
) angeben, müssen Sie die assetlinks.json
-Datei unter dem Stamm-Hostnamen (example.com
) veröffentlichen. Beispiel: Eine App mit dem folgenden Intent-Filter besteht die Überprüfung für jeden Unternamen von example.com
(z. B. foo.example.com
), solange die assetlinks.json
-Datei unter https://example.com/.well-known/assetlinks.json
veröffentlicht ist:
<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 alle erfolgreich bestätigt werden. Wenn die Apps jedoch den exakt gleichen Domainhost und Pfad auflösen können, wie es bei Lite- und Vollversionen einer App der Fall sein kann, kann nur die App, die zuletzt installiert wurde, Webintents für diese Domain auflösen.
Prüfen Sie in einem solchen Fall, ob auf dem Gerät des Nutzers möglicherweise Apps in Konflikt stehen, sofern Sie die erforderliche Paketsichtbarkeit haben. Zeigen Sie dann in Ihrer App ein benutzerdefiniertes Auswahldialogfeld mit den Ergebnissen des Aufrufs von queryIntentActivities()
an.
Der Nutzer kann die gewünschte App aus der Liste der übereinstimmenden Apps auswählen, die im Dialogfeld angezeigt werden.
Websiteverknüpfungen deklarieren
Auf Ihrer Website muss eine Digital Asset Links-JSON-Datei veröffentlicht werden, um die mit der Website verknüpften Android-Apps anzugeben und die URL-Intents der App zu bestätigen. In der JSON-Datei werden die folgenden Felder verwendet, um zugehörige Apps zu identifizieren:
package_name
: Die Anwendungs-ID, die in derbuild.gradle
-Datei der App deklariert ist.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 verschiedener Versionen Ihrer App verwendet werden können, 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, stimmt der Zertifikatsfingerabdruck, der durch lokales Ausführen von
keytool
generiert wird, in der Regel nicht mit dem auf den Geräten der Nutzer überein. Ob Sie die Play App-Signatur für Ihre App verwenden, können Sie in Ihrem Play Console-Entwicklerkonto unterRelease > Setup > App signing
prüfen. Wenn ja, finden Sie auf derselben Seite auch das richtige Digital Asset Links-JSON-Snippet für Ihre App.
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"] } }]
Website mit mehreren Apps verknüpfen
Eine Website kann Verknüpfungen mit mehreren Apps in derselben assetlinks.json
-Datei deklarieren. 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"] } }]
Unterschiedliche Apps können Links für verschiedene Ressourcen unter demselben Webhost verarbeiten. Beispiel: App 1 kann einen Intent-Filter für https://example.com/articles
und App 2 einen Intent-Filter für https://example.com/videos
deklarieren.
Hinweis:Mehrere mit einer Domain verknüpfte Apps können mit denselben oder verschiedenen Zertifikaten signiert sein.
Mehrere Websites mit einer App verknüpfen
Mehrere Websites können in ihren jeweiligen assetlinks.json
-Dateien Verknüpfungen mit derselben App deklarieren. 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 beispiel.de 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
assetlinks.json
-Datei wird mit dem Inhaltstypapplication/json
bereitgestellt. - Auf die
assetlinks.json
-Datei muss über eine HTTPS-Verbindung zugegriffen werden können, unabhängig davon, ob im Intent-Filter Ihrer App HTTPS als Datenschema angegeben ist. - Auf die
assetlinks.json
-Datei muss ohne Weiterleitungen zugegriffen werden können (keine 301- oder 302-Weiterleitungen). - Wenn Ihre App-Links mehrere Hostdomains unterstützen, müssen Sie die
assetlinks.json
-Datei auf jeder Domain veröffentlichen. 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 nicht öffentlich zugänglich sind (z. B. nur mit einem VPN). In solchen Fällen können Sie Buildvarianten konfigurieren, um eine andere Manifestdatei für Dev-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, bei der Installation Ihrer App auf einem Gerät mit Android 6.0 (API-Level 23) oder höher automatisch vom System überprüft. Unter Android 12 und höher können Sie die Bestätigung auch manuell starten, um die Bestätigungslogik zu testen.
Automatische Bestätigung
Die automatische Überprüfung des Systems umfasst Folgendes:
- Das System prüft alle Intent-Filter, die Folgendes 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 die gehostete JSON-Datei gültig ist, installieren Sie die App auf Ihrem Gerät. Warten Sie mindestens 20 Sekunden, bis die asynchrone Bestätigung abgeschlossen ist. Mit dem folgenden Befehl können Sie prüfen, ob das System Ihre App überprüft und die richtigen Richtlinien für die Linkverwaltung festgelegt hat:
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 die Domainbestätigung für eine App, die auf einem Gerät installiert ist, manuell aufrufen. Sie können diesen Vorgang unabhängig davon ausführen, ob Ihre App auf Android 12 ausgerichtet ist.
Internetverbindung herstellen
Damit die Domainbestätigung durchgeführt werden kann, muss Ihr Testgerät mit dem Internet verbunden sein.
Aktualisierten Domainbestätigungsprozess unterstützen
Wenn Ihre App auf Android 12 oder höher ausgerichtet ist, verwendet das System automatisch den aktualisierten Domainbestätigungsprozess.
Andernfalls können Sie den aktualisierten Bestätigungsvorgang 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 der Android App-Links auf dem Testgerät zurücksetzen. Führen Sie dazu den folgenden Befehl in einem Terminalfenster aus:
adb shell pm set-app-links --package PACKAGE_NAME 0 all
Mit diesem Befehl wird das Gerät in den Zustand versetzt, in dem es sich befand, bevor der Nutzer Standard-Apps für eine Domain ausgewählt hat.
Domainbestätigungsprozess starten
Nachdem Sie den Status von Android App-Links auf einem Gerät zurückgesetzt haben, können Sie die Bestätigung selbst durchführen. 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 Mitarbeiter für die Überprüfung seine Anfragen abgeschlossen hat, können Sie die Ergebnisse prüfen. 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
Domains, die die Bestätigung bestehen, haben den Status „verified
“. Bei jedem anderen Status konnte die Domainbestätigung nicht durchgeführt werden. Insbesondere bedeutet der Status none
, dass der Kundenservicemitarbeiter den Bestätigungsprozess möglicherweise noch nicht abgeschlossen hat.
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 einige Minuten, bis der Bestätigungsagent die Anfragen im Zusammenhang mit der Domainbestätigung abgeschlossen hat, und rufen Sie den Domainbestätigungsprozess noch einmal auf.
verified
- Die Domain wurde für die deklarierende App bestätigt.
approved
- Die Domain wurde erzwungen genehmigt, in der Regel durch Ausführen eines Shell-Befehls.
denied
- Die Domain wurde erzwungen abgelehnt, in der Regel durch Ausführen eines Shell-Befehls.
migrated
- Das System hat das Ergebnis eines vorherigen Prozesses beibehalten, bei dem die bisherige Domainbestätigung verwendet wurde.
restored
- Die Domain wurde genehmigt, nachdem der Nutzer eine Datenwiederherstellung durchgeführt hatte. Es wird davon ausgegangen, dass die Domain bereits bestätigt wurde.
legacy_failure
- Die Domain wurde von einem alten Verifier abgelehnt. Der genaue Grund für den Fehler ist unbekannt.
system_configured
- Die Domain wurde automatisch von der Gerätekonfiguration genehmigt.
- Fehlercode
1024
oder höher Benutzerdefinierter Fehlercode, der für den Verifier des Geräts spezifisch ist.
Prüfen Sie noch einmal, ob Sie eine Netzwerkverbindung hergestellt haben, und starten Sie den Domainbestätigungsprozess noch einmal.
Nutzer bitten, Ihre App 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 ist, die Sie in Ihren <intent-filter>
-Elementen definieren. Sie können den Genehmigungsstatus mit einer der folgenden Methoden abfragen:
- Die
DomainVerificationManager
API (während der Laufzeit) - Ein Befehlszeilenprogramm (während des Tests)
DomainVerificationManager
Im folgenden Code-Snippet wird die Verwendung der DomainVerificationManager
API veranschaulicht:
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 mit dem folgenden Befehl den Überprüfungsstatus der Domains abfragen, die Ihrer Organisation gehören:
adb shell pm get-app-links --user cur PACKAGE_NAME
In der folgenden Beispielausgabe wurde die App zwar nicht für die Domain „beispiel.de“ bestätigt, Nutzer 0 hat sie aber in den Systemeinstellungen manuell genehmigt und kein anderes Paket ist für diese Domain bestätigt.
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 Befehle findest du in der Ausgabe von adb shell pm
.
Kontext für die Anfrage angeben
Bevor Sie die Domaingenehmigung beantragen, sollten Sie dem Nutzer etwas Kontext geben. Sie können beispielsweise einen Startbildschirm, ein Dialogfeld oder ein ähnliches UI-Element anzeigen, in dem den Nutzern erklärt wird, warum Ihre App der Standard-Handler für eine bestimmte Domain sein sollte.
Anfrage senden
Nachdem der Nutzer verstanden hat, was von ihm in Ihrer App verlangt wird, können Sie die Anfrage stellen.
Rufen Sie dazu einen Intent mit der Intent-Aktion ACTION_APP_OPEN_BY_DEFAULT_SETTINGS
und einem Datenstring auf, der mit package:com.example.pkg
für die Ziel-App übereinstimmt, wie im folgenden Code-Snippet gezeigt:
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. Dieser Bildschirm enthält das Optionsfeld Unterstützte Links öffnen, wie in Abbildung 1 dargestellt.
Wenn der Nutzer Unterstützte Links öffnen aktiviert, werden unter dem Abschnitt In dieser App zu öffnende Links eine Reihe von Kästchen angezeigt. Hier können Nutzer die Domains auswählen, die sie mit Ihrer App verknüpfen möchten. Sie können auch Link hinzufügen auswählen, um Domains hinzuzufügen, wie in Abbildung 2 dargestellt. Wenn Nutzer später einen Link innerhalb der hinzugefügten Domains auswählen, wird der Link automatisch in Ihrer App geöffnet.
In Ihrer App geöffnete Domains, die Ihre App nicht überprüfen kann
Die Hauptfunktion Ihrer App besteht möglicherweise darin, Links als Drittanbieter zu öffnen, ohne dass die verwalteten Domains überprüft werden können. In diesem Fall müssen Sie Nutzern erklären, dass sie beim Auswählen eines Weblinks nicht zwischen einer App des Unternehmens und Ihrer App (einem Drittanbieter) wählen können. Nutzer müssen die Domains manuell mit Ihrer Drittanbieter-App verknüpfen.
Sie können auch einen Dialog oder eine Trampolin-Aktivität einrichten, mit der der Nutzer den Link in der App des Unternehmens öffnen kann, wenn er das bevorzugt. Bevor Sie eine solche Dialog- oder Trampolinaktivität einrichten, müssen Sie Ihre App so einrichten, dass sie Paketsichtbarkeit in den selbst gehosteten Apps hat, die mit dem Webintent-Filter Ihrer App übereinstimmen.
App-Links testen
Wenn Sie die App-Verknüpfungsfunktion implementieren, sollten Sie die Verknüpfungsfunktion testen, um sicherzustellen, dass das System Ihre App mit Ihren Websites verknüpfen und URL-Anfragen wie erwartet verarbeiten kann.
Zum Testen einer vorhandenen Kontoabrechnungsdatei können Sie das Tool Statement List Generator and Tester verwenden.
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:
android:scheme
-Attribut mit dem Werthttp
oderhttps
android:host
-Attribut mit einem Domain-URL-Musterandroid.intent.action.VIEW
-Aktionselementandroid.intent.category.BROWSABLE
-Element „Kategorie“
Anhand dieser Liste können Sie prüfen, ob für jeden angegebenen Host und jede Subdomain eine Digital Asset Links-JSON-Datei bereitgestellt wird.
Digital Asset Links-Dateien prüfen
Prüfen Sie für jede Website mit der Digital Asset Links API, ob die Digital Asset Links-JSON-Datei richtig 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
Richtlinien für Links prüfen
Im Rahmen des Testverfahrens können Sie die aktuellen Systemeinstellungen für die Linkverwaltung prüfen. Mit dem folgenden Befehl können Sie eine Liste der vorhandenen Richtlinien zur Linkverwaltung für alle Apps auf Ihrem verbundenen Gerät abrufen:
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 Bestätigung abschließen kann.
Der Befehl gibt eine Liste aller Nutzer oder Profile zurück, die auf dem Gerät definiert sind. Vorangestellt ist eine Überschrift im folgenden Format:
App linkages for user 0:
Nach dieser Überschrift werden in der Ausgabe die Einstellungen für die Linkbehandlung für diesen Nutzer im folgenden Format aufgeführt:
Package: com.android.vending Domains: play.google.com market.android.com Status: always : 200000002
In dieser Liste sehen Sie, welche Apps für diesen Nutzer mit welchen Domains verknüpft sind:
Package
– Identifiziert eine App anhand ihres Paketnamens, wie im Manifest angegeben.Domains
– Die vollständige Liste der Hosts, deren Weblinks von dieser App verarbeitet werden, wobei Leerzeichen als Trennzeichen verwendet werden.Status
: Die aktuelle Einstellung für die Linkverwaltung für diese App. Eine App, die die Überprüfung bestanden hat und deren Manifestandroid:autoVerify="true"
enthält, hat den Statusalways
. Die Hexadezimalzahl nach diesem Status bezieht sich auf den Eintrag der App-Verknüpfungseinstellungen des Nutzers im Android-System. Dieser Wert gibt nicht an, ob die Bestätigung erfolgreich war.
Hinweis:Wenn ein Nutzer die Einstellungen für den App-Link für eine App ändert, bevor die Überprüfung abgeschlossen ist, wird möglicherweise ein falsch positives Ergebnis für eine erfolgreiche Überprüfung angezeigt, obwohl die Überprüfung fehlgeschlagen ist. Dieser Bestätigungsfehler spielt jedoch keine Rolle, wenn der Nutzer der App ausdrücklich erlaubt hat, 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. Der Link führt dann direkt zu Ihrer App, ohne dass ein Dialogfeld angezeigt wird, als wäre die Überprüfung erfolgreich gewesen.
Testbeispiel
Damit die Bestätigung des App-Links erfolgreich ist, muss das System Ihre App mit jeder der Websites verifizieren können, die Sie in einem bestimmten Intent-Filter angeben, der die Kriterien für App-Links erfüllt. Das folgende Beispiel zeigt eine Manifestkonfiguration mit mehreren 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 bestätigen 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 Erklärungslisten finden Sie unter Erklärungsliste erstellen.
Häufige Implementierungsfehler beheben
Wenn Sie Ihre Android-App-Links nicht bestätigen können, prüfen Sie, ob einer der folgenden häufigen Fehler vorliegt. In diesem Abschnitt wird example.com
als Platzhalter für den Domainnamen verwendet. Ersetzen Sie example.com
bei diesen Prüfungen durch den tatsächlichen Domainnamen Ihres Servers.
- Falscher Intent-Filter eingerichtet
- Prüfen Sie, ob Sie in einem
<intent-filter>
-Element eine URL eingefügt haben, die nicht Ihrer App gehört. - Falsche Serverkonfiguration
Prüfe die JSON-Konfiguration deines Servers und achte darauf, dass der SHA-Wert korrekt ist.
Prüfen Sie außerdem, ob
example.com.
(mit dem abschließenden Punkt) denselben Inhalt wieexample.com
bereitstellt.- Serverseitige Weiterleitungen
Das System prüft keine Android-App-Links für Ihre App, wenn Sie eine Weiterleitung wie die folgende einrichten:
http://example.com
bishttps://example.com
example.com
biswww.example.com
Dadurch wird die Sicherheit Ihrer App geschützt.
- Serverrobustheit
Prüfen Sie, ob Ihr 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. Hinweis: Unter Android 11 und niedriger werden durch diese Links nicht alle Android-App-Links für Ihre App vom System geprüft.
- 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:
- Die App mit einem Debug-Zertifikat signieren und nur die Release-Signatur in
assetlinks.json
haben. - Die Unterschrift in
assetlinks.json
muss in Kleinbuchstaben geschrieben sein. Die Unterschrift muss in Großbuchstaben geschrieben sein. - Wenn Sie die Play App-Signatur verwenden, achten Sie darauf, dass Sie die Signatur verwenden, mit der Google jeden Ihrer Releases 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.
- Die App mit einem Debug-Zertifikat signieren und nur die Release-Signatur in