Intent-Filter für App-Links hinzufügen

App-Links sind Deeplinks, die das HTTP- oder HTTPS-Schema verwenden und von Android als mit Ihrer Website verknüpft bestätigt werden. So registrieren Sie Ihre App für die Verarbeitung von App-Links:

  1. Fügen Sie dem App-Manifest einen oder mehrere Intent-Filter hinzu, in denen die Domain oder URLs Ihrer Website angegeben werden.
  2. Fügen Sie autoVerify="true"attribute den Intent-Filterelementen hinzu. Dadurch wird dem System signalisiert, dass es versuchen soll, das Schema und die Hostdomains mit der assetlinks.json-Konfiguration Ihrer Website abzugleichen.
  3. Websiteverknüpfungen deklarieren

Das Folgende ist ein Beispiel für eine App-Link-Deklaration mit Schemas und Hosts sowie autoVerify="true:

<activity
    android:name=".MainActivity"
    android:exported="true"
    ...>
    <!-- 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 link that uses the "http" scheme, your
             app should be able to delegate that traffic to "https". -->
        <!-- Do not include other schemes, as this will prevent verification. -->
        <data android:scheme="http" />
        <data android:scheme="https" />

        <!-- Include one or more domains that should be verified. -->
        <data android:host="www.example.com" />
        <data android:host="*.example.com" />
    </intent-filter>
</activity>

Wichtige Punkte zum Code

  • AutoVerify: Das Attribut android:autoVerify="true“ ist für App-Links erforderlich. Es signalisiert dem System, dass es versuchen soll, die Verknüpfung zwischen Ihrer App und den in den <data>-Tags angegebenen Schemas und Domains zu bestätigen. Es wird empfohlen, jedem Intent-Filter, der überprüft werden soll, autoVerify="true hinzuzufügen.
  • Datenelemente: Jeder App-Links-Intent-Filter muss ein oder mehrere <data>-Elemente enthalten, in denen die Schemas und Hostformate angegeben sind, die mit Ihrer überprüfbaren Websitedomain übereinstimmen.
  • Schemes: Der Intent-Filter muss <data>-Elemente für die Schemas http und https enthalten.
  • Hosts: Optional können Sie <data>-Elemente hinzufügen, die mit einem oder mehreren Hosts übereinstimmen. Verwenden Sie einen Platzhalter (*), um mehrere Subdomains (z. B. *.example.com) abzugleichen. Das System versucht, jeden Host mit der Datei „assetlinks.json“ auf Ihrer Website zu verifizieren. Das Routing auf Pfadebene sollte über die Datei „assetlinks.json“ erfolgen (siehe den Abschnitt zu Best Practices unten).

  • Mehrere Hosts: Wenn Sie mehrere Hostdomains deklarieren, versucht das System (ab Android 12), jede einzelne zu bestätigen. Wenn ein Host bestätigt wird, wird die App zum Standard-Handler für Links von diesem bestätigten Host. Bei Android 11 und niedriger schlägt die Überprüfung fehl, wenn auch nur ein Host nicht überprüft werden kann.

  • Mehrere Intent-Filter: Wenn Sie eindeutige URLs (z. B. eine bestimmte Kombination aus Schema und Host) deklarieren möchten, ist es wichtig, separate Filter zu erstellen. Mehrere <data>-Elemente im selben Intent-Filter werden zusammengeführt, um alle Variationen ihrer kombinierten Attribute zu berücksichtigen.

Hinweise zu Manifestfilterregeln

Wenn Sie Filter für die Verwendung mit dynamischen App-Links in Android 15 und höher einrichten, müssen Sie beachten, dass die dynamischen Regeln, die in der serverseitigen Datei „assetlinks.json“ deklariert werden, den Umfang der URL-Regeln, die Sie statisch in Ihrem App-Manifest deklarieren, nicht erweitern können.

Aus diesem Grund empfehlen wir, so vorzugehen:

  • Legen Sie im App-Manifest den größtmöglichen Umfang fest, z. B. indem Sie nur das Schema und die Domain deklarieren.
  • Verlassen Sie sich auf die serverseitigen assetlinks.json-Regeln für weitere Optimierungen, z. B. das Routing auf Pfadebene.

Mit dieser idealen Konfiguration können Sie bei Bedarf dynamisch neue App-Link-Pfade in der Datei assetlinks.json hinzufügen, da sie in den breiten Bereich passen, den Sie im App-Manifest festgelegt haben.

App-Links 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 verifizieren können, die in 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 Intention aufzulösen, wie unter Deeplinks zu App-Inhalten erstellen beschrieben. Die App kann jedoch weiterhin als Standard-Handler für alle URL-Muster überprüft werden, die in den anderen Intent-Filtern der App definiert sind.

Eine App mit den folgenden Intent-Filtern würde die Überprüfung beispielsweise nur für https://www.example.com bestehen, 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 würde:

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

App-Verknüpfung für mehrere Subdomains unterstützen

Im Digital Asset Links-Protokoll werden Subdomains in Ihren Intent-Filtern als eindeutige, separate Hosts behandelt. Wenn in Ihrem Intent-Filter also mehrere Hosts mit unterschiedlichen Subdomains aufgeführt sind, müssen Sie auf jeder Domain eine gültige assetlinks.json veröffentlichen. Der folgende Intent-Filter enthält beispielsweise www.example.com und mobile.example.com als akzeptierte Intent-URL-Hosts. Eine gültige 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 deklarieren (z. B. *.example.com), müssen Sie die Datei assetlinks.json im Stamm-Hostname (example.com) veröffentlichen. Eine App mit dem folgenden Intent-Filter besteht beispielsweise die Bestätigung für jeden untergeordneten Namen von example.com (z. B. foo.example.com), sofern die Datei assetlinks.json unter https://example.com/.well-known/assetlinks.json veröffentlicht 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="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 denselben Domainhost und ‑pfad auflösen können, wie es bei Lite- und Vollversionen einer App der Fall sein kann, kann nur die zuletzt installierte App Web-Intents für diese Domain auflösen.

Prüfen Sie in einem solchen Fall, ob auf dem Gerät des Nutzers möglicherweise inkompatible Apps installiert sind, sofern Sie die erforderliche Paketsichtbarkeit haben. Zeigen Sie dann in Ihrer App ein benutzerdefiniertes Auswahlfeld mit den Ergebnissen des Aufrufs von queryIntentActivities an. Der Nutzer kann seine bevorzugte App aus der Liste der übereinstimmenden Apps auswählen, die im Dialogfeld angezeigt wird.