Mit Deeplinks können Sie Nutzer von Webbrowsern, Benachrichtigungen, sozialen Medien, Anzeigen und anderen Quellen direkt zu Ihrer App weiterleiten. Deeplinks ermöglichen direkte Übergänge von App zu App und von Web zu App, mit denen Sie die Nutzerinteraktion und ‑bindung durch kontextbezogene, zielgerichtete Inhalte steigern können.
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, die Ihren Nutzern ein nahtloses und vertrauenswürdiges Erlebnis bieten.
So funktionieren Deeplinks
Deeplinks sind 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 interessierte Apps weiterzuleiten. Apps, die einen bestimmten Deeplink-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 Auswahldialog 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, verwenden Sie App-Links.
Im Auswahldialog von Android werden alle installierten Apps angezeigt, die sich für die Verarbeitung eines Deeplink-Intents registriert haben. 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.
Das Verhalten des Auswahldialogs 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 Auswahldialog angezeigt, wenn eine App den Web-Link verarbeiten konnte.
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 den Auswahldialog 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 den Auswahldialog 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 Web-Links sind bestätigt. 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 den Auswahldialog anzuzeigen. So schaffen Sie ein vertrauenswürdiges und nahtloses Erlebnis für Ihre Nutzer.
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 einzugrenzen. Möglicherweise haben Sie mehrere Aktivitäten, die ähnliche URIs akzeptieren, sich aber im Pfad unterscheiden. In diesem Fall verwenden Sie das
android:path Attribut oder die Varianten pathPattern oder pathPrefix, um
zu 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 sie kann ein Klick auf einen 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 app://www.example.com und https://open.my.app unterstützt.
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 Nutzerfreundlichkeit zu verbessern:
- Der Deeplink sollte Nutzer direkt zu den Inhalten weiterleiten, ohne Aufforderungen, Interstitial-Seiten oder Anmeldungen. 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 wenn sie die App über den Launcher öffnen, auffordern, sich anzumelden.
- 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
Sie können die Android Debug Bridge mit dem Tool Activity Manager (am) verwenden, um zu testen, ob die für Deeplinks angegebenen Intent-Filter-URIs 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
Ab Android 17 können Sie auch das Flag --debug-link mit am start verwenden, um zu ermitteln, wie das System eine URL auflöst, und um übereinstimmende Intent-Filter oder Regeln für dynamische App-Links zu prüfen. Weitere Informationen finden Sie unter
Linkauflösung mit dem Flag „--debug-link“ diagnostizieren.
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 Bestätigung dieser Verbindung anfordern. Unter App-Links bestätigen wird erklärt, wie Sie diese Bestätigung 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