Wenn ein angeklickter Link oder eine programmatische Anforderung eine Web-URI-Absicht aufruft, versucht das Android-System jede der folgenden Aktionen in sequentieller Reihenfolge, bis die Anforderung erfolgreich ist:
- Öffnen Sie die bevorzugte App des Benutzers, die den URI verarbeiten kann, falls einer angegeben ist.
- Öffnen Sie die einzige verfügbare App, die den URI verarbeiten kann.
- Ermöglicht dem Benutzer die Auswahl einer App aus einem Dialogfeld.
Führen Sie die folgenden Schritte aus, um Links zu Ihren Inhalten zu erstellen und zu testen. Sie können auch den App-Links-Assistenten in Android Studio verwenden, um Android-App-Links hinzuzufügen.
Intent-Filter für eingehende Links hinzufügen
Um einen Link zu Ihrem App-Inhalt zu erstellen, fügen Sie einen Intent-Filter hinzu, der diese Elemente und Attributwerte in Ihrem Manifest enthält:
<action>
Geben Sie die Intent-AktionACTION_VIEW
an, damit der Intent-Filter über die Google-Suche erreicht werden kann.<data>
Fügen Sie ein oder mehrere<data>
-Tags hinzu, von denen jedes ein URI-Format darstellt, das in die Aktivität aufgelöst wird. Das<data>
-Tag muss mindestens dasandroid:scheme
-Attribut enthalten.
Sie können weitere Attribute hinzufügen, um den URI-Typ, den die Aktivität akzeptiert, weiter zu verfeinern. Beispielsweise haben Sie möglicherweise mehrere Aktivitäten, die ähnliche URIs akzeptieren, die sich jedoch einfach anhand des Pfadnamens 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>
Schließen Sie die KategorieBROWSABLE
ein. Es ist erforderlich, damit der Intent-Filter von einem Webbrowser aus zugänglich ist. Ohne sie kann das Klicken auf einen Link in einem Browser nicht zu Ihrer App führen.
Enthält auch die Kategorie DEFAULT
.Auf diese Weise kann Ihre App auf implizite Absichten reagieren. Ohne dies kann die Aktivität gestartet werdennur wenn die Absicht den Namen Ihrer App-Komponente angibt.
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"
werden beide in diese 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>
Beachten Sie, dass sich die beiden Intent-Filter nur durch das <data>
-Element unterscheiden.Obwohl es möglich ist, mehrere <data>
-Elemente in denselben Filter aufzunehmen, ist es wichtig, dass Sie separate Filter erstellen, wenn Sie uniqueURLs deklarieren möchten (z. B. eine bestimmte Kombination aus scheme
und host
), da mehrere <data>
-Elemente in demselben Intent-Filter tatsächlich zusammengeführt werden, um alle Variationen ihrer kombinierten Attribute zu berücksichtigen. Betrachten 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 scheint, als ob dies nur https://www.example.com
undapp://open.my.app
unterstützt. Es unterstützt jedoch tatsächlich diese beiden plus diese:app://www.example.com
und https://open.my.app
.
Sobald Sie Ihrem Appmanifest 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 Absichtsfiltern finden Sie unter Zulassen, dass andere Apps Ihre Aktivität starten.
Daten aus eingehenden Absichten lesen
Sobald das System Ihre Aktivität über einen Absichtsfilter startet, können Sie die von Intent
bereitgestellten Daten verwenden, um zu bestimmen, was Sie rendern müssen. Rufen Sie die Methoden getData()
undgetAction()
auf, um die Daten und Informationen abzurufen, die dem eingehenden Intent
zugeordnet sind. Sie können diese Methoden jederzeit während des Lebenszyklus der Aktivität aufrufen, sollten dies jedoch im Allgemeinen während früher Rückrufe wie onCreate()
oderonStart()
.
Hier ist ein Ausschnitt, der zeigt, wie Daten von einemIntent
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) val action: String? = intent?.action val data: Uri? = intent?.data}
Java
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData();}
Befolgen Sie diese Best Practices, um die Benutzererfahrung zu verbessern:
- Der Deep Link sollte Benutzer direkt zum Inhalt führen,ohne Eingabeaufforderungen, interstitielle Seiten oder Anmeldungen. Stellen Sie sicher, dass Benutzer den App-Inhalt anzeigen können, auch wenn sie die Anwendung noch nie geöffnet haben.Es ist in Ordnung, Benutzer bei nachfolgenden Interaktionen oder beim Öffnen der App aus dem Launcher aufzufordern.
- Befolgen Sie die in Navigation mit Back und Up beschriebenen Designanweisungen, damit Ihre App den Erwartungen der Benutzer an die Rückwärtsnavigation entspricht, nachdem sie Ihre App über einen Deep Link aufgerufen haben.
Testen Sie Ihre Deep Links
Sie können die Android DebugBridge mit dem Activity Manager (am) -Tool verwenden, um zu testen, ob die für Deep Linking angegebenen Intent filterURIs mit der richtigen App-Aktivität aufgelöst werden. Sie können den Befehl adb 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 Ziel-App-Aktivität anzuzeigen, die dem angegebenen URI zugeordnet ist.
$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
Der oben festgelegte Manifest-Deklarations- und Intent-Handler definiert die Verbindung zwischen Ihrer App und einer Website und was mit eingehenden Links zu tun ist. Damit das System Ihre App jedoch als Standardhandler für eine Reihe von URIs behandelt, müssen Sie das System auch auffordern, diese Verbindung zu überprüfen. In der nächsten Lektion wird erläutert, wie diese Überprüfung implementiert wird.