Wie kann ich Universal Links in meiner iOS
-Anwendung unterstützen und meinen Server einrichten, um Universal Links zu unterstützen?
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.
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/termsWildcards
: 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.
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.
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/
Den Website-Code finden Sie im gh-pages-Zweig unter https://github.com/vineetchoudhary/iOS-Universal-Links/tree/gh-pages
Die Anwendung zielt auf iOS 9 ab und verwendet Xcode 7.2 mit Objective-C
.
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.
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:
-(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;
}
func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
let url = userActivity.webpageURL!
//handle url
}
return true
}
Den App-Code finden Sie in der Hauptniederlassung unter https://github.com/vineetchoudhary/iOS-Universal-Links/
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.
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
}