Mit Deeplinks können Sie Nutzer direkt von Webbrowsern, Benachrichtigungen, sozialen Medien, Anzeigen und anderen Quellen in Ihre App leiten. Deeplinks ermöglichen direkte Übergänge zwischen Apps und vom Web zur App. So können Sie die Nutzerinteraktion und ‑bindung 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 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 einem bestimmten URI übereinstimmen, führt Android die folgenden Aktionen in dieser Reihenfolge aus, um die Intent weiterzuleiten:
- Öffnen Sie die Standard-App des Nutzers, die den URI verarbeiten kann, sofern eine solche App festgelegt wurde.
- Öffnen Sie die einzige verfügbare App, die den URI verarbeiten kann.
- 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.
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 Auswahldialogfeld angezeigt, wenn eine App den Web-Link verarbeiten konnte.
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
httpundhttpsverwenden. 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 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. Der Auswahldialog 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:
Geben Sie die Intent-Aktion ACTION_VIEW an, damit der Intent-Filter über die Google Suche aufgerufen werden kann.
Fügen Sie ein oder mehrere <data>-Tags hinzu, die jeweils ein URI-Format darstellen, das in der 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 im Pfad 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.
Nehmen Sie die Kategorie BROWSABLE auf. Er ist erforderlich, damit der Intent-Filter über einen Webbrowser aufgerufen werden kann. Ohne sie 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 nämlich 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.
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.
Das folgende Snippet 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 sie aufgefordert werden, etwas zu tun, oder dass Interstitials oder Anmeldeseiten angezeigt werden. 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 Rückwärts- und Aufwärtsnavigation, damit Ihre App den Erwartungen der Nutzer an die Rückwärtsnavigation entspricht, nachdem sie Ihre App über einen Deeplink aufgerufen haben.
Tiefenlinks 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
Ab Android 17 können Sie das Flag --debug-link auch mit am start verwenden, um zu analysieren, 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 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:
- Intents und Intent-Filter
- Anderen Apps das Starten einer Aktivität erlauben
- Android-App-Links mit Android Studio hinzufügen