Welchen Fehler bekommen Sie? Dies ist keine Frage zu xcode .
JAL
Es schlägt fehl "wenn UIApplication.sharedApplication (). CanOpenURL (instagramURL!)" Die Überprüfung
Sk.Azad
Bitte lesen Sie den Artikel hier : kwardhare.com/post/121196006730/… In iOS 9 müssen Sie angeben, nach welchen URL-Schemata Ihre App sucht (ich habe dies nicht selbst getan)
Gesetz vom
3
Fügen Sie dies Ihrer info.plist-Datei hinzu <key> LSApplicationQueriesSchemes </ key> <array> <string> URLScma1 </ string> <string> URLScma2 </ string> <string> URLScma3 </ string> </ array>
Kamleshwar
Antworten:
210
iOS 9 hat eine kleine Änderung an der Handhabung des URL-Schemas vorgenommen. Sie müssen die URLs auflisten, die Ihre App zur Verwendung des LSApplicationQueriesSchemesSchlüssels in Ihrer App aufruft Info.plist.
Wenn Sie die Methode "canOpenURL" für eine URL aufrufen, die nicht in Ihrer Whitelist enthalten ist, wird "NO" zurückgegeben, auch wenn eine App installiert ist, die sich für dieses Schema registriert hat. Ein Syslog-Eintrag "Diese App darf nicht nach Schema xxx abfragen" wird angezeigt.
Wenn Sie die Methode "openURL" für eine URL aufrufen, die nicht in Ihrer Whitelist enthalten ist, schlägt dies unbemerkt fehl. Ein Syslog-Eintrag "Diese App darf nicht nach Schema xxx abfragen" wird angezeigt.
Der Autor spekuliert auch, dass dies ein Fehler mit dem Betriebssystem ist und Apple dies in einer späteren Version beheben wird.
Fügen Sie zur Verdeutlichung NICHT ": //" in die Zeichenfolge einer bestimmten App ein, die in das LSApplicationQueriesSchemes-Array aufgenommen werden soll, dh "comgooglemaps: //". Wenn Sie ": //" einschließen, gibt canOpenUrl: NO zurück und gibt das Syslog / den Fehler "Diese App darf nicht nach Schema xxx abfragen" an. Wenn Sie jedoch den eigentlichen Aufruf von canOpenUrl: ausführen, müssen Sie weiterhin den Doppelpunkt "canOpenUrl: @" comgooglemaps: "einfügen.
EmphaticArmPump
5
Apple hat dies in einem kürzlich veröffentlichten Update behoben. -openURL:funktioniert immer, obwohl -canOpenURL:begrenzt ist.
Tim Johnsen
Was ist der Sinn davon? Wo ist die Sicherheit, wenn ich einfach alles in der Liste auflisten und trotzdem danach fragen kann?
Maciej Swic
@MaciejSwic Ein Grund ist, dass Sie die Liste nicht ändern können, ohne sie erneut an Apple zu senden.
Gesetze
Beachten Sie, dass sich all dies nur auf Apps bezieht, die nur mit iOS SDK 9 kompiliert wurden. "Wenn Sie nicht mit iOS SDK 9.0 neu kompilieren, ist Ihre App auf 50 verschiedene Schemata beschränkt (Aufrufe von canOpenURL geben anschließend NO zurück)", wie unter developer.facebook.com/docs/ios/ios9
mkll
158
Wie oben erwähnt, möchten Sie einen Schlüssel in die Info-Liste aufnehmen. Hier ist die Liste für die meisten sozialen Netzwerke
Fast gut. Im Oktober 2015 habe ich einige Fehler mit seltsamen URLs aus Facebook-Freigabedialogen erhalten. Ich habe sie als Antwort hinzugefügt. Sie können sie gerne zu Ihrer hinzufügen, was in der Tat richtig ist.
Elbuild
1
und Ha://add/[username]um Freunde Snapchat in Swift 3
hinzuzufügen
87
Dies ist eine neue Sicherheitsfunktion von iOS 9. Weitere Informationen finden Sie in WWDC 2015 Session 703 .
Jede mit SDK 9 erstellte App muss einen LSApplicationQueriesSchemesEintrag in ihrer Plist-Datei bereitstellen und angeben, welche Schemata sie abfragen möchte.
Um die Dinge klar zu machen. Wird dies solche Apps ausschließen, mit denen der Benutzer sein eigenes URL-Schema eingeben und das ausführen kann?
Jonny
@Jonny Nein, da Sie immer noch versuchen können, eine URL mit zu öffnen openURL:. Und es wird Ihnen sagen, ob das Öffnen erfolgreich war oder nicht.
Leo Natan
Ja, aber canOpenURL kann nicht verwendet werden, sodass wir dem Benutzer nicht sagen können, ob es funktioniert oder nicht. Er muss es nur selbst versuchen.
Jonny
Ich möchte Google Maps öffnen. Was muss ich in das URL-Schema einfügen?
Codierung22
25
Angenommen, zwei Apps TestA und TestB. TestB möchte abfragen, ob TestA installiert ist. "TestA" definiert das folgende URL-Schema in seiner Datei info.plist:
In iOS9 wird normalerweise NO zurückgegeben, da "TestA" zum Eintrag LSApplicationQueriesSchemes in der Datei info.plist von TestB hinzugefügt werden muss. Dazu fügen Sie der info.plist-Datei von TestB den folgenden Code hinzu:
Warten Sie, sollte nicht der Zeichenfolgenwert des LSApplicationQueriesSchemes-Schlüssels als "testA" in into.plist der TestB-App angegeben werden?
Nik Yekimov
22
Aus, Sitzung 703 WWDC 2015:
Sie können weiterhin URL-Schemata verwenden, wenn Sie Ihre App für iOS 9 erstellen und URL-Schemata aufrufen möchten. Sie müssen sie jetzt in der Info.plist Ihrer Apps deklarieren. Es gibt einen neuen Schlüssel, LSApplicationQueriesSchemesund hier müssen Sie die Liste der Schemata hinzufügen, für die canOpenURL verwendet werden soll.
Ja, das ist es nicht. Es wird immer noch nicht funktionieren comgooglemaps, auch mit der info.plist
Radu
Hast du eine Lösung dafür gefunden?
Salman Hasrat Khan
1
Ein Bild sagt mehr als 1000 Worte. Danke für den Screenshot. es war alles was ich brauchte.
Sean808080
3
Das Teilen von Facebook über einen Freigabedialog schlägt auch mit der Antwort von @Matthieu fehl (was für die übrigen sozialen URLs zu 100% korrekt ist). Ich musste eine Reihe von URLs hinzufügen, die ich vom Facebook SDK umgekehrt habe.
Es ist wichtig zu beachten, dass es einen Fehler mit Jailbreak-Telefonen auf 9.0.x gab, der URL-Schemata brach. Wenn Sie ein Gerät mit Jailbreak verwenden, müssen Sie Patcyh in Cydia aktualisieren
Nun, Sie können eine App direkt durch Aufrufen von openURL:oder openURL:options:completionHandler:(ab iOS 10) öffnen, ohne die bedingte Prüfung durchzuführen canOpenURL:. Bitte lesen Sie den Diskussionsabschnitt im Apple-Dokument für canOpenURL: -Methode, in dem Folgendes steht:
Die openURL: -Methode ist nicht durch die LSApplicationQueriesSchemesAnforderung eingeschränkt.
Es scheint, dass sich niemand mit der Angabe von URLs mit eingebetteten Parametern befasst hat. Bei jeder URL, die Parameter enthält, kann die spezifische URL in LSApplicationsQueriesSchemes nicht angegeben werden. Angenommen, ich habe eine E-Mail-App, die die E-Mail-Adresse des Absenders übergibt:
Huh? Was Sie in die Liste aufnehmen sollten, ist myemail. Parameter spielen hier keine Rolle.
Leo Natan
0
Apple hat die canOpenURL-Methode unter iOS 9 geändert. Apps, die unter iOS 9 und iOS 10 nach URL-Schemata suchen, müssen diese Schemata deklarieren, wenn sie an Apple gesendet werden.
Als ich heute versuchte, Facebook von meiner eigenen App aus anzurufen, stellte ich fest, dass es keinen LSApplicationQueriesSchemesSchlüssel gibt, den ich hinzufügen kann Info.plist(Xcode Version 8.2.1 (8C1002)). Ich habe das Info.plistmit Sublime Text geöffnet und manuell in die Datei eingefügt, dann hat es funktioniert. Wenn Sie den Schlüssel nicht finden können, fügen Sie ihn einfach selbst hinzu.
+canOpenURL:
zurück?Antworten:
iOS 9 hat eine kleine Änderung an der Handhabung des URL-Schemas vorgenommen. Sie müssen die URLs auflisten, die Ihre App zur Verwendung des
LSApplicationQueriesSchemes
Schlüssels in Ihrer App aufruftInfo.plist
.Siehe Beitrag hier: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes
Die Hauptschlussfolgerung lautet:
Der Autor spekuliert auch, dass dies ein Fehler mit dem Betriebssystem ist und Apple dies in einer späteren Version beheben wird.
quelle
-openURL:
funktioniert immer, obwohl-canOpenURL:
begrenzt ist.Wie oben erwähnt, möchten Sie einen Schlüssel in die Info-Liste aufnehmen. Hier ist die Liste für die meisten sozialen Netzwerke
* Die ersten 3 Spiele Facebook (FBSDK 4.6): fbapi, fbauth2, fbshareextension. "Ha" ist für Snapchat
quelle
Ha://add/[username]
um Freunde Snapchat in Swift 3Dies ist eine neue Sicherheitsfunktion von iOS 9. Weitere Informationen finden Sie in WWDC 2015 Session 703 .
Jede mit SDK 9 erstellte App muss einen
LSApplicationQueriesSchemes
Eintrag in ihrer Plist-Datei bereitstellen und angeben, welche Schemata sie abfragen möchte.quelle
openURL:
. Und es wird Ihnen sagen, ob das Öffnen erfolgreich war oder nicht.Angenommen, zwei Apps TestA und TestB. TestB möchte abfragen, ob TestA installiert ist. "TestA" definiert das folgende URL-Schema in seiner Datei info.plist:
Die zweite App "TestB" versucht herauszufinden, ob "TestA" installiert ist, indem sie Folgendes aufruft:
In iOS9 wird normalerweise NO zurückgegeben, da "TestA" zum Eintrag LSApplicationQueriesSchemes in der Datei info.plist von TestB hinzugefügt werden muss. Dazu fügen Sie der info.plist-Datei von TestB den folgenden Code hinzu:
Eine funktionierende Implementierung finden Sie hier: https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example
quelle
Aus, Sitzung 703 WWDC 2015:
quelle
Das Teilen von Facebook über einen Freigabedialog schlägt auch mit der Antwort von @Matthieu fehl (was für die übrigen sozialen URLs zu 100% korrekt ist). Ich musste eine Reihe von URLs hinzufügen, die ich vom Facebook SDK umgekehrt habe.
quelle
In Swift 4.2 und Xcode 10.1
In info.plist müssen CFBundleURLSchemes und LSApplicationQueriesSchemes hinzugefügt werden.
-> Wählen Sie info.plist in Ihrem Projekt,
-> Rechtsklick,
-> Wählen Sie Als Quellcode öffnen
Siehe den folgenden Screenshot
-> XML-Datei wird geöffnet
-> Kopieren - Einfügen des folgenden Codes und Ersetzen durch Ihre IDs
CFBundleURLSchemes und LSApplicationQueriesSchemes für Google Mail, FB, Twitter und verlinkt in.
Siehe unten Bildschirm Ihre endgültige info.plist Datei ist
quelle
Es ist wichtig zu beachten, dass es einen Fehler mit Jailbreak-Telefonen auf 9.0.x gab, der URL-Schemata brach. Wenn Sie ein Gerät mit Jailbreak verwenden, müssen Sie Patcyh in Cydia aktualisieren
quelle
Nun, Sie können eine App direkt durch Aufrufen von
openURL:
oderopenURL:options:completionHandler:
(ab iOS 10) öffnen, ohne die bedingte Prüfung durchzuführencanOpenURL:
. Bitte lesen Sie den Diskussionsabschnitt im Apple-Dokument für canOpenURL: -Methode, in dem Folgendes steht:quelle
Es scheint, dass sich niemand mit der Angabe von URLs mit eingebetteten Parametern befasst hat. Bei jeder URL, die Parameter enthält, kann die spezifische URL in LSApplicationsQueriesSchemes nicht angegeben werden. Angenommen, ich habe eine E-Mail-App, die die E-Mail-Adresse des Absenders übergibt:
Die einzige Möglichkeit, es in iOS9 zum Laufen zu bringen, besteht darin, alle Parameter zu entfernen.
quelle
myemail
. Parameter spielen hier keine Rolle.Apple hat die canOpenURL-Methode unter iOS 9 geändert. Apps, die unter iOS 9 und iOS 10 nach URL-Schemata suchen, müssen diese Schemata deklarieren, wenn sie an Apple gesendet werden.
quelle
Fügen Sie für PayPal die folgenden URL-Schemata hinzu:
Verweisen Sie auf diesen Link
quelle
Swift 3.1, Swift 3.2, Swift 4
Fügen Sie diese in Info.plist hinzu:
quelle
Als ich heute versuchte, Facebook von meiner eigenen App aus anzurufen, stellte ich fest, dass es keinen
LSApplicationQueriesSchemes
Schlüssel gibt, den ich hinzufügen kannInfo.plist
(Xcode Version 8.2.1 (8C1002)). Ich habe dasInfo.plist
mit Sublime Text geöffnet und manuell in die Datei eingefügt, dann hat es funktioniert. Wenn Sie den Schlüssel nicht finden können, fügen Sie ihn einfach selbst hinzu.quelle