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 von App zu App und von Web zu App, mit denen Sie die Interaktion durch kontextbezogene, zielgerichtete Inhalte steigern können.

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 eine nahtlose, vertrauenswürdige Nutzererfahrung 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, in der Regel standardmäßig in einem Webbrowser geöffnet. Bei früheren Versionen wurde möglicherweise ein Dialogfeld zur Auswahl der App 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: Diese Deeplinks verwenden ein benutzerdefiniertes URI-Schema (z. B. example://products/123), um 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 Mehrdeutigkeit 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 der Dialog 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 sind bestätigte Weblinks. Durch die Verknüpfung von Websites 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 Auswahl wird dann nicht mehr angezeigt. So wird für Ihre Nutzer ein vertrauenswürdiges und nahtloses Erlebnis geschaffen.

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 aufgerufen werden kann.

<data>

Fügen Sie ein oder mehrere <data>-Tags hinzu, die jeweils ein URI-Format darstellen, das zur 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, den die Aktivität akzeptiert, 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 die 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.

Sobald 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 App-Inhalte 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 Intent-Filter-URIs, die Sie für Deeplinks angegeben haben, 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 mit dem angegebenen URI verknüpft 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)**, lautet 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 beantragen, dass das System diese Verbindung überprüft. Unter App-Links überprüfen wird beschrieben, wie Sie diese Überprüfung implementieren.

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