Freigeben über


Android-App-Links

Es ist häufig wünschenswert, eine Website und eine mobile App so zu verbinden, dass Links auf einer Website die mobile App starten und in dieser Inhalte anzeigen. Die App-Verbindung, die auch als Deep Linkingbezeichnet wird, ist eine Technik, mit der ein mobiles Gerät auf einen URI reagieren und Inhalte in einer mobilen App starten kann, die durch den URI dargestellt wird.

Android verarbeitet App-Links über das Absichtssystem. Wenn Sie in einem mobilen Browser auf einen Link tippen, sendet der Browser eine Absicht, die Android an eine registrierte App delegiert. Diese Links können auf einem benutzerdefinierten Schema basieren (z. B. myappname://) oder das HTTP- oder HTTPS-Schema nutzen. Wenn Sie z. B. einen Link auf einer Rezeptwebsite auswählen, wird eine mobile App geöffnet, die dieser Website zugeordnet ist, in der ein bestimmtes Rezept angezeigt wird. Wenn mehrere Apps für die Verarbeitung der Absicht registriert sind, zeigt Android ein Mehrdeutigkeitsdialogfeld an, in dem der Benutzer oder die Benutzerin gefragt wird, welche App zur Verarbeitung der Absicht ausgewählt werden soll. Benutzer oder Benutzerinnen, die Ihre App nicht installiert haben, werden zu Inhalten auf Ihrer Website weitergeleitet.

Android klassifiziert App-Links in drei Kategorien:

  • Deep-Links sind URIs eines beliebigen Schemas, die Benutzer/Benutzerinnen zu bestimmten Inhalten in Ihrer App führen. Bei der Auswahl eines Deep-Links wird möglicherweise ein Mehrdeutigkeitsdialogfeld angezeigt, in dem der Benutzer bzw. die Benutzerin aufgefordert wird, eine App zur Verarbeitung des Deep-Links auszuwählen.
  • Weblinks sind Deep-Links, die das HTTP- oder HTTPS-Schema verwenden. Unter Android 12 und höher zeigen Weblinks Inhalte immer in einem Webbrowser an. Wenn in früheren Versionen von Android eine App den Weblink verarbeiten kann, wird ein Mehrdeutigkeitsdialogfeld angezeigt, in dem der Benutzer bzw. die Benutzerin aufgefordert wird, eine App zur Verarbeitung des Weblinks auszuwählen.
  • Android-App-Links sind in der API 23 und höher verfügbar. Dies sind Weblinks, die das HTTP- oder HTTPS-Schema verwenden und das autoVerify-Attribut enthalten. Mit diesem Attribut kann Ihre App zum Standardhandler für einen App-Link werden. Bei der Auswahl eines App-Links wird die App geöffnet, ohne dass ein Mehrdeutigkeitsdialogfeld angezeigt wird.

.NET MAUI-Apps für Android können alle drei Kategorien von App-Links unterstützen. In diesem Artikel geht es jedoch hauptsächlich um Android-App-Links. Diese erfordern den Nachweis des Besitzes einer Domäne sowie das Hosten einer JSON-Datei mit Links zu digitalen Ressourcen in der Domäne, die die Beziehung mit Ihrer App beschreiben. Dadurch kann Android überprüfen, ob die App, die versucht, einen URI zu verarbeiten, im Besitz der URI-Domäne ist, um zu verhindern, dass bösartige Apps Ihre App-Links abfangen.

Der Prozess der Verarbeitung von Android-App-Links in einer .NET MAUI-App für Android läuft wie folgt ab:

  1. Überprüfen des Domänenbesitzes. Weitere Informationen finden Sie unter Überprüfen des Domänenbesitzes.
  2. Erstellen und Hosten einer Datei mit Links zu digitalen Ressourcen auf Ihrer Website. Weitere Informationen finden Sie unter Erstellen und Hosten einer Datei mit Links zu digitalen Ressourcen.
  3. Konfigurieren eines Absichtsfilters in Ihrer App für die Website-URIs. Weitere Informationen finden Sie unter Konfigurieren des Absichtsfilters.
  4. Lesen der Daten aus der eingehenden Absicht. Weitere Informationen finden Sie unter Lesen der Daten aus eingehenden Absichten.

Wichtig

So verwenden Sie Android-App-Links

  • Eine Version Ihrer App muss bei Google Play aktiv sein.
  • Eine Begleitwebsite muss bei der App in der Entwicklerkonsole von Google registriert sein. Nachdem die App einer Website zugeordnet wurde, können URIs indiziert werden, die sowohl für die Website als auch für die App funktionieren, die dann in Suchergebnissen bereitgestellt werden kann. Weitere Informationen finden Sie unter App-Indizierung bei Google Search auf support.google.com.

Weitere Informationen zu Android-App-Links finden Sie unter Verarbeiten von Android-App-Links.

Überprüfen des Domänenbesitzes

Sie müssen den Besitz der Domäne überprüfen, über die Sie App-Links in der Google Search Console bereitstellen. Für die Besitzüberprüfung müssen Sie beweisen, dass Sie eine bestimmte Website besitzen. Die Google Search Console unterstützt mehrere Überprüfungsansätze. Weitere Informationen finden Sie unter Überprüfen des Websitebesitzes auf support.google.com.

Bei Android-App-Links muss Android die Zuordnung zwischen der App und der Website überprüfen, bevor die App als Standardhandler für den URI festgelegt werden können. Diese Überprüfung erfolgt bei der Erstinstallation der App. Die Datei mit Links zu digitalen Ressourcen ist eine JSON-Datei, die in der jeweiligen Webdomäne am folgenden Speicherort gehostet werden muss: https://domain.name/.well-known/assetlinks.json.

Die Datei mit Links zu digitalen Ressourcen enthält die Metadaten, die Android für die Überprüfung der Zuordnung benötigt. Die Datei muss die folgenden Schlüssel-Wert-Paare enthalten:

  • namespace: der Namespace der Android-App
  • package_name: der Paketname der Android-App
  • sha256_cert_fingerprints: die SHA-256-Fingerabdrücke der signierten App, die aus Ihrer .keystore-Datei abgerufen werden. Informationen zum Ermitteln der Signatur Ihres Keystores finden Sie unter Ermitteln der Signatur Ihres Keystores.

Das folgende Beispiel für eine Datei assetlinks.json weist der Android-App com.companyname.myrecipeapp die Berechtigungen für das Öffnen zu:

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "com.companyname.myrecipeapp",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

Es ist möglich, mehrere SHA-256-Fingerabdrücke zu registrieren, um verschiedene Versionen oder Builds Ihrer App zu unterstützen. Die folgende Datei assetlinks.json weist den beiden Android-Apps com.companyname.myrecipeapp und com.companyname.mycookingapp die Berechtigungen für das Öffnen zu:

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "com.companyname.myrecipeapp",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   },
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "com.companyname.mycookingapp",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

Tipp

Verwenden Sie das Tool Anweisungslisten-Generator und -Tester, um den richtigen JSON-Code zu generieren und zu überprüfen.

Wenn Sie Ihre JSON-Überprüfungsdatei auf https://domain.name/.well-known/assetlinks.json veröffentlichen, müssen Sie Folgendes sicherstellen:

  • Die Datei wird mit dem Inhaltstyp application/json bereitgestellt.
  • Der Zugriff auf die Datei muss über HTTPS möglich sein, unabhängig davon, ob Ihre App HTTPS als Schema verwendet.
  • Der Zugriff auf die Datei muss ohne Umleitungen möglich sein.
  • Wenn Ihre App-Links mehrere Domänen unterstützen, müssen Sie die Datei assetlinks.json in jeder Domäne veröffentlichen.

Sie können bestätigen, dass die Datei mit Links zu digitalen Ressourcen ordnungsgemäß formatiert ist und gehostet wird, indem Sie die API für digitale Ressourcen von Google verwenden:

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=
  https://<WEB SITE ADDRESS>:&relation=delegate_permission/common.handle_all_urls

Weitere Informationen finden Sie unter Deklarieren von Websitezuordnungen auf developer.android.com.

Konfigurieren des Absichtsfilters

Sie müssen einen Absichtsfilter konfigurieren, der einen oder mehrere URIs von einer Website einer Aktivität in Ihrer Android-App zuordnet. In .NET MAUI erreichen Sie dies durch Hinzufügen von IntentFilterAttribute zu Ihrer Aktivität. Im Intent-Filter müssen die folgenden Informationen deklariert sein:

  • ActionView: Dadurch wird der Absichtsfilter registriert, um auf Anforderungen zum Anzeigen von Informationen zu reagieren.
  • Categories: Der Absichtsfilter sollte CategoryDefault und CategoryBrowsable registrieren, damit der Web-URI ordnungsgemäß verarbeitet werden kann.
  • DataScheme: Der Absichtsfilter muss ein benutzerdefiniertes Schema und/oder das HTTPS- und/oder das HTTPS-Schema deklarieren.
  • DataHost: Dies ist die Domäne, aus der URIs stammen.
  • DataPathPrefix: Dies ist ein optionaler Pfad zu Ressourcen auf der Website, der mit / beginnen muss.
  • AutoVerify: Hiermit weisen Sie Android an, die Beziehung zwischen der App und der Website zu überprüfen. Als Wert muss true festgelegt werden, da Android andernfalls die Zuordnung zwischen der App und der Website nicht überprüft. Dies würde dazu führen, dass Ihre App nicht als Standardhandler für einen URI festgelegt wird.

Das folgende Beispiel zeigt, wie Sie mit IntentFilterAttribute Links von https://www.recipe-app.com/recipes verarbeiten:

using Android.App;
using Android.Content;
using Android.Content.PM;

namespace MyNamespace;

[Activity(
    Theme = "@style/Maui.SplashTheme",
    MainLauncher = true,
    ConfigurationChanges = ConfigChanges.ScreenSize |
        ConfigChanges.Orientation |
        ConfigChanges.UiMode |
        ConfigChanges.ScreenLayout |
        ConfigChanges.SmallestScreenSize |
        ConfigChanges.KeyboardHidden |
        ConfigChanges.Density)]
[IntentFilter(
    new string[] { Intent.ActionView },
    Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
    DataScheme = "https",
    DataHost = "recipe-app.com",
    DataPath = "/recipe",
    AutoVerify = true,)]    
public class MainActivity : MauiAppCompatActivity
{
}

Hinweis

Sie können in Ihrem Absichtsfilter mehrere Schemas und Hosts angeben. Weitere Informationen finden Sie unter Erstellen von Deep-Links zu App-Inhalten auf developer.android.com.

Android überprüft jeden Host in den Absichtsfiltern anhand der Datei mit Links zu digitalen Ressourcen auf der Website, bevor die App als Standardhandler für einen URI registriert wird. Alle Intent-Filter müssen die Überprüfung bestehen, bevor Android die App als Standardhandler einrichten kann. Nachdem Sie einen Absichtsfilter mit einem URI für Aktivitätsinhalte hinzugefügt haben, kann Android zur Laufzeit alle Absichten weiterleiten, die übereinstimmende URIs mit Ihrer App aufweisen.

Möglicherweise müssen Sie Ihre Aktivität als exportierbar kennzeichnen, damit Ihre Aktivität von anderen Apps gestartet werden kann. Dazu fügen Sie dem vorhandenen ActivityAttribute die Option Exported = true hinzu. Weitere Informationen finden Sie unter Activity-Element auf developer.android.com.

Wenn eine Web-URI-Absicht aufgerufen wird, führt Android die folgenden Aktionen durch, bis die Anforderung erfolgreich ist:

  1. Öffnen der bevorzugten App für das Verarbeiten des URI
  2. Öffnen der einzigen verfügbaren App zum Verarbeiten des URI
  3. Ermöglichen der Auswahl einer App zum Verarbeiten des URI durch Benutzer/Benutzerinnen

Weitere Informationen zu Absichten und Absichtsfiltern finden Sie unter Absichten und Absichtsfilter auf developer.android.com.

Lesen der Daten aus der eingehenden Absicht

Wenn Android Ihre Aktivität über einen Absichtsfilter startet, können Sie die von der Absicht bereitgestellten Daten verwenden, um die erforderlichen Aktionen zu ermitteln. Dies sollte in einem frühen Lebenszyklusdelegaten durchgeführt werden, idealerweise während OnCreate. Der OnCreate-Delegat wird aufgerufen, wenn eine Aktivität erstellt wird. Weitere Informationen zu Lebenszyklusdelegaten finden Sie unter Plattformlebenszyklusereignisse.

Um auf den Aufruf eines Android-Lifecycle-Delegaten zu reagieren, rufen Sie die ConfigureLifecycleEvents-Methode für das MauiAppBuilder-Objekt in der CreateMauiapp-Methode Ihrer MauiProgram-Klasse auf. Rufen Sie dann im ILifecycleBuilder-Objekt die AddAndroid-Methode auf, und geben Sie den Action an, der einen Handler für den erforderlichen Delegaten registriert:

using Microsoft.Maui.LifecycleEvents;
using Microsoft.Extensions.Logging;

namespace MyNamespace;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
            })
            .ConfigureLifecycleEvents(lifecycle =>
            {
#if ANDROID
                lifecycle.AddAndroid(android =>
                {
                    android.OnCreate((activity, bundle) =>
                    {
                        var action = activity.Intent?.Action;
                        var data = activity.Intent?.Data?.ToString();

                        if (action == Android.Content.Intent.ActionView && data is not null)
                        {
                            Task.Run(() => HandleAppLink(data));
                        }
                    });
                });
#endif
            });

#if DEBUG
        builder.Logging.AddDebug();
#endif

        return builder.Build();
    }

    static void HandleAppLink(string url)
    {
        if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out var uri))
            App.Current?.SendOnAppLinkRequestReceived(uri);
    }
}

Die Intent.Action-Eigenschaft ruft die Aktion ab, die der eingehenden Absicht zugeordnet ist, und die Intent.Data-Eigenschaft ruft die Daten ab, die der eingehenden Absicht zugeordnet sind. Sofern die Absichtsaktion auf ActionView festgelegt ist, können die Absichtsdaten mit der SendOnAppLinkRequestReceived-Methode an Ihre App-Klasse übergeben werden.

Warnung

App-Links stellen einen potenziellen Angriffsvektor in Ihrer App dar. Stellen Sie daher sicher, dass Sie alle URI-Parameter überprüfen und alle falsch formatierten URIs ausschließen.

Überschreiben Sie in Ihrer App-Klasse die OnAppLinkRequestReceived-Methode, um die Absichtsdaten zu empfangen und zu verarbeiten:

namespace MyNamespace;

public partial class App : Application
{
    public App()
    {
        InitializeComponent();

        MainPage = new AppShell();
    }

    protected override async void OnAppLinkRequestReceived(Uri uri)
    {
        base.OnAppLinkRequestReceived(uri);

        // Show an alert to test that the app link was received.
        await Dispatcher.DispatchAsync(async () =>
        {
            await Windows[0].Page!.DisplayAlert("App link received", uri.ToString(), "OK");
        });

        Console.WriteLine("App link: " + uri.ToString());
    }
}

Im obigen Beispiel zeigt die OnAppLinkRequestReceived-Überschreibung den App-Link-URI an. In der Praxis sollte der App-Link Benutzer und Benutzerinnen direkt und ohne Unterbrechungen zu den Inhalten weiterleiten, die durch den URI dargestellt sind, ohne dass sie aufgefordert werden, Anmeldeinformationen anzugeben. Daher rufen Sie die Navigation zu den Inhalten, die der URI darstellt, über die OnAppLinkRequestReceived-Überschreibung auf.

Wenn die Datei mit Links zu digitalen Ressourcen ordnungsgemäß gehostet wird, können Sie die Android Debug Bridge adb mit dem Aktivitäts-Manager-Tool am verwenden, um das Öffnen eines URI zu simulieren, und so sicherstellen, dass Ihre App-Links ordnungsgemäß funktionieren. Der folgende Befehl versucht beispielsweise, eine Ziel-App-Aktivität anzuzeigen, die einem URI zugeordnet ist:

adb shell am start -W -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d YOUR_URI_HERE

Dieser Befehl sendet eine Absicht, die Android an Ihre mobile App weiterleiten soll, wodurch die für den URI registrierte Aktivität gestartet und angezeigt werden sollte.

Hinweis

Sie können adb in einem Emulator oder auf einem Gerät ausführen.

Darüber hinaus können Sie die bestehenden Verarbeitungsrichtlinien für Links zu den auf einem Gerät installierten Apps anzeigen:

adb shell dumpsys package domain-preferred-apps

Mit diesem Befehl zeigen Sie die folgenden Informationen an:

  • Paket: der Paketname der App
  • Domäne: die Domänen (durch Leerzeichen getrennt), deren Weblinks von der App verarbeitet werden
  • Status: der aktuelle Status der Linkverarbeitung für die App. Der Wert always bedeutet, dass die App AutoVerify auf true festgelegt und die Systemüberprüfung bestanden hat. Es folgt eine hexadezimale Zahl, die den Datensatz der Einstellung darstellt.

Weitere Informationen zum Befehl adb finden Sie unter Android Debug Bridge.

Darüber hinaus können Sie Android-App-Links auch über die Play Console verwalten und überprüfen. Weitere Informationen finden Sie unter Verwalten und Überprüfen von Android-App-Links auf developer.android.com.

Hinweise zur Problembehandlung finden Sie unter Beheben häufiger Implementierungsfehler auf developer.android.com.