App-Linking in Android

In diesem Leitfaden wird erläutert, wie Android 6.0 App-Linking unterstützt. Dies ist eine Technik, mit der mobile Apps auf URLs auf Websites reagieren können. Es wird erläutert, was App-Linking ist, wie App-Linking in einer Android 6.0-Anwendung implementiert wird und wie eine Website so konfiguriert wird, dass der mobilen App Berechtigungen für eine Domäne erteilt werden.

Übersicht über App-Linking

Mobile Anwendungen leben nicht mehr in einem Silo – in vielen Fällen sind sie zusammen mit ihrer Website ein wichtiger Bestandteil ihres Unternehmens. Für Unternehmen ist es wünschenswert, ihre Webpräsenz und mobilen Apps nahtlos zu verbinden, wobei Links auf einer Website mobile Apps starten und relevante Inhalte in der jeweiligen mobilen App anzeigen. App-Linking (auch als Deep-Linking bezeichnet) ist ein Verfahren, das es einem mobilen Gerät ermöglicht, auf einen URI zu reagieren und eine mobile App zu starten, die diesem URI entspricht.

Android verarbeitet die App-Verknüpfung über das Absichtssystem . Wenn der Benutzer in einem mobilen Browser auf einen Link klickt, sendet der mobile Browser eine Absicht, die Android an eine registrierte Anwendung delegiert. Wenn Sie z. B. auf einen Link auf einer Kochwebsite klicken, wird eine mobile App geöffnet, die dieser Website zugeordnet ist, und in der App wird ein bestimmtes Rezept angezeigt. Sind mehrere Apps registriert, die diese Absicht (Intent) verarbeiten können, wird von Android ein sogenannter Vereindeutigungsdialog ausgelöst, in dem der Benutzer aufgefordert wird, die Anwendung auszuwählen, von der die Absicht verarbeitet werden soll. Beispiel:

Beispielscreenshot eines Mehrdeutigkeitsdialogfelds

Android 6.0 verbessert dies durch Verwenden von automatischer Linkverarbeitung. Android kann eine Anwendung automatisch als Standardhandler für einen URI registrieren– die App wird automatisch gestartet und navigiert direkt zur relevanten Aktivität. Wie Android 6.0 festlegt, wie ein URI verarbeitet wird, hängt von den folgenden Kriterien ab:

  1. Dem URI ist bereits eine vorhandene App zugeordnet . Der Benutzer hat möglicherweise bereits eine vorhandene App einem URI zugeordnet. In diesem Fall verwendet Android diese App weiterhin.
  2. Dem URI ist keine vorhandene App zugeordnet, aber eine unterstützende App ist installiert . In diesem Szenario hat der Benutzer keine vorhandene App angegeben, sodass Android die installierte unterstützende Anwendung verwendet, um die Anforderung zu verarbeiten.
  3. Dem URI ist keine vorhandene App zugeordnet, aber viele unterstützende Apps sind installiert . Da es mehrere Anwendungen gibt, die den URI unterstützen, wird das Mehrdeutigkeitsdialogfeld angezeigt, und der Benutzer muss auswählen, welche App den URI verarbeiten soll.

Wenn der Benutzer keine Apps installiert hat, die den URI unterstützen, und eine anschließend installiert wird, legt Android diese Anwendung als Standardhandler für den URI fest, nachdem die Zuordnung mit der Website überprüft wurde, die dem URI zugeordnet ist.

In diesem Leitfaden wird erläutert, wie eine Android 6.0-App konfiguriert wird und wie die Digital Asset Links-Datei erstellt und veröffentlicht wird, um App-Linking in Android 6.0 zu unterstützen.

Anforderungen

Für diesen Leitfaden sind Xamarin.Android 6.1 und eine App erforderlich, die für Android 6.0 (API-Ebene 23) oder höher ausgelegt ist.

App-Linking ist in früheren Versionen von Android möglich, indem das Rivets NuGet-Paket aus dem Xamarin Component-Store verwendet wird. Das Rivets-Paket ist nicht mit App-Linking in Android 6.0 kompatibel, denn es unterstützt Android 6.0-App-Linking nicht.

Konfigurieren von App-Linking in Android 6.0

Das Einrichten von App-Links in Android 6.0 besteht aus zwei Hauptschritten:

  1. Hinzufügen eines oder mehrerer Absichtsfilter für die Website-URI' – die Absichtsfilter führen Android in die Handhabung eines URL-Klicks in einem mobilen Browser.
  2. Veröffentlichen einer JSON-Datei für Digital Asset Links auf der Website – dies ist eine Datei, die auf eine Website hochgeladen wird und von Android verwendet wird, um die Beziehung zwischen der mobilen App und der Domäne der Website zu überprüfen. Andernfalls kann Android die App nicht als Standardhandle für URIs installieren. der Benutzer muss dies manuell tun.

Konfigurieren des Intent-Filters

Es ist erforderlich, einen Intent-Filter zu konfigurieren, der einen URI (oder eventuell einen Satz von URIs) von einer Website zu einer Aktivität in einer Android-App zuordnet. In Xamarin.Android wird diese Beziehung hergestellt, indem eine Activity mit intentFilterAttribute versehen wird. Im Intent-Filter müssen die folgenden Informationen deklariert sein:

  • Intent.ActionView – Dadurch wird der Absichtsfilter registriert, um auf Anforderungen zum Anzeigen von Informationen zu reagieren.
  • Categories – Der Absichtsfilter sollte sowohl Intent.CategoryBrowsable als auch Intent.CategoryDefault registrieren, um den Web-URI ordnungsgemäß verarbeiten zu können.
  • DataScheme– Der Absichtsfilter muss und/oder httpsdeklarierenhttp. Diese beiden Schemas sind die einzigen gültigen Schemas.
  • DataHost – Dies ist die Domäne, aus der die URIs stammen.
  • DataPathPrefix – Dies ist ein optionaler Pfad zu Ressourcen auf der Website.
  • AutoVerify – Das autoVerify Attribut weist Android an, die Beziehung zwischen der Anwendung und der Website zu überprüfen. Dies ist weiter unten ausführlicher erläutert.

Im folgenden Beispiel ist gezeigt, wie IntentFilterAttribute verwendet wird, um Links von https://www.recipe-app.com/recipes und von http://www.recipe-app.com/recipes zu verarbeiten:

[IntentFilter(new [] { Intent.ActionView },
              Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
              DataScheme = "http",
              DataHost = "recipe-app.com",
              DataPathPrefix = "/recipe",
              AutoVerify=true)]
public class RecipeActivity : Activity
{
    // Code for the activity omitted
}

Android überprüft jeden Host, der durch die Intent-Filter erkannt wurde, gegen die Digital Asset Links-Datei 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.

Android 6.0-App-Linking erfordert, dass Android die Zuordnung zwischen der App und der Website überprüft, bevor die App als Standardhandler für den URI festgelegt wird. Diese Überprüfung erfolgt, wenn die App erstmalig installiert wird. Die Digital Assets Links-Datei ist eine JSON-Datei, die von den entsprechenden Webdomänen gehostet wird.

Hinweis

Das android:autoVerify Attribut muss vom Absichtsfilter festgelegt werden. Andernfalls führt Android die Überprüfung nicht durch.

Die Datei wird vom Webmaster der Domäne im Speicherort https://domain/.well-known/assetlinks.json platziert.

Die Digital Assets Link-Datei enthält die Metadaten, die für Android erforderlich sind, um die Zuordnung zu überprüfen. Eine assetlinks.json-Datei enthält die folgenden Schlüssel-Wert-Paare:

  • namespace – der Namespace der Android-Anwendung.
  • package_name – Der Paketname der Android-Anwendung (deklariert im Anwendungsmanifest).
  • sha256_cert_fingerprints – die SHA256-Fingerabdrücke der signierten Anwendung. Weitere Informationen zum Abrufen des SHA256-Fingerabdrucks einer Anwendung finden Sie im Leitfaden Suchen der Keystore-Signatur .

Der folgende Codeausschnitt ist ein Beispiel für assetlinks.json mit einer einzigen aufgelisteten App:

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "com.example",
         "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 SHA256-Fingerabdrücke zu registrieren, um unterschiedliche Versionen oder Builds Ihrer App zu unterstützen. Die nächste assetlinks.json-Datei ist ein Beispiel für die Registrierung mehrerer Apps:

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.puppies.app",
         "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": "example.com.monkeys.app",
         "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"
         ]
      }
   }
]

Auf der Google Digital Asset Links-Website wird ein Onlinetool bereitgestellt, das beim Erstellen und Testen der Digital Asset Links-Datei hilfreich sein kann.

Nachdem Sie App-Links implementiert haben, sollten die verschiedenen Bestandteile getestet werden, um sicherzustellen, dass sie erwartungsgemäß funktionieren.

Durch Verwenden von Googles Digital Asset Links-API lässt sich bestätigen, dass die Digital Asset Links-Datei ordnungsgemäß formatiert ist und gehostet wird. Dies ist im folgenden Beispiel gezeigt:

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

Es können zwei Tests vorgenommen werden, um sich zu vergewissern, dass die Intent-Filter ordnungsgemäß konfiguriert sind und dass die App als Standardhandler für einen URI festgelegt ist:

  1. Die Digital Asset Links-Datei wird, wie oben beschrieben, ordnungsgemäß gehostet. Im ersten Test wird eine Absicht (Intent) gesendet, die von Android an die mobile App weitergeleitet werden soll. Die Android-App sollte die Aktivität starten und anzeigen, die für die URL registriert ist. Geben Sie an einer Eingabeaufforderung Folgendes ein:

    $ adb shell am start -a android.intent.action.VIEW \
        -c android.intent.category.BROWSABLE \
        -d "http://<domain1>/recipe/scalloped-potato"
    
  2. Zeigen Sie die vorhandenen Linkverarbeitungsrichtlinien für die Apps an, die auf einem bestimmten Gerät installiert sind. Mit dem folgenden Befehl wird eine Liste der Linkrichtlinien für jeden Benutzer auf dem Gerät mit den folgenden Informationen erstellt. Geben Sie an der Eingabeaufforderung den folgenden Befehl ein:

    $ adb shell dumpsys package domain-preferred-apps
    
    • Package – Der Paketname der Anwendung.
    • Domain – Die Domänen (durch Leerzeichen getrennt), deren Weblinks von der Anwendung behandelt werden
    • Status– Dies ist der aktuelle link-handling-status für die App. Der Wert von bedeutet immer , dass die Anwendung android:autoVerify=true die Systemüberprüfung deklariert und bestanden hat. Darauf folgt eine hexadezimale Zahl, die den Eintrag der Voreinstellung des Android-Systems darstellt.

    Beispiel:

    $ adb shell dumpsys package domain-preferred-apps
    
    App linkages for user 0:
    Package: com.android.vending
    Domains: play.google.com market.android.com
    Status: always : 200000002
    

Zusammenfassung

In diesem Leitfaden wurde erläutert, wie App-Linking in Android 6.0 funktioniert. Anschließend wurde dargestellt, wie eine Android 6.0-App so konfiguriert wird, dass sie App-Links unterstützt und auf diese reagiert. Schließlich wurde erläutert, wie App-Linking in einer Android-App getestet wird.