Jaki błąd otrzymujesz? To nie jest kwestia xcode .
JAL
Nie udaje się „jeśli UIApplication.sharedApplication (). CanOpenURL (instagramURL!)” Sprawdzanie
Sk.Azad
Zobacz artykuł tutaj: awkwardhare.com/post/121196006730/ ... W iOS 9 musisz określić, jakich schematów adresów URL szuka Twoja aplikacja (sam tego nie zrobiłem)
thelaws
3
Dodaj to do swojego pliku info.plist <key> LSApplicationQueriesSchemes </key> <array> <string> URLScma1 </string> <string> URLScma2 </string> <string> URLScma3 </string> </array>
Kamleshwar
Odpowiedzi:
210
iOS 9 dokonał niewielkiej zmiany w obsłudze schematu URL. Musisz umieścić na białej liście adresy URL, które aplikacja będzie wywoływać przy użyciu LSApplicationQueriesSchemesklucza z pliku Info.plist.
Jeśli wywołasz metodę „canOpenURL” w przypadku adresu URL, którego nie ma na Twojej białej liście, zwróci ona wartość „NIE”, nawet jeśli jest zainstalowana aplikacja, która została zarejestrowana do obsługi tego schematu. Zostanie wyświetlony wpis syslog „Ta aplikacja nie może wysyłać zapytań o schemat xxx”.
Jeśli wywołasz metodę „openURL” w przypadku adresu URL, którego nie ma na Twojej białej liście, po cichu zakończy się niepowodzeniem. Zostanie wyświetlony wpis syslog „Ta aplikacja nie może wysyłać zapytań o schemat xxx”.
Autor spekuluje również, że jest to błąd w systemie operacyjnym i Apple naprawi to w kolejnej wersji.
Dla wyjaśnienia NIE umieszczaj „: //” w ciągu znaków określonej aplikacji, która ma zostać umieszczona na białej liście w tablicy LSApplicationQueriesSchemes, tj. „Comgooglemaps: //”. Jeśli dodasz „: //” canOpenUrl: zwróci NIE i dostarczy „Ta aplikacja nie może wysyłać zapytań o schemat xxx” syslog / error. Jednakże, kiedy faktycznie wywołujesz canOpenUrl: nadal musisz uwzględnić dwukropek, tj. CanOpenUrl: @ "comgooglemaps:".
EmphaticArmPump
5
W rzeczywistości Apple naprawił to w ostatniej aktualizacji. -openURL:zawsze działa, mimo że -canOpenURL:jest ograniczony.
Tim Johnsen
Jaki to ma sens? Gdzie jest bezpieczeństwo, jeśli mogę po prostu wymienić wszystko w plist i nadal o to pytać?
Maciej Swic
@MaciejSwic Jednym z powodów jest to, że nie możesz zmienić listy bez ponownego przesłania jej do Apple.
thelaws
Zauważ, że wszystko to dotyczy tylko aplikacji skompilowanych na iOS SDK 9. „Jeśli nie dokonujesz ponownej kompilacji z iOS SDK 9.0, Twoja aplikacja jest ograniczona do 50 różnych schematów (wywołania canOpenURL zwracają potem NIE)”, jak określono na developers.facebook.com/docs/ios/ios9
mkll
158
Jak wspomniano powyżej, chcesz dodać klucz do listy informacyjnej, oto lista większości sieci społecznościowych
ale jeśli chcę przekierować na jakąkolwiek stronę książki na Facebooku, taką jak „ facebook.com/ .... ", Po dodaniu fb tylko jego wrkng
siva krishna
Prawie dobrze. W październiku 2015 dostałem kilka błędów z dziwnymi adresami URL z okien dialogowych udostępniania na Facebooku. Dodałem je jako odpowiedź, nie krępuj się, aby dodać ją do twojej, co jest rzeczywiście poprawne.
elbuild
1
i Ha://add/[username]dodać znajomych snapchat w Swift 3
EssamSoft
87
Jest to nowa funkcja zabezpieczeń systemu iOS 9. Obejrzyj sesję 703 WWDC 2015, aby uzyskać więcej informacji.
Każda aplikacja zbudowana za pomocą SDK 9 musi podać LSApplicationQueriesSchemeswpis w swoim pliku plist, deklarując, które schematy próbuje zapytać.
Aby wszystko było jasne. Czy to wykluczy takie aplikacje, które pozwalają użytkownikowi wprowadzić własny schemat adresu URL + wykonać to?
Jonny
@Jonny Nie, ponieważ nadal możesz spróbować otworzyć dowolny adres URL za pomocą openURL:. I powie ci, czy otwarcie się udało, czy nie.
Leo Natan,
Tak, ale nie można użyć canOpenURL, więc nie możemy powiedzieć użytkownikowi, czy zadziała, czy nie, po prostu musi spróbować sam.
Jonny
Chcę otworzyć mapy google, co mam umieścić w schemacie url?
kodowanie
25
Zakładając dwie aplikacje TestA i TestB. TestB chce zapytać, czy TestA jest zainstalowany. „TestA” definiuje następujący schemat adresu URL w swoim pliku info.plist:
Ale to zwykle zwróci NIE w iOS9, ponieważ „TestA” musi zostać dodany do wpisu LSApplicationQueriesSchemes w pliku info.plist TestB. Odbywa się to poprzez dodanie następującego kodu do pliku info.plist TestB:
czekaj, czy nie powinno to być ciągiem wartości klucza LSApplicationQueriesSchemes jako „testA” w into.plist aplikacji TestB?
Nik Yekimov
22
Od, Sesja 703 WWDC 2015:
Możesz nadal używać schematów adresów URL podczas tworzenia aplikacji na iOS 9 i chcesz wywoływać schematy adresów URL, musisz teraz zadeklarować je w swoich aplikacjach Info.plist. Jest nowy klucz, w LSApplicationQueriesSchemesktórym musisz dodać listę schematów, na których chcesz, aby można było otworzyć adres URL.
Tak, to nie to. Comgooglemaps nadal nie będzie działać, nawet z info.plist
Radu
czy znalazłeś na to poprawkę?
Salman Hasrat Khan
1
obraz jest wart 1000 słów. dzięki za zrzut ekranu. to było wszystko, czego potrzebowałem.
sean808080
3
Udostępnianie na Facebooku z okna udostępniania kończy się niepowodzeniem nawet przy odpowiedzi @Matthieu (która jest w 100% poprawna w przypadku pozostałych adresów społecznościowych). Musiałem dodać zestaw adresów URL, które odwróciłem z Facebook SDK.
Należy zauważyć, że w telefonach 9.0.x był błąd związany z telefonami po jailbreaku, który zepsuł schematy adresów URL. Jeśli używasz urządzenia z jailbreakiem, upewnij się, że zaktualizowałeś Patcyh w Cydii
Cóż, możesz otworzyć aplikację, dzwoniąc openURL:lub openURL:options:completionHandler:(od iOS 10) bezpośrednio, bez wykonywania kontroli warunkowej canOpenURL:. Przeczytaj sekcję dyskusji w dokumencie Apple dla metody canOpenURL:, która mówi:
metoda openURL: nie jest ograniczona przez LSApplicationQueriesSchemeswymaganie.
Wygląda na to, że nikt nie zajął się określaniem adresów URL z osadzonymi parametrami. Dowolny adres URL zawierający parametry, których nie będzie można określić w LSApplicationsQueriesSchemes. Załóżmy na przykład, że mam aplikację pocztową, która przekazuje adres e-mail nadawcy:
Co? Na liście należy dodać myemail. Parametry nie odgrywają tutaj żadnej roli.
Leo Natan
0
Firma Apple zmieniła metodę canOpenURL w systemie iOS 9. Aplikacje, które sprawdzają schematy adresów URL w systemach iOS 9 i iOS 10, muszą zadeklarować te schematy w momencie przesyłania do Apple.
Kiedy dzisiaj próbowałem zadzwonić do Facebooka z mojej własnej aplikacji, stwierdziłem, że nie ma LSApplicationQueriesSchemesklucza, który mogę dodać do Info.plist(Xcode wersja 8.2.1 (8C1002)). Otworzyłem za Info.plistpomocą Sublime Text i ręcznie dodałem go do pliku, a potem zadziałało. Tylko po to, abyś wiedział, że jeśli nie możesz znaleźć klucza, po prostu dodaj go samodzielnie.
+canOpenURL:
wraca?Odpowiedzi:
iOS 9 dokonał niewielkiej zmiany w obsłudze schematu URL. Musisz umieścić na białej liście adresy URL, które aplikacja będzie wywoływać przy użyciu
LSApplicationQueriesSchemes
klucza z plikuInfo.plist
.Zobacz post tutaj: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes
Główny wniosek jest taki, że:
Autor spekuluje również, że jest to błąd w systemie operacyjnym i Apple naprawi to w kolejnej wersji.
źródło
-openURL:
zawsze działa, mimo że-canOpenURL:
jest ograniczony.Jak wspomniano powyżej, chcesz dodać klucz do listy informacyjnej, oto lista większości sieci społecznościowych
* Pierwsze 3 pasują do Facebooka (FBSDK 4.6): fbapi, fbauth2, fbshareextension. „Ha” oznacza snapchat
źródło
Ha://add/[username]
dodać znajomych snapchat w Swift 3Jest to nowa funkcja zabezpieczeń systemu iOS 9. Obejrzyj sesję 703 WWDC 2015, aby uzyskać więcej informacji.
Każda aplikacja zbudowana za pomocą SDK 9 musi podać
LSApplicationQueriesSchemes
wpis w swoim pliku plist, deklarując, które schematy próbuje zapytać.źródło
openURL:
. I powie ci, czy otwarcie się udało, czy nie.Zakładając dwie aplikacje TestA i TestB. TestB chce zapytać, czy TestA jest zainstalowany. „TestA” definiuje następujący schemat adresu URL w swoim pliku info.plist:
Druga aplikacja „TestB” próbuje sprawdzić, czy „TestA” jest zainstalowana, wywołując:
Ale to zwykle zwróci NIE w iOS9, ponieważ „TestA” musi zostać dodany do wpisu LSApplicationQueriesSchemes w pliku info.plist TestB. Odbywa się to poprzez dodanie następującego kodu do pliku info.plist TestB:
Działającą implementację można znaleźć tutaj: https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example
źródło
Od, Sesja 703 WWDC 2015:
źródło
Udostępnianie na Facebooku z okna udostępniania kończy się niepowodzeniem nawet przy odpowiedzi @Matthieu (która jest w 100% poprawna w przypadku pozostałych adresów społecznościowych). Musiałem dodać zestaw adresów URL, które odwróciłem z Facebook SDK.
źródło
W Swift 4.2 i Xcode 10.1
W info.plist trzeba dodać CFBundleURLSchemes i LSApplicationQueriesSchemes.
-> Wybierz info.plist w swoim projekcie,
-> prawy przycisk myszy,
-> Wybierz opcję Otwórz jako kod źródłowy
Zobacz poniższy zrzut ekranu
-> plik xml zostanie otwarty
-> kopiuj - wklej poniższy kod i zamień na swoje ID
CFBundleURLSchemes i LSApplicationQueriesSchemes dla Gmaila, Fb, Twittera i połączonych.
Zobacz poniższy ekran, w którym znajduje się Twój ostateczny plik info.plist
źródło
Należy zauważyć, że w telefonach 9.0.x był błąd związany z telefonami po jailbreaku, który zepsuł schematy adresów URL. Jeśli używasz urządzenia z jailbreakiem, upewnij się, że zaktualizowałeś Patcyh w Cydii
źródło
Cóż, możesz otworzyć aplikację, dzwoniąc
openURL:
lubopenURL:options:completionHandler:
(od iOS 10) bezpośrednio, bez wykonywania kontroli warunkowejcanOpenURL:
. Przeczytaj sekcję dyskusji w dokumencie Apple dla metody canOpenURL:, która mówi:źródło
Wygląda na to, że nikt nie zajął się określaniem adresów URL z osadzonymi parametrami. Dowolny adres URL zawierający parametry, których nie będzie można określić w LSApplicationsQueriesSchemes. Załóżmy na przykład, że mam aplikację pocztową, która przekazuje adres e-mail nadawcy:
Jedynym sposobem, w jaki wydaje się, aby działał w iOS9, jest usunięcie jakichkolwiek parametrów.
źródło
myemail
. Parametry nie odgrywają tutaj żadnej roli.Firma Apple zmieniła metodę canOpenURL w systemie iOS 9. Aplikacje, które sprawdzają schematy adresów URL w systemach iOS 9 i iOS 10, muszą zadeklarować te schematy w momencie przesyłania do Apple.
źródło
W przypadku PayPal dodaj poniższe schematy adresów URL:
Skorzystaj z tego łącza
źródło
Swift 3.1, Swift 3.2, Swift 4
Dodaj te w Info.plist:
źródło
Kiedy dzisiaj próbowałem zadzwonić do Facebooka z mojej własnej aplikacji, stwierdziłem, że nie ma
LSApplicationQueriesSchemes
klucza, który mogę dodać doInfo.plist
(Xcode wersja 8.2.1 (8C1002)). Otworzyłem zaInfo.plist
pomocą Sublime Text i ręcznie dodałem go do pliku, a potem zadziałało. Tylko po to, abyś wiedział, że jeśli nie możesz znaleźć klucza, po prostu dodaj go samodzielnie.źródło