Deeplinks zu App-Inhalten erstellen

Wenn ein angeklickter Link oder eine programmatische Anfrage einen Web-URI-Intent aufruft, unternimmt jede der folgenden Aktionen in sequenzieller Reihenfolge, bis die Anfrage erfolgreich ist:

  1. Öffnen Sie die bevorzugte App des Nutzers, die den URI verarbeiten kann, falls eine angegeben ist.
  2. Öffnen Sie die einzige verfügbare App, die den URI verarbeiten kann.
  3. Dem Nutzer erlauben, eine App aus einem Dialogfeld auszuwählen.

Führe die folgenden Schritte aus, um Links zu deinen Inhalten zu erstellen und zu testen. Sie können auch die App-Link-Assistent in Android Studio Android-App-Links.

Hinweis : Ab Android 12 (API-Level 31) wird eine allgemeine Web Intent wird nur dann in eine Aktivität in Ihrer App aufgelöst, wenn Ihre App für die in diesem Web Intent enthaltene Domain. Wenn Ihre App für Domain ist, wird der Web-Intent in die Standardbrowseranwendung des Nutzers aufgelöst .

Intent-Filter für eingehende Links hinzufügen

Füge einen Intent-Filter hinzu, um einen Link zu deinen App-Inhalten zu erstellen, folgende Elemente und Attributwerte in Ihrem Manifest enthält:

<action>
Geben Sie die Intent-Aktion ACTION_VIEW an, damit damit der Intent-Filter über die Google Suche aufgerufen werden kann.
<data>
Eine oder mehrere <data> hinzufügen -Tags, von denen jedes ein URI-Format darstellt, das in die Aktivität aufgelöst wird. Die <data>-Tag muss Folgendes enthalten: android:scheme .

Sie können weitere Attribute hinzufügen, um den URI-Typ, den die Aktivität akzeptiert, weiter zu verfeinern. Für Beispiel: Sie haben mehrere Aktivitäten, die ähnliche URIs akzeptieren, sich aber einfach unterscheiden. basierend auf dem Pfadnamen. Verwenden Sie in diesem Fall die Methode Attribut android:path pathPattern oder pathPrefix, um zu unterscheiden, Aktivität, die das System für verschiedene URI-Pfade öffnen soll.

<category>
BROWSABLE einschließen Kategorie. Dies ist erforderlich, damit über ein Web auf den Intent-Filter zugegriffen werden kann Browser. Andernfalls kann das Klicken auf einen Link in einem Browser nicht zur App weitergeleitet werden.

Nehmen Sie auch die Kategorie DEFAULT auf. So kann Ihre App auf implizite Intents reagieren. Andernfalls kann die Aktivität gestartet werden, wenn der Intent den Namen Ihrer App-Komponente angibt.

Das folgende XML-Snippet zeigt, wie Sie einen Intent-Filter angeben können in Ihrem Manifest für Deeplinks. Die URIs “example://gizmos” und “http://www.example.com/gizmos” wurden 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 Element <data> unterscheiden. Es ist zwar möglich, mehrere <data>-Elemente in denselben Filter aufzunehmen, ist es wichtig, separate Filter zu erstellen, wenn Sie eindeutige (z. B. eine bestimmte Kombination aus scheme und host), Mehrere <data>-Elemente im selben Intent-Filter werden tatsächlich zusammengeführt um alle Variationen ihrer kombinierten Attribute zu berücksichtigen. Sehen Sie sich zum Beispiel Folgendes an:

<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 würden nur https://www.example.com und app://open.my.app. Tatsächlich werden jedoch diese beiden sowie die folgenden unterstützt: app://www.example.com und https://open.my.app.

Achtung:Wenn mehrere Aktivitäten Intent-Filter enthalten, die zum selben Zeitpunkt Android-App-Links bestätigt haben, gibt es keine Garantie, den Link verarbeitet.

Nachdem Sie Ihrer App Intent-Filter mit URIs für Aktivitätsinhalte hinzugefügt haben kann Android alle Intent weiterleiten, der Ihrer App zur Laufzeit übereinstimmende URIs entspricht.

Weitere Informationen zum Definieren von Intent-Filtern finden Sie unter Zulassen, dass andere Apps Aktivitäten starten

Daten aus eingehenden Intents lesen

Sobald das System deine Aktivität über einen Intent-Filter startet, kannst du Bestimmen Sie anhand der von Intent bereitgestellten Daten, was gerendert werden muss. Anruf getData() und getAction()-Methoden zum Abrufen der Daten und Aktion, die mit der eingehenden Intent verknüpft ist. Sie können jederzeit während des Lebenszyklus der Aktivität aufrufen, sollte dies im Allgemeinen bei frühen Callbacks wie z. B. onCreate() oder onStart().

Dieses Snippet zeigt, wie Sie Daten aus einer Intent:

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();
}

Befolgen Sie diese Best Practices, um die User Experience zu verbessern:

  • Über einen Deeplink sollten Nutzer direkt zum Inhalt gelangen, ohne Aufforderungen, Interstitial-Seiten oder Log-ins. Sorgen Sie dafür, dass Nutzende App-Inhalte auch dann sehen, wenn der Nutzer die App zuvor noch nie geöffnet hat. Es ist in Ordnung, Nutzende bei nachfolgenden Interaktionen oder beim Öffnen der App aufzufordern. aus dem Launcher.
  • Befolgen Sie die Designleitfäden im Mit der Zurück-Taste und der Nach-oben-Taste navigieren damit Ihre App den Anforderungen der Nutzer die Rückwärtsnavigation nach gelangen sie über einen Deeplink zu Ihrer App.

Deeplinks testen

Mit dem Tool Android Debug Brücke mit dem Aktivitätsmanager-Tool (am), um zu testen, ob der Intent-Filter Die URIs, die Sie für Deeplinks angegeben haben, werden der richtigen App-Aktivität zugeordnet. Ich 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 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 Manifestdeklaration und der Intent-Handler, den du oben festgelegt hast, definieren die Verbindung zwischen deiner App Website und was mit eingehenden Links geschehen soll. In Damit das System Ihre App als Standard-Handler für eine Reihe von URIs behandelt, müssen Sie auch anfordern, dass das System diese Verbindung überprüft. In der nächsten Lektion wird erklärt, wie Sie diese Überprüfung implementieren.

Weitere Informationen zu Intents und App-Links finden Sie in den folgenden Ressourcen: