Mit Deeplinks können Sie Nutzer von Webbrowsern, Benachrichtigungen, sozialen Medien, Anzeigen und anderen Quellen direkt zu Ihrer App weiterleiten. Deeplinks ermöglichen nahtlose Übergänge zwischen Apps und zwischen Web und App. So können Sie die Interaktion durch kontextbezogene, zielgerichtete Inhalte steigern.
In dieser Anleitung wird erklärt, wie Deeplinks funktionieren und wie Sie Deeplinks zu Ihren Inhalten erstellen und testen.
Für Deeplinks, die auf Ihre eigene Website oder Domains verweisen, empfehlen wir die Verwendung von App-Links, da diese eine nahtlose und vertrauenswürdige Nutzererfahrung bieten.
So funktionieren Deeplinks
Deeplinks sind eine allgemeine Systemfunktion von Android, die auf allen Versionen und auf allen Geräten unterstützt wird. Dabei wird das Intent-System von Android genutzt, um Deeplinks an relevante Apps weiterzuleiten. Apps, die einen bestimmten Deep link-URI verarbeiten möchten, deklarieren in ihren App-Manifestdateien einen entsprechenden Intent-Filter.
Wenn der Nutzer zur Laufzeit auf einen Link tippt, löst Android einen Intent aus und versucht, ihn an eine App weiterzuleiten. Da mehrere Apps Intent-Filter deklarieren können, die mit einem bestimmten URI übereinstimmen, führt Android die folgenden Aktionen in dieser Reihenfolge aus, um den Intent weiterzuleiten:
- Die Standard-App des Nutzers wird geöffnet, die den URI verarbeiten kann, sofern eine solche App festgelegt wurde.
- Die einzige verfügbare App wird geöffnet, die den URI verarbeiten kann.
- Der Nutzer kann in einem Dialogfeld zur Auswahl der App eine App auswählen.
Das bedeutet, dass es keine Garantie dafür gibt, dass das System den Deeplink-Intent 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 eine Auswahl treffen. 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 Auswahl der App von Android werden alle installierten Apps angezeigt, die für die Verarbeitung eines Deeplink-Intents registriert sind. Der Nutzer kann auch eine App als Standard für diesen Linktyp auswählen. Sobald der Nutzer eine Standard-App 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 Auswahl der App
Das Verhalten des Dialogfelds zur Auswahl der App hat sich mit den 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 der App angezeigt, wenn eine App den Web-Link verarbeiten konnte.
Hinweis: Unter Android 12 (API-Level 31) und höher 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 wurde, die in diesem Web-Intent enthalten ist. Wenn Ihre App nicht für die Domain genehmigt wurde, wird der Web Intent stattdessen im Standardbrowser des Nutzers aufgelöst.
Arten von Deeplinks
Unter Android gibt es drei Arten von Deeplinks, die Sie unterstützen können:
- Benutzerdefinierte Deeplinks: Diese Deeplinks verwenden ein benutzerdefiniertes URI-Schema (z.
B.
example://products/123), um einen Nutzer direkt zu einem bestimmten Inhalt in einer App weiterzuleiten. Sie sind nützlich für die interne Navigation oder für Links aus Quellen, die Sie kontrollieren. Sie sind jedoch keine Standard-Web-Links und können trotzdem das Dialogfeld zur Auswahl der App auslösen, wenn eine andere App dasselbe benutzerdefinierte Schema registriert. - Web-Links: Diese Deeplinks verwenden die Standardschemas
httpundhttps. Sie sind vielseitiger, da es sich um Standard-URLs handelt. Unter Android 12 und höher lösen sie jedoch fast immer das Dialogfeld zur Auswahl der App aus. Das bedeutet, dass sie wahrscheinlich standardmäßig vom Webbrowser des Nutzers verarbeitet werden, anstatt zu Ihrer App weitergeleitet zu werden. - App-Links: Diese seit Android 6.0 (API-Level 23) verfügbaren Links sind bestätigte Web-Links. Durch die Websitezuordnung 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, ohne dass das Dialogfeld zur Auswahl der App angezeigt wird. So wird eine vertrauenswürdige und nahtlose Nutzererfahrung geschaffen.
Intent-Filter für eingehende Links hinzufügen
Wenn Sie einen Link zu Ihren App-Inhalten erstellen möchten, fügen Sie in Ihrem Manifest einen Intent-Filter hinzu, der die folgenden Elemente und Attributwerte enthält:
Geben Sie die ACTION_VIEW Intent-Aktion an, damit der Intent-Filter über die Google Suche erreichbar ist.
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
android:scheme-Attribut enthalten.
Sie können weitere Attribute hinzufügen, um den Typ des URI, den die Aktivität
akzeptiert, weiter zu verfeinern. Beispielsweise können mehrere Aktivitäten ähnliche
URIs akzeptieren, die sich jedoch nur durch den Pfadnamen unterscheiden. In diesem Fall können Sie mit dem
android:path Attribut oder den pathPattern oder pathPrefix Varianten unterscheiden, welche Aktivität das System für verschiedene URI-Pfade öffnen soll.
Fügen Sie die BROWSABLE Kategorie hinzu. Sie ist erforderlich, damit der Intent
Filter über einen Webbrowser zugänglich ist. Ohne diese Kategorie kann ein Link in einem
Browser nicht zu Ihrer App aufgelöst werden.
Fügen Sie auch die DEFAULT Kategorie hinzu. So kann Ihre App auf
implizite Intents reagieren. Ohne diese Kategorie kann die Aktivität nur gestartet werden, wenn der Intent
den Namen Ihrer App-Komponente angibt.
Das folgende XML-Snippet zeigt, wie Sie in Ihrem
Manifest einen Intent-Filter für Deeplinks angeben können. Die URIs "example://gizmos" und
"http://www.example.com/gizmos" werden beide zu dieser Aktivität aufgelöst.
<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, Sie sollten jedoch 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. Beispiel:
<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 so aussehen, als würden nur https://www.example.com und
app://open.my.app unterstützt. Tatsächlich werden aber auch diese unterstützt:
app://www.example.com und https://open.my.app.
Achtung: Wenn mehrere Aktivitäten Intent-Filter enthalten, die zum selben bestätigten Android-App-Link aufgelöst werden, gibt es keine Garantie dafür, welche Aktivität den Link verarbeitet.
Sobald Sie Ihrem App-Manifest Intent-Filter mit URIs für Aktivitätsinhalte hinzugefügt haben, kann Android zur Laufzeit jeden Intent mit übereinstimmenden URIs an
Ihre App weiterleiten.
Weitere Informationen zum Definieren von Intent-Filtern finden Sie unter Anderen Apps das Starten einer Aktivität erlauben.
Daten aus eingehenden Intents lesen
Sobald das System Ihre Aktivität über einen Intent-Filter startet, können Sie anhand der Daten
die vom Intent bereitgestellt werden, bestimmen, was gerendert werden muss. Rufen Sie die
getData() und getAction() Methoden auf, um die Daten und
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 Sie Daten aus einem Intent abrufen:
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();
}
Beachten Sie diese Best Practices, um die Nutzererfahrung zu verbessern:
- Der Deeplink sollte Nutzer direkt zu den Inhalten weiterleiten, ohne dass sie aufgefordert werden, etwas zu tun, oder Interstitial-Seiten oder Anmeldeseiten angezeigt werden. Achten Sie darauf, dass Nutzer die App-Inhalte auch dann sehen können, wenn sie die App noch nie geöffnet haben. Sie können Nutzer bei nachfolgenden Interaktionen oder beim Öffnen der App über den Launcher auffordern, etwas zu tun.
- Folgen Sie der Designanleitung unter Navigation mit den Schaltflächen „Zurück“ und „Nach oben“, damit Ihre App den Erwartungen der Nutzer an die Rückwärtsnavigation entspricht, nachdem sie über einen Deeplink zu Ihrer App gelangt sind.
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 auf einem Gerät oder einem Emulator ausführen.
Die allgemeine Syntax zum Testen eines Intent-Filter-URI mit adb ist:
$ adb shell am start
-W -a android.intent.action.VIEW
-d <URI> <PACKAGE>
Mit dem folgenden Befehl wird beispielsweise versucht, eine Ziel-App-Aktivität 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 eine Sammlung primitiver Typen in einer Route 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 Manifestdeklaration und der von Ihnen festgelegte Intent-Handler definieren die Verbindung zwischen Ihrer App und einer Website sowie die Verarbeitung eingehender Links. Damit das System Ihre App als Standard-Handler für eine Reihe von URIs behandelt, müssen Sie jedoch auch eine Überprüfung dieser Verbindung anfordern. Unter App-Links überprüfen wird erklärt, wie Sie diese Überprüfung implementieren.
Weitere Informationen zu Intents und App-Links finden Sie in den folgenden Ressourcen:
- Intents und Intent-Filter
- Anderen Apps das Starten einer Aktivität erlauben
- Android-App-Links mit Android Studio hinzufügen