Android-App-Links prüfen

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:

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

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:

  1. 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 und android.intent.category.DEFAULT
    • Datenschema: http oder https
  2. 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:

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.

<ph type="x-smartling-placeholder">
</ph> 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.
<ph type="x-smartling-placeholder">
</ph> 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. 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 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 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

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

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