it-swarm.com.de

Wie unterstützt man Universal Links in iOS App und Setup-Server dafür?

Wie kann ich Universal Links in meiner iOS-Anwendung unterstützen und meinen Server einrichten, um Universal Links zu unterstützen?

26

Unterstützt Universal Links

Wenn Sie universelle Links unterstützen, können iOS 9-Benutzer auf einen Link zu Ihrer Website tippen und nahtlos zu Ihrer installierten App umgeleitet werden, ohne Safari zu durchlaufen. Wenn Ihre App nicht installiert ist, wird Ihre Website in Safari geöffnet, wenn Sie auf einen Link zu Ihrer Website tippen.

Hier erfahren Sie, wie Sie Ihren eigenen Server einrichten und mit den entsprechenden Links in Ihrer App umgehen.


Setup Server

Sie benötigen einen Server, der online läuft. Um Ihre iOS-App sicher mit einem Server zu verknüpfen, müssen Sie Apple) eine Konfigurationsdatei mit dem Namen Apple-app-site-association Zur Verfügung stellen. Hierbei handelt es sich um eine JSON Datei, die die Domain und unterstützte Routen.

Die Apple-app-site-association - Datei muss über HTTPS ohne Weiterleitungen unter https: // {domain}/Apple-App-Site-Association zugänglich sein.

Die Datei sieht folgendermaßen aus:

{
"applinks": {
    "apps": [ ],
    "details": [
        {
            "appID": "{app_prefix}.{app_identifier}",
            "paths": [ "/path/to/content", "/path/to/other/*", "NOT /path/to/exclude" ]
        },
        {
            "appID": "TeamID.BundleID2",
            "paths": [ "*" ]
        }
    ]
}
}

[~ # ~] note [~ # ~] - Hänge .json nicht an Apple-app-site-association Dateiname.

Die Schlüssel lauten wie folgt:
apps: Sollte ein leeres Array als Wert haben und muss vorhanden sein. So will es Apple.
details: Eine Reihe von Wörterbüchern, eines für jede von der Website unterstützte iOS-App. Jedes Wörterbuch enthält Informationen über die App, das Team und die Paket-IDs.

Es gibt 3 Möglichkeiten, Pfade zu definieren:
Static: Der gesamte unterstützte Pfad ist fest codiert, um einen bestimmten Link zu identifizieren, z./static/terms
Wildcards: Ein * kann verwendet werden, um dynamische Pfade abzugleichen, z./books/* kann mit dem Pfad zu einer beliebigen Autorenseite übereinstimmen. ? innerhalb spezifischer Pfadkomponenten, z.B. Bücher/1? kann verwendet werden, um Bücher zu finden, deren ID mit 1 beginnt.
Exclusions: Wenn Sie einen Pfad mit NOT voranstellen, wird dieser Pfad von der Übereinstimmung ausgeschlossen.

Die Reihenfolge, in der die Pfade im Array aufgeführt sind, ist wichtig. Frühere Indizes haben höhere Priorität. Sobald ein Pfad übereinstimmt, wird die Auswertung gestoppt und andere Pfade ignoriert. Jeder Pfad unterscheidet zwischen Groß- und Kleinschreibung.

Unterstützung mehrerer Domänen

Jede in der App unterstützte Domain muss eine eigene Apple-App-Site-Zuordnungsdatei zur Verfügung stellen. Wenn der von jeder Domain bereitgestellte Inhalt unterschiedlich ist, ändert sich auch der Inhalt der Datei, um die entsprechenden Pfade zu unterstützen. Andernfalls kann dieselbe Datei verwendet werden, sie muss jedoch in jeder unterstützten Domäne verfügbar sein.

Signieren der App-Site-Association-Datei

Hinweis : Sie können diesen Teil überspringen, wenn Ihr Server HTTPS zum Bereitstellen von Inhalten verwendet und zum Handbuch zur Anwendungskonfiguration wechselt.

Wenn Ihre App iOS 9 als Ziel hat und Ihr Server HTTPS zum Bereitstellen von Inhalten verwendet, müssen Sie die Datei nicht signieren. Wenn dies nicht der Fall ist (z. B. wenn Handoff unter iOS 8 unterstützt wird), muss es mit einem SSL -Zertifikat von einer anerkannten Zertifizierungsstelle signiert werden.

Hinweis : Dies ist nicht das Zertifikat, das von Apple zum Senden Ihrer App an den App Store bereitgestellt wird. Es sollte bereitgestellt werden Es wird empfohlen, dasselbe Zertifikat zu verwenden, das Sie für Ihren HTTPS Server verwenden (obwohl dies nicht erforderlich ist).

Um die Datei zu signieren, erstellen und speichern Sie zunächst eine einfache TXT-Version. Führen Sie im Terminal den folgenden Befehl aus:

cat <unsigned_file>.txt | openssl smime -sign -inkey example.com.key -signer example.com.pem -certfile intermediate.pem -noattr -nodetach -outform DER > Apple-app-site-association

Dadurch wird die signierte Datei im aktuellen Verzeichnis ausgegeben. Die Dateien example.com.key, example.com.pem Und intermediate.pem Würden Ihnen von Ihrer Zertifizierungsstelle zur Verfügung gestellt.

Hinweis : Wenn die Datei nicht signiert ist, sollte sie einen Content-Type Von application/json Haben. Ansonsten sollte es application/pkcs7-mime Sein.

Überprüfen Sie Ihren Server mit Apple App Search Validation Tool
Testen Sie Ihre Webseite für iOS 9-Such-APIs. Geben Sie eine URL ein und Applebot durchsucht Ihre Webseite und zeigt, wie Sie die besten Ergebnisse erzielen können https://search.developer.Apple.com/appsearch-validation-tool/

Website-Code

Den Website-Code finden Sie im gh-pages-Zweig unter https://github.com/vineetchoudhary/iOS-Universal-Links/tree/gh-pages


Richten Sie die iOS-Anwendung ein

Die Anwendung zielt auf iOS 9 ab und verwendet Xcode 7.2 mit Objective-C.

Aktivieren von Universal Links

Das Setup auf der App-Seite erfordert zwei Dinge:
1. Konfigurieren der App-Berechtigung und Aktivieren universeller Links.
2. Behandlung eingehender Links in Ihrem AppDelegate.

1. Konfigurieren der App-Berechtigung und Aktivieren universeller Links.
Der erste Schritt beim Konfigurieren der Berechtigungen Ihrer App besteht darin, sie für Ihre App-ID zu aktivieren. Tun Sie dies im Apple Developer Member Center. Klicken Sie auf Zertifikate, Bezeichner und Profile und dann auf Bezeichner. Wählen Sie Ihre App-ID aus (erstellen Sie sie zuerst, falls erforderlich), klicken Sie auf Bearbeiten und aktivieren Sie die Berechtigung Zugeordnete Domänen.

Als Nächstes rufen Sie das Präfix und Suffix der App-ID ab, indem Sie auf die entsprechende App-ID klicken.

Das Präfix und Suffix der App-ID sollte mit dem in der Apple-App-Site-Zuordnungsdatei übereinstimmen.

Wählen Sie als Nächstes in Xcode das Ziel Ihrer App aus, klicken Sie auf "Funktionen" und schalten Sie "Zugeordnete Domänen" auf "Ein". Fügen Sie für jede Domain, die Ihre App unterstützt, einen Eintrag hinzu, dem App-Links vorangestellt sind :.

Zum Beispiel: applinks: vineetchoudhary.github.io

Was für die Beispiel-App so aussieht: 

Hinweis : Stellen Sie sicher, dass Sie dasselbe Team ausgewählt und dieselbe Bundle-ID wie die registrierte App-ID im Member Center eingegeben haben. Stellen Sie außerdem sicher, dass die Berechtigungsdatei in Xcode enthalten ist, indem Sie die Datei auswählen und im Dateiinspektor sicherstellen, dass Ihr Ziel markiert ist.

Behandlung eingehender Links in Ihrem AppDelegate

Die Methode [UIApplicationDelegate application: continueUserActivity: restorationHandler:] In AppDelegate.m Verarbeitet eingehende Links. Sie analysieren diese URL, um die richtige Aktion in der App zu bestimmen.

Zum Beispiel in der Beispiel-App:

Ziel c

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
    if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {
        NSURL *url = userActivity.webpageURL;
        UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        UINavigationController *navigationController = (UINavigationController *)_window.rootViewController;
        if ([url.pathComponents containsObject:@"home"]) {
            [navigationController pushViewController:[storyBoard instantiateViewControllerWithIdentifier:@"HomeScreenId"] animated:YES];
        }else if ([url.pathComponents containsObject:@"about"]){
            [navigationController pushViewController:[storyBoard instantiateViewControllerWithIdentifier:@"AboutScreenId"] animated:YES];
        }
    }
    return YES;
}  

Swift:

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
      if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
          let url = userActivity.webpageURL!
          //handle url
      }
      return true
  }

iOS-Anwendungscode

Den App-Code finden Sie in der Hauptniederlassung unter https://github.com/vineetchoudhary/iOS-Universal-Links/

Hinweis:

  1. Im Allgemeinen sollte jeder unterstützte Link, auf den in Safari oder in Instanzen von UIWebView/WKWebView geklickt wird, die App öffnen.
  2. Für iOS 9.2 und weniger funktioniert dies nur auf einem Gerät. iOS 9.3 (zum Zeitpunkt des Schreibens noch in der Beta) unterstützt ebenfalls den Simulator.
  3. iOS merkt sich die Auswahl des Benutzers beim Öffnen von Universal Links. Wenn sie oben rechts auf den Navigationspfad tippen, um den Link in Safari zu öffnen, werden sie durch alle weiteren Klicks zu Safari und nicht zur App weitergeleitet. Sie können standardmäßig zum Öffnen der App zurückkehren, indem Sie im App-Banner auf der Website die Option Öffnen auswählen.

Getan. Alles dreht sich um Universal Links.


Verweise

  1. nterstütze Universal Links in deiner iOS App
80

Wenn Sie alle Posts von Vineet abgeschlossen haben und immer noch nicht funktionieren, versuchen Sie, ein Verteilungsbereitstellungsprofil zu verwenden. Ich habe alles aus dem obigen Beitrag gemacht, musste aber ein Verteilungsprofil erstellen, damit es funktioniert.

Mit dem Entwicklungsprofil hat die App die AASA-Datei erfolgreich heruntergeladen, sie öffnet jedoch nie meine Anwendung, wenn ich auf die Links drücke.

Ich hoffe es hilft.

1
mystoev

Hier ist der Code für den Umgang mit Universallinks in Swift 3+, basierend auf der Antwort von Vineet Choudhary :

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
        let url = userActivity.webpageURL {
        //handle URL
    }

    return true
}
0
Tamás Sengel