Also habe ich dieses Tutorial genau befolgt und die gleichen Werte wie die angegebenen verwendet: https://blog.branch.io/how-to-setup-universal-links-to-deep-link-on-apple-ios-9
Die Apple Association-Datei befindet sich auch im Link-Verzeichnis:
WEB_PAGE:PORT_NUMBER/apple-app-site-association
Alles scheint auf dieser Seite eingerichtet zu sein.
Ich habe die Berechtigungen hinzugefügt, das Bereitstellungsprofil aktualisiert und alles eingerichtet.
Wenn ich die App auf meinem Gerät ausführe und den Link http://WEB_PAGE:PORT_NUMBER
öffne, wird Safari immer geöffnet.
Ich habe sogar Haltepunkte in der folgenden Methode:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler
Aber zilch.
Hat jemand das perfektioniert? Fehlt mir etwas?
ios
objective-c
xcode
ios9
ios-universal-links
Legolas
quelle
quelle
Antworten:
Es gibt einige mögliche Probleme.
Versuchen Sie, Ihre Domain in diesen Link-Validator einzufügen, und stellen Sie sicher, dass keine Probleme vorliegen : https://limitless-sierra-4673.herokuapp.com/ (Gutschrift für ShortStuffSushi - siehe Repo )
iOS protokolliert eine Fehlermeldung in den Systemprotokollen, wenn TLS in der in Ihren Berechtigungen angegebenen Domäne nicht ordnungsgemäß eingerichtet ist. Es ist in den Betriebssystemprotokollen vergraben, nicht in den Anwendungsprotokollen. Die Fehlermeldung sieht folgendermaßen aus
Sep 21 14:27:01 Derricks-iPhone swcd[2044] <Notice>: 2015-09-21 02:27:01.878907 PM [SWC] ### Rejecting URL 'https://examplecustomdomain.com/apple-app-site-association' for auth method 'NSURLAuthenticationMethodServerTrust': -6754/0xFFFFE59E kAuthenticationErr
. Von hier gezogene Fehlermeldung , schnelle (unvollständige) Anweisungen zur Verwendung von CloudFlare für TLS hier .In meinen persönlichen Tests hat das Klicken / Eingeben eines Links in Safari die App noch nie direkt geöffnet. Das Klicken von anderen Apps (iMessage, Mail, Slack usw.) hat funktioniert. Andere haben berichtet, dass das Klicken auf Links in den Google-Suchergebnissen die App direkt geöffnet hat.
Beachten Sie, dass iOS die App beim Öffnen dieser URL nicht mehr öffnet , wenn ein Universal Link Ihre App erfolgreich öffnet und Sie dann zu Safari durchklicken (indem Sie in der App in der oberen rechten Ecke der Navigationsleiste auf Ihre Website tippen) . In Safari können Sie dann nach unten ziehen, um ein Banner oben auf der Seite mit "Öffnen" anzuzeigen. Ich habe viel Zeit damit verschwendet. Beachten Sie, dass durch auf die Website klicken => UL deaktivieren scheint Pfad spezifische , basierend auf den Pfaden , die Sie im Apfel-App-Ort-assocation - Datei angeben. Wenn Sie also separate Routen haben
yoursite.com/a/*
und aufyoursite.com/b/*
klickenyoursite.com/a/*
und Ihre App direkt geöffnet wird, haben Sie die Option in der oberen rechten Ecke der App, zu der Sie durchklicken könnenyoursite.com/a/*
. Wenn Sie das tun, nachfolgende Besuche beiyoursite.com/a/*
wird im Browser geöffnet, nicht in der App. Sollteyoursite.com/b/*
jedoch nicht betroffen sein und trotzdem Ihre App direkt öffnen.Lassen Sie mich wissen, wenn Sie herausfinden, worum es geht. Ich persönlich bin sehr gespannt, wie Universal Links funktionieren und welche Randfälle es gibt. Viel Glück.
quelle
Es gibt viele Möglichkeiten, wie dies schief gehen kann. Zwei Punkte haben mir Probleme gemacht:
Wenn Sie in Xcode die Berechtigung "Zugehörige Domänen" hinzufügen, muss jeder Eintrag mit
applinks:
und dann mit Ihrem Domänennamen beginnen. ZBapplinks:www.apple.com
.Obwohl Xcode eine Berechtigungsdatei für mich erstellt hat, war diese nicht in meinem Build enthalten: Ich musste manuell auf dieses Feld klicken.
Und ja, danach war es nicht notwendig, die
apple-app-site-association
Datei zu signieren : Es ist nur einfacher Text und es funktioniert, solange es über HTTPS bereitgestellt wird. (Sie müssen es jedoch noch unterschreiben, wenn Sie iOS 8 unterstützen.)quelle
In der Dokumentation zum Erstellen der Zuordnungsdatei für Universal Links ist anscheinend ein Fehler aufgetreten .
Wo steht:
es sollte sagen
Bei den meisten Apps scheinen die Team-ID und die App-Präfixe identisch zu sein. Wenn Ihre App jedoch seit vielen Jahren im Store ist, können diese Werte unterschiedlich sein.
Um diesen Wert zu ermitteln, öffnen Sie das Member Center unter https://developer.apple.com und sehen Sie sich "Zertifikate, Kennungen und Profile" an. Klicken Sie auf "Kennungen" und dann auf "App-IDs" in der Tabelle unter "Kennungen". Suchen Sie Ihre App und verwenden Sie dort den Präfixwert und die Bundle-ID, um Ihre AppID für die Zuordnungsdatei zu erstellen.
quelle
Um das Problem zu beheben, suchen Sie bei der Installation Ihrer App in der Konsolenausgabe Ihres Geräts nach "swcd", um festzustellen, ob die Registrierung Ihres universellen Links funktioniert hat oder fehlgeschlagen ist.
quelle
St.derricks Antwort ist informativ.
Damit universelle Links in der App anstelle von Safari wieder geöffnet werden können, müssen wir Folgendes tun.
quelle
app
, nur zu kopieren, zu öffnen, zur Leseliste hinzuzufügen usw.Zur Validierung
apple-app-site-association
auf der Serverseite können Sie den offiziellen Validator von Apple verwenden.https://search.developer.apple.com/appsearch-validation-tool/
quelle
Ich erkannte, dass das Problem für mich darin bestand, dass Links zum Stammverzeichnis a (z. B.
http://example.com/
) meine App nicht öffneten, aber wenn ich einen Pfad (z. B.http://example.com/mypath
) hinzufügte , funktionierte es. Das Hinzufügen"/"
zur Pfadliste führte dazu:Wie von slutsker in diesem Apple Developer Forums-Thread beantwortet .
quelle
Schnelle Schritte, um zu überprüfen, ob Sie Universal Link korrekt implementiert haben.
Tippen und halten Sie auf den Link, über den Sie die App starten möchten. Im Kontextmenü sollte "Öffnen in [Ihrem App-Namen]" angezeigt werden.
Öffnen Sie die Notes-App und geben Sie den Link ein, den Sie zum Öffnen der App erwarten. Tippen Sie auf Fertig. Der Link wird gelb und durch Tippen auf den Link sollte Ihre App und nicht Safari geöffnet werden.
Wenn der Link http://yourDomain.com die App nicht startet, versuchen Sie es mit http://yourDomain.com/yourFolder/
Wenn in Safari im Kontextmenü in Safari "In [Ihrem App-Namen] öffnen" angezeigt wird, aber durch Tippen auf den Link der Link in Safari selbst geöffnet wird, anstatt die App zu starten,
ein. Versuchen Sie, die Safari-Seite aufzurufen, die beim Klicken auf den Link geöffnet wurde, wie Sie es beim Aktualisieren tun. Es sollte ein Banner angezeigt werden, mit dem Sie Ihre App öffnen können. Tippen Sie auf das Banner, um die App zu öffnen, schließen Sie die App durch Drücken der Home-Taste, kehren Sie zur Safari zurück und versuchen Sie, die App zu starten, indem Sie erneut auf den Link tippen. Dieses Mal sollte die App gestartet werden, da durch Tippen auf das Banner die Einstellung zum Öffnen des Links in der App gespeichert werden sollte.
b. Wenn die App nach Schritt a immer noch nicht gestartet wird, senden Sie den Link per E-Mail an ein Webmail wie Google Mail, öffnen Sie die Webmail-Site in Safari und klicken Sie auf den Link. Wenn dies funktioniert, haben Sie möglicherweise versucht, die App über dieselbe Domain wie den Link zu starten. Nach allem, was ich gesehen habe, schlägt das Starten der App von derselben Domain aus meistens fehl . Wahrscheinlich wird Safari nicht prüfen wollen, ob die Ziel-URL ein universeller Link ist, wenn sich der Link in derselben Domäne befindet, in der sich der Benutzer befindet. Versuchen Sie also, die App von einer anderen Domain aus zu starten.
quelle
Es ist auch sehr wichtig, die Projektversion oder Build-Nummer nach der Integration universeller Links zu erhöhen. Selbst wenn Sie löschen / neu installieren, übernimmt iOS die Links nur, wenn Sie die Version anstoßen.
quelle
apple-app-site-association
durchging und meine Links Safari weiterhin starteten, da iOS das zwischengespeicherte Ergebnis der vorherigen Version verwendet, die das falsche AppId-Präfix hatteUniverselle Links funktionieren nicht, wenn Sie den Link in das Browser-URL-Feld einfügen.
Universelle Links funktionieren mit einem benutzergesteuerten
<a href="...">
Element, das über Domänen klickt . Beispiel: Wenn auf google.com ein universeller Link auf bnc.lt verweist, wird die App geöffnet.Universal Links funktionieren nicht mit einem benutzergesteuerten
<a href="...">
Element, das auf dieselbe Domain klickt . Beispiel: Wenn auf google.com ein Universal Link verweist, der auf einen anderen Universal Link auf google.com verweist, wird die App nicht geöffnet.Universelle Links können nicht über Javascript (in window.onload oder über einen .click () -Aufruf bei einem ausgelöst werden
<a>
Element) , es sei denn, es ist Teil einer Benutzeraktion.Quelle: https://dev.branch.io/getting-started/universal-app-links/support/ios/#appsbrowsers-that-support-universal-links
Die dritte Kugel hat mich ungefähr einen Tag gekostet, um das herauszufinden.
quelle
Für alle, die das Öffnen von (universellen) Links einfach testen möchten, können Sie den Link in Ihrem Simulator auch über das Terminal mit dem folgenden Befehl öffnen:
xcrun simctl openurl booted yourapp_or_http://yourlink
beispielsweise:
xcrun simctl openurl booted https://www.google.com
quelle
Wenn die Leute hier nach anderen Lösungen suchen, haben wir Schritt für Schritt eine Anleitung zum Debuggen von Universal Links zusammengestellt, da viele Probleme aufgetaucht sind und viele Kopfschmerzen verursacht haben.
Hör zu:
Universal Links Debugging Guide
Wenn Sie Universal Links nur neu einrichten möchten, ist diese Anleitung sehr hilfreich:
Setup-Handbuch für iOS Deep Linking
Hoffe sie sind hilfreich!
quelle
Ich dachte nur, ich würde einige Dinge hinzufügen, die ich entdeckt habe, falls in Zukunft mehr Menschen auf die gleichen Probleme stoßen wie ich. Diese hängen hauptsächlich mit Authentifizierungsfehlern zusammen.
Auch wenn Apple dies nicht explizit
apple-app-site-association
angibt, muss die Datei über https bereitgestellt werden, auch wenn sie signiert ist. Das für https verwendete Zertifikat muss auch von Apple als vertrauenswürdig eingestuft werden. Während ein Zertifikat, das dem Gerät unter Einstellungen -> Allgemein -> Profile hinzugefügt wurde, https in Safari zulässt, können universelle Links nicht funktionieren.In den Geräteprotokollen wird bei einem Authentifizierungsfehler zwischen dem Gerät und dem Server ein Wert wie folgt gedruckt
"TrustResultValue" : 4
. EinTrustResultValue
von 5 bedeutet, dass das Zertifikat für die falsche Domain bestimmt ist (z. B. test.com, bereitgestellt von www.test.com). EINTrustResultValue
von 4 bedeutet, dass das Zertifikat für diese Verwendung nicht vertrauenswürdig ist.Möglicherweise gibt es einige hilfreiche Schritte für das Debuggen sein hier . Der Abschnitt "Testen des Zugriffs auf die Apple-App-Site-Zuordnung" enthält eine schrittweise Anleitung, wie Sie sicherstellen können, dass das Gerät die
apple-app-site-association
Datei erhält . Die Schritte laufen auf Folgendes hinaus:Deinstallieren Sie die App. Dies ist erforderlich, da die Datei bei der Installation heruntergeladen wird.
Stoppen Sie die ordnungsgemäße Bereitstellung des Servers
apple-app-site-association
.Öffnen Sie in xcode Fenster -> Geräte und wählen Sie dann Ihr Gerät aus.
Öffnen Sie die Geräteprotokolle, indem Sie auf das Dreieck unten im Fenster klicken.
Löschen Sie die Protokolle, indem Sie auf den Papierkorb klicken, um alle möglicherweise verwandten Protokolle zu löschen.
Installieren Sie die App mit xcode neu, indem Sie auf die Wiedergabetaste klicken.
Wenn das Gerät nach dem Start der App die Datei korrekt anfordert, sollten die Geräteprotokolle einen Fehler enthalten, der durch Suchen nach "Apple-App-Site-Zuordnung" gefunden werden kann.
Wenn die
apple-app-site-association
Datei ordnungsgemäß bereitgestellt wird (Schritt 2 wird weggelassen), sollte kein Fehler auftreten. Stattdessen kann ein Authentifizierungsfehler angezeigt werden, wenn dies das Problem ist.quelle
Die häufigste Ursache ist, wenn der Benutzer oben rechts auf tippt und iOS anweist, die App (in diesem Fall Uber) in Zukunft NICHT mehr zu öffnen.
Ziehen Sie zum Beheben das Smart-Banner nach unten und tippen Sie auf ÖFFNEN:
Dies wird anschließend "daran erinnern", die App zu öffnen.
quelle
Wir haben diesem Speicherort eine Apple-App-Site-Zuordnungsdatei hinzugefügt :
Unter iOS 9 hat es gut funktioniert, aber unter iOS 10 hat es nicht funktioniert.
Es schien, dass das Problem mit dem bekannten Pfad zusammenhängt:
Wegen https://example.com/.well-known/apple-app-site-association Pfad zu umgeleitet https://example.com
Meiner Meinung nach unterbricht ein bekannter Pfad, wenn er irgendwie nicht richtig funktioniert, universelle Links.
quelle
Ich habe es geschafft, dass es funktioniert, aber es hat einige Zeit und Mühe gekostet. Beachten Sie, dass das Tippen auf einen Link in Safari Ihre App nicht öffnet , wenn Sie die
apple-app-site-association
Datei nicht signieren (Signieren ist optional!). Dies hat mir große Kopfschmerzen bereitet.quelle
activitycontinuation
derapple-app-site-association
JSON-Datei eine Eigenschaft hinzufügen . developer.apple.com/library/ios/documentation/UserExperience/…Ich habe fast einen Tag gebraucht, um das herauszufinden. Das Problem war, dass ich die aktualisierten Bereitstellungsprofile in XCode nicht heruntergeladen habe (danach habe ich auch XCode neu gestartet).
quelle
Aus dem App Search-Programmierhandbuch: Unterstützung universeller Links
quelle
Nach zwei Tagen stellte sich für mich heraus, dass diese Art von Links (von der Filiale)
Arbeiten Sie erst nach der Archivierung (auch Ad-hoc) der Anwendung und installieren Sie sie auf dem Telefon.
quelle
Wenn Sie Ihre
apple-app-site-association
auf Firebase hosten , stellen Sie sicher, dass Sie sie im/.well-known/
Unterverzeichnis ablegen! Es scheint, dass Xcode diese URL zuerst abfragt. Wenn dies erfolgreich ist, wird kein Versuch unternommen, die URLapple-app-site-association
im Stammverzeichnis abzufragen . Aus irgendeinem Grund haben Firebase-Ingenieure die gehosteten Websites so eingestellt, dass sie automatisch/.well-known/apple-app-site-association
mit einer leeren (aber korrekt erstellten) Zuordnungsdatei antworten , die Ihre benutzerdefinierte überschreibt, sodass Sie keine Ahnung haben, warum nichts funktioniert!quelle
Gehen Sie zu developer.apple.com und bearbeiten Sie eines Ihrer Distributionsprofile. Auf der Bearbeitungsseite können Sie ein Popup für App-IDs öffnen , in dem eine Liste Ihrer App-Namen angezeigt wird. In () runden Klammern hinter dem Namen der App werden alle Ihre tatsächlichen App-IDs angezeigt . Einige Apps haben möglicherweise Ihre Team-ID als Präfix, andere nicht . Stellen Sie sicher, dass Sie genau das verwenden, was Sie in diesem Popup-Menü innerhalb von () sehen, und fügen Sie es in das Feld appID der Apple-App-Site-Zuordnungsdetails ein. Ich hatte genau dieses Problem mit einer App und ihren universellen Links.
quelle
Das Problem für mich war die
apple-app-site-association
Datei. Laut Apple-Dokumentation ist nur der Parameter applinks erforderlich. Ich habe denactivitycontinuation
Parameter hinzugefügt und es hat funktioniert.quelle
activitycontinuation
hat es für uns behoben.Ich habe nicht genau die gleiche Problem- / Lösungskombination gesehen, die es für mich zum Laufen gebracht hat, also könnte ich auch meine hinzufügen, falls jemand das gleiche Problem hat!
Für meine App verwende ich ein benutzerdefiniertes URL-Schema (festgelegt in
APP_TARGET > Info > URL Types
) und setze das URL-Schema von hier in der Firebase-Konsole so, dass es übereinstimmt, aber immer noch nicht funktioniert.Mein Problem waren eigentlich zwei Probleme:
Achten Sie darauf, ob Sie die Option Signatur automatisch verwalten aktivieren
Wenn Sie die Xcode-Einstellung "Signatur automatisch verwalten" wie bisher überprüfen, da ich nur versucht habe, eine schnelle Demo-App zu erstellen, sollten Sie sicherstellen, dass die verwendete TeamID mit der in Ihrer Firebase-Konsole übereinstimmt. Ich ging ursprünglich zu meinem Apple Developer Account und kopierte die Team-ID von meiner Mitgliederseite. Später stellte ich jedoch fest, dass die von Xcode tatsächlich verwendete ID anders war. (Sie finden dies in
APP_TARGET > General > Signing > Signing Certificate.
Für mich sah es so ausiPhone Developer: My Name (TEAM_ID)
).Stellen Sie Ihre TeamID Ihrer Bundle-ID in Ihren URL-Typen voran
Nachdem ich sichergestellt hatte, dass diese in meiner Firebase-Konsole und in Xcode übereinstimmen, war mein nächstes Problem die Kennung für mein URL-Schema. Es ist typisch, dass Sie hier Ihre Bundle-ID verwenden, aber Firebase stellt dieser tatsächlich die Team-ID voran, die Sie in Ihrer Firebase-Konsole angegeben haben. Daher musste ich sie auch der ID im Abschnitt URL-Typen in Xcode voranstellen.
Nach diesen beiden Korrekturen und dem erneuten Herunterladen der
GoogleService-Info.plist
Datei hatte ich kein Problem damit, meine dynamischen Links zu öffnen.quelle
Nach zwei Tagen totaler Verzweiflung denke ich, dass ich es endlich behoben habe. Hier ist meine Lösung:
Es scheint, dass ältere Apps ein anderes App-Präfix verwenden als neuere Apps. Neuere Apps verwenden nur die Team-ID für diesen Zweck. Wenn das App-Präfix und die Team-ID nicht identisch sind, müssen Sie anscheinend das Feld für die Fortsetzung der Aktivität in der Zuordnungsdatei der Apple App-Site angeben:
Eine andere Sache, die ich während meiner Höllenfahrt erlebt habe, war, dass das Löschen der App und das Neustarten des Geräts die einzige Möglichkeit zu sein scheint, das Aktualisieren dieser Datei zu erzwingen.
quelle
Für mich war mein Fehler, dass unsere Website www.domain.com zu domain.com umleitet, sodass alle www.domain.com/* aus diesem Grund fehlschlagen. Hoffentlich hilft das.
quelle
Ich konnte Universal Links im iOS-Simulator mithilfe der Kalender-App testen.
Ich habe gerade ein Ereignis erstellt und die URL, die ich testen wollte, in das
URL
Feld des Ereignisses eingefügt . Wenn Sie dann das erstellte Ereignis anzeigen, können Sie einfach auf den URL-Link tippen und Ihre App sollte geöffnet werden.quelle
Nachdem ich einen Tag lang versucht hatte, dies zum Laufen zu bringen, löste ein Neustart meines Telefons das Problem.
Das Deinstallieren / Neuinstallieren der App hat ebenfalls nicht funktioniert.
quelle
Für ios13 gibt es ein neues Format - siehe https://developer.apple.com/documentation/safariservices/supporting_associated_domains_in_your_app?language=objc
Ich habe meine Datei so aktualisiert, dass sie so aussieht:
quelle
"exclude": true
, um wahr zu seincomponents
comment
Für zukünftige Leser, die diese Seite finden ...
Ich hatte eine ähnliche Situation. In meiner Situation funktionierte iOS10 jedoch mit AOK, und unabhängig davon, was ich tat (Build-Nummern erhöhen, löschen / neu installieren usw.), schien iOS9 die Arbeit zu verweigern.
Ich kam von iOS10 dazu und musste iOS9 unterstützen. In der Dokumentation hier - https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html - wird derzeit eindeutig angegeben, dass die Datei möglicherweise im Stammverzeichnis des Webservers abgelegt ist (zB
/apple-app-site-association
) oder im bekannten Ordner (zB/.well-known/apple-app-site-association
). Da ich auch Android unterstütze, das auch den bekannten Ordner für eine ähnliche Datei verwendet, habe ich beschlossen, beide dort abzulegen.Bei Neuinstallationen unter iOS10 wird die Stammdatei eindeutig angefordert, schlägt fehl, fordert dann die bekannte Datei an und ist erfolgreich.
Für iOS9 wurde die Stammdatei eindeutig angefordert, schlägt fehl und es wird nichts anderes ausgeführt.
Lösung: Wenn Sie iOS9 unterstützen, legen Sie die Datei bei ab
/apple-app-site-association
.quelle
In meinem Fall bestand mein Fehler darin, Abfrageparameter in Pfade einzufügen:
Wenn ich '? target = bestätige & *' aus den Pfaden entferne, beginnt es zu funktionieren
quelle