Deeplinks erstellen

Mit Deeplinks können Sie Nutzer direkt von Webbrowsern, Benachrichtigungen, sozialen Medien, Anzeigen und anderen Quellen zu Ihrer App leiten. Deeplinks ermöglichen direkte Übergänge zwischen Apps und vom Web zur App. So können Sie die Interaktion durch kontextbezogene, zielgerichtete Inhalte steigern.

In dieser Anleitung wird erläutert, wie Deep-Linking funktioniert und wie Sie Deep-Links zu Ihren Inhalten erstellen und testen.

Für Deeplinks, die auf Ihre eigene Website oder Ihre eigenen Domains verweisen, empfehlen wir die Verwendung von App-Links, da diese Ihren Nutzern eine nahtlose und vertrauenswürdige Erfahrung bieten.

So funktionieren Deeplinks

Deep Linking ist eine allgemeine Systemfunktion von Android, die auf allen Versionen und allen Geräten unterstützt wird. Dabei wird das Intents-System von Android genutzt, um Deeplinks an die entsprechenden Apps weiterzuleiten. Apps, die einen bestimmten Deeplink-URI verarbeiten möchten, deklarieren einen entsprechenden Intent-Filter in ihren App-Manifestdateien.

Wenn der Nutzer zur Laufzeit auf einen Link tippt, löst Android eine Intent aus und versucht, sie an eine App weiterzuleiten. Da mehrere Apps Intent-Filter deklarieren können, die mit einer bestimmten URI übereinstimmen, führt Android die folgenden Aktionen in dieser Reihenfolge aus, um die Intent weiterzuleiten:

  1. Öffnen Sie die Standard-App des Nutzers, die den URI verarbeiten kann, sofern eine solche App festgelegt wurde.
  2. Öffnen Sie die einzige verfügbare App, die den URI verarbeiten kann.
  3. Dem Nutzer erlauben, eine App aus einem Dialogfeld zur Mehrdeutigkeit auszuwählen.

Das bedeutet, dass das System den Deeplink-Intent nicht unbedingt an Ihre App weiterleitet, auch wenn Ihre Intent-Filter mit einem bestimmten URI übereinstimmen. Der Nutzer spielt eine wichtige Rolle bei der Verwaltung der App, die den Intent verarbeitet. So hat er die Kontrolle und kann die App auswählen. Wenn Sie mehr Kontrolle über Deeplinks zu Ihrer eigenen Website und Ihren Domains haben möchten, können Sie App-Links verwenden.

Im Dialogfeld zur Mehrdeutigkeitsauflösung von Android werden dem Nutzer alle installierten Apps angezeigt, die für die Verarbeitung einer Deeplink-Intention registriert sind. Der Nutzer kann auch eine App als Standard für diesen Linktyp auswählen. Sobald der Nutzer eine Standardeinstellung festgelegt hat, wird das Dialogfeld für diesen bestimmten Intent nicht mehr angezeigt und die ausgewählte App wird automatisch geöffnet.

Abbildung 1: Dialogfeld zur Begriffsklärung

Das Verhalten des Dialogfelds zur Mehrdeutigkeitsauflösung hat sich in den verschiedenen Android-Versionen weiterentwickelt. Unter Android 12 und höher werden beispielsweise Web-Links, die keine bestätigten App-Links sind, standardmäßig in einem Webbrowser geöffnet. Bei früheren Versionen wurde möglicherweise ein Dialogfeld zur Auswahl angezeigt, wenn eine App den Web-Link verarbeiten konnte.

Hinweis: Ab Android 12 (API‑Level 31) wird ein allgemeiner Web-Intent nur dann zu einer Aktivität in Ihrer App aufgelöst, wenn Ihre App für die spezifische Domain genehmigt ist, die in diesem Web-Intent enthalten ist. Wenn Ihre App nicht für die Domain genehmigt ist, wird der Web-Intent stattdessen in der Standardbrowser-App des Nutzers aufgelöst.

Arten von Deeplinks

Es gibt drei Arten von Deeplinks, die Sie unter Android unterstützen können:

  • Benutzerdefinierte Deeplinks: Dies sind Deeplinks, die ein benutzerdefiniertes URI-Schema (z. B. example://products/123) verwenden, um einen Nutzer direkt zu bestimmten Inhalten in einer App weiterzuleiten. Sie eignen sich gut für die interne Navigation oder für Links aus Quellen, die Sie kontrollieren. Sie sind jedoch keine Standard-Weblinks und können weiterhin das Dialogfeld zur Auswahl der App auslösen, wenn eine andere App dasselbe benutzerdefinierte Schema registriert.
  • Weblinks: Das sind Deeplinks, die die Standardschemas http und https verwenden. Sie sind vielseitiger, da es sich um Standard-URLs handelt. Unter Android 12 und höher wird jedoch fast immer das Dialogfeld zur Mehrdeutigkeit ausgelöst. Das bedeutet, dass sie wahrscheinlich standardmäßig vom Webbrowser des Nutzers verarbeitet werden, anstatt an Ihre App weitergeleitet zu werden.
  • App-Links: Diese sind seit Android 6.0 (API-Level 23) verfügbar und bestätigte Weblinks. Durch die Verknüpfung Ihrer Website können Sie dem Android-System nachweisen, dass Sie Inhaber der Domain sind. Nach der Bestätigung leitet das System Links für diese Domain automatisch direkt zu Ihrer App weiter. Das Dialogfeld zur Mehrdeutigkeit wird dann nicht mehr angezeigt. So wird eine vertrauenswürdige und nahtlose Nutzung für Ihre Nutzer ermöglicht.

Intent-Filter für eingehende Links hinzufügen

Wenn Sie einen Link zu Ihren App-Inhalten erstellen möchten, fügen Sie Ihrem Manifest einen Intent-Filter hinzu, der die folgenden Elemente und Attributwerte enthält:

<action>

Geben Sie die Intent-Aktion ACTION_VIEW an, damit der Intent-Filter über die Google Suche erreicht werden kann.

<data>

Fügen Sie ein oder mehrere <data>-Tags hinzu, die jeweils ein URI-Format darstellen, das in die Aktivität aufgelöst wird. Das <data>-Tag muss mindestens das Attribut android:scheme enthalten.

Sie können weitere Attribute hinzufügen, um den URI-Typ, der von der Aktivität akzeptiert wird, weiter einzugrenzen. Sie haben beispielsweise möglicherweise mehrere Aktivitäten, die ähnliche URIs akzeptieren, sich aber nur durch den Pfadnamen unterscheiden. Verwenden Sie in diesem Fall das Attribut android:path oder seine Varianten pathPattern oder pathPrefix, um zu unterscheiden, welche Aktivität das System für verschiedene URI-Pfade öffnen soll.

<category>

Geben Sie die Kategorie BROWSABLE an. Er ist erforderlich, damit der Intent-Filter über einen Webbrowser aufgerufen werden kann. Andernfalls kann ein Link, auf den in einem Browser geklickt wird, nicht zu Ihrer App aufgelöst werden.

Fügen Sie auch die Kategorie DEFAULT hinzu. So kann Ihre App auf implizite Intents reagieren. Andernfalls kann die Aktivität nur gestartet werden, wenn im Intent der Name der App-Komponente angegeben ist.

Das folgende XML-Snippet zeigt, wie Sie einen Intent-Filter in Ihrem Manifest für Deeplinking angeben können. Die URIs "example://gizmos" und "http://www.example.com/gizmos" verweisen beide auf diese Aktivität.

<activity
    android:name="com.example.android.GizmosActivity"
    android:label="@string/title_gizmos" >
    <intent-filter android:label="@string/filter_view_http_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
        <data android:scheme="http"
              android:host="www.example.com"
              android:pathPrefix="/gizmos" />
        <!-- note that the leading "/" is required for pathPrefix-->
    </intent-filter>
    <intent-filter android:label="@string/filter_view_example_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "example://gizmos” -->
        <data android:scheme="example"
              android:host="gizmos" />
    </intent-filter>
</activity>

Die beiden Intent-Filter unterscheiden sich nur durch das <data>-Element. Es ist zwar möglich, mehrere <data>-Elemente in denselben Filter aufzunehmen, aber es ist wichtig, dass Sie separate Filter erstellen, wenn Sie eindeutige URLs deklarieren möchten (z. B. eine bestimmte Kombination aus scheme und host). Mehrere <data>-Elemente im selben Intent-Filter werden zusammengeführt, um alle Variationen ihrer kombinierten Attribute zu berücksichtigen. Beachten Sie beispielsweise Folgendes:

<intent-filter>
  ...
  <data android:scheme="https" android:host="www.example.com" />
  <data android:scheme="app" android:host="open.my.app" />
</intent-filter>

Es könnte den Anschein haben, dass nur https://www.example.com und app://open.my.app unterstützt werden. Tatsächlich werden jedoch diese beiden sowie app://www.example.com und https://open.my.app unterstützt.

Achtung: Wenn mehrere Aktivitäten Intent-Filter enthalten, die auf denselben bestätigten Android App Link verweisen, kann nicht garantiert werden, welche Aktivität den Link verarbeitet.

Nachdem Sie Ihrem App-Manifest Intent-Filter mit URIs für Aktivitätsinhalte hinzugefügt haben, kann Android alle Intent mit übereinstimmenden URIs zur Laufzeit an Ihre App weiterleiten.

Weitere Informationen zum Definieren von Intent-Filtern finden Sie unter Allow Other Apps to Start Your Activity.

Daten aus eingehenden Intents lesen

Sobald das System Ihre Aktivität über einen Intent-Filter startet, können Sie anhand der von Intent bereitgestellten Daten ermitteln, was gerendert werden muss. Rufen Sie die Methoden getData() und getAction() auf, um die Daten und die Aktion abzurufen, die mit dem eingehenden Intent verknüpft sind. Sie können diese Methoden jederzeit während des Lebenszyklus der Aktivität aufrufen, sollten dies aber in der Regel bei frühen Callbacks wie onCreate() oder onStart tun.

Hier ist ein Snippet, das zeigt, wie Daten aus einem Intent abgerufen werden:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

    val action: String? = intent?.action
    val data: Uri? = intent?.data
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent = getIntent();
    String action = intent.getAction();
    Uri data = intent.getData();
}

Mit diesen Best Practices können Sie die Nutzerfreundlichkeit verbessern:

  • Über den Deeplink sollten Nutzer direkt zum Inhalt gelangen, ohne dass Aufforderungen, Interstitials oder Anmeldungen erforderlich sind. Achten Sie darauf, dass Nutzer die Inhalte der App sehen können, auch wenn sie die App noch nie zuvor geöffnet haben. Es ist in Ordnung, Nutzer bei nachfolgenden Interaktionen oder wenn sie die App über den Launcher öffnen, dazu aufzufordern.
  • Halten Sie sich an die Designrichtlinien unter Navigation mit „Zurück“ und „Nach oben“, damit Ihre App den Erwartungen der Nutzer an die Rückwärtsnavigation entspricht, nachdem sie Ihre App über einen Deeplink aufgerufen haben.

Deeplinks testen

Mit der Android Debug Bridge und dem Tool „activity manager“ (am) können Sie testen, ob die von Ihnen für Deeplinks angegebenen Intent-Filter-URIs zur richtigen App-Aktivität aufgelöst werden. Sie können den ADB-Befehl für ein Gerät oder einen Emulator ausführen.

Die allgemeine Syntax zum Testen eines Intent-Filter-URI mit adb lautet:

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d <URI> <PACKAGE>

Mit dem folgenden Befehl wird beispielsweise versucht, eine Aktivität der Ziel-App aufzurufen, die dem angegebenen URI zugeordnet ist.

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d "example://gizmos" com.example.android

Hinweis: Wenn Sie in einer Route eine Sammlung von primitiven Typen definieren, z. B. **@Serializable data class Product(val colors: List)**, ist das automatisch generierte Deeplink-URL-Format **basePath?colors={value**}. Wenn Sie versuchen, einen URI mit mehreren Abfrageparametern anzugeben (z. B. **basepath?colors=red&colors=blue**), müssen Sie das Et-Zeichen maskieren (z. B. **basepath?colors=red\&colors=blue**).

Die von Ihnen festgelegte Manifestdeklaration und der Intent-Handler definieren die Verbindung zwischen Ihrer App und einer Website sowie die Vorgehensweise bei eingehenden Links. Damit das System Ihre App jedoch als Standard-Handler für eine Reihe von URIs behandelt, müssen Sie auch eine Überprüfung dieser Verbindung durch das System anfordern. App-Links überprüfen

Weitere Informationen zu Intents und App-Links finden Sie in den folgenden Ressourcen: