Android-App-Links prüfen

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:

  1. 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.

  2. 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 der build.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:
    keytool -list -v -keystore my-release-key.keystore
    
    Dieses Feld unterstützt mehrere Fingerabdrücke, die zur Unterstützung verschiedene Versionen Ihrer App zu testen, z. B. Debug- und Produktions-Builds.

    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 unter Release > 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:

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"]
  }
}]

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):

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 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:

  1. Das System prüft alle Intent-Filter, die eines der folgenden Elemente enthalten:
    • Aktion: android.intent.action.VIEW
    • Kategorien: android.intent.category.BROWSABLE und android.intent.category.DEFAULT
    • Datenschema: http oder https
  2. 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:

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.

Wenn das Optionsfeld aktiviert ist, erscheint unten
    enthält Kontrollkästchen sowie die Schaltfläche &quot;Link hinzufügen&quot;.
Abbildung 1. Bildschirm mit den Systemeinstellungen, auf dem Nutzer welche Links standardmäßig in deiner App geöffnet werden.
Jedes Kästchen entspricht einer Domain, die Sie hinzufügen können. Die
    Schaltflächen des Dialogfelds sind &quot;Abbrechen&quot;. und klicken Sie auf &quot;Hinzufügen&quot;.
Abbildung 2 Dialogfeld, in dem Nutzer zusätzliche Domains auswählen können die Sie mit Ihrer App verknüpfen können.

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 Wert http oder https
  • 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

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 Manifest android:autoVerify="true" enthält, wird der Status angezeigt. von always. 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 als example.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 bis https://example.com
  • example.com bis www.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.