Wenn durch einen angeklickten Link oder eine programmatische Anfrage ein Web-URI-Intent aufgerufen wird, versucht das Android-System die folgenden Aktionen in sequenzieller Reihenfolge, bis die Anfrage erfolgreich ist:
- Öffnen Sie die bevorzugte App des Nutzers, die den URI verarbeiten kann, sofern eine solche App festgelegt ist.
- Öffnen Sie die einzige verfügbare App, die den URI verarbeiten kann.
- Dem Nutzer erlauben, eine App über ein Dialogfeld auszuwählen.
Führen Sie die folgenden Schritte aus, um Links zu Ihren Inhalten zu erstellen und zu testen. Sie können auch den App Links Assistant in Android Studio verwenden, um Android App Links hinzuzufügen.
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 wurde, 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.
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 in die Aktivität aufgelöst wird. Das<data>
-Tag muss mindestens das Attributandroid: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 die VariantenpathPattern
oderpathPrefix
, um zu unterscheiden, welche Aktivität das System für verschiedene URI-Pfade öffnen soll. <category>
- Die Kategorie
BROWSABLE
einschließen. Sie ist erforderlich, damit der Intent-Filter über einen Webbrowser aufgerufen werden kann. Andernfalls kann ein Klick auf einen Link in einem Browser nicht zu Ihrer App führen.Fügen Sie auch die Kategorie
DEFAULT
hinzu. Dadurch 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 Deep-Linking 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 Sie sollten 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 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 Starten einer Aktivität durch andere Apps erlauben.
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, Interstitial-Seiten 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 beim Öffnen der App über den Launcher zu fragen.
- 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 über einen Deeplink in Ihre 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 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
Die oben 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 Bestätigung dieser Verbindung durch das System anfordern. In der nächsten Lektion wird beschrieben, wie Sie diese Überprüfung implementieren.
Weitere Informationen zu Intents und App-Links finden Sie in den folgenden Ressourcen:
- Intents und Intent-Filter
- Starten einer Aktivität durch andere Apps erlauben
- Android-App-Links mit Android Studio hinzufügen