Aşağıdaki URL iOS 8.3 ve önceki sürümlerde açılır, ancak çalışmaz ve iOS 9
let instagramURL = NSURL(string: "instagram://app")
URL neden açılmıyor?
Aşağıdaki URL iOS 8.3 ve önceki sürümlerde açılır, ancak çalışmaz ve iOS 9
let instagramURL = NSURL(string: "instagram://app")
URL neden açılmıyor?
Yanıtlar:
iOS 9, URL düzeninin işlenmesinde küçük bir değişiklik yaptı. Uygulamanızın LSApplicationQueriesSchemes
anahtarınızı kullanarak çağıracağı URL'leri beyaz listeye eklemelisiniz Info.plist
.
Lütfen buradaki gönderiye bakın: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes
Ana sonuç şudur:
Beyaz listenizde olmayan bir URL'de “canOpenURL” yöntemini çağırırsanız, bu şemayı işlemek için kayıtlı bir uygulama olsa bile “NO” döndürür. “Bu uygulamanın şema xxx için sorgulamasına izin verilmiyor” syslog girişi görünecektir.
Beyaz listenizde olmayan bir URL'de “openURL” yöntemini çağırırsanız sessizce başarısız olur. “Bu uygulamanın şema xxx için sorgulamasına izin verilmiyor” syslog girişi görünecektir.
Yazar ayrıca bunun işletim sistemiyle ilgili bir hata olduğunu ve Apple'ın bunu sonraki bir sürümde çözeceğini tahmin ediyor.
-openURL:
olmasına rağmen her zaman çalışır -canOpenURL:
.
Yukarıda belirtildiği gibi, bilgi plistine bir anahtar eklemek istiyorsunuz, işte çoğu sosyal ağ için liste
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>fbapi</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
<string>twitter</string>
<string>viber</string>
<string>whatsapp</string>
<string>wechat</string>
<string>line</string>
<string>instagram</string>
<string> instagram-stories</string>
<string>kakaotalk</string>
<string>mqq</string>
<string>vk</string>
<string>comgooglemaps</string>
<string>googlephotos</string>
<string>ha</string>
<string>yammer</string>
</array>
* İlk 3 maç Facebook (FBSDK 4.6): fbapi, fbauth2, fbshareextension. "Ha" snapchat içindir
Ha://add/[username]
hızlıca arkadaşlarına 3
Bu, iOS 9'un yeni bir güvenlik özelliğidir. WWDC 2015 Oturum 703'ü izleyin Daha fazla bilgi için .
SDK 9 ile oluşturulan herhangi bir uygulamanın LSApplicationQueriesSchemes
plist dosyasında hangi şemaları sorgulamaya çalıştığını bildiren bir giriş sağlaması gerekir .
<key>LSApplicationQueriesSchemes</key>
<array>
<string>urlscheme</string>
<string>urlscheme2</string>
<string>urlscheme3</string>
<string>urlscheme4</string>
</array>
openURL:
. Ve açmanın başarılı olup olmadığını söyleyecektir.
TestA ve TestB olmak üzere iki uygulama varsayılmaktadır. TestB, TestA yüklüyse sorgulamak istiyor. "TestA", info.plist dosyasında aşağıdaki URL şemasını tanımlar:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>testA</string>
</array>
</dict>
</array>
İkinci uygulama "TestB" arayarak "TestA" yüklü olup olmadığını bulmaya çalışır:
[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestA://"]];
Ancak testB'nin info.plist dosyasındaki LSApplicationQueriesSchemes girişine "TestA" eklenmesi gerektiğinden, bu durum iOS9'da NO değerini döndürür. Bu, TestB'nin info.plist dosyasına aşağıdaki kod eklenerek yapılır:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>TestA</string>
</array>
Çalışan bir uygulama burada bulunabilir: https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example
Oturum 703 WWDC 2015'ten:
İOS 9 için uygulamanızı oluştururken URL şemalarını kullanmaya devam edebilirsiniz ve URL şemalarını aramak istiyorsanız, artık bunları uygulama Info.plist'inizde bildirmeniz gerekecektir. Yeni bir anahtar var
LSApplicationQueriesSchemes
ve burada canOpenURL olmasını istediğiniz şemaların listesini eklemeniz gerekecek.
Paylaşım iletişim kutusundan Facebook paylaşımı @Matthieu yanıtıyla bile başarısız olur (diğer sosyal URL'ler için% 100 doğrudur). Facebook SDK'sından geri döndürdüğüm bir URL kümesi eklemek zorunda kaldım.
<array>
<string>fbapi</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
<string>twitter</string>
<string>whatsapp</string>
<string>wechat</string>
<string>line</string>
<string>instagram</string>
<string>kakaotalk</string>
<string>mqq</string>
<string>vk</string>
<string>comgooglemaps</string>
<string>fbapi20130214</string>
<string>fbapi20130410</string>
<string>fbapi20130702</string>
<string>fbapi20131010</string>
<string>fbapi20131219</string>
<string>fbapi20140410</string>
<string>fbapi20140116</string>
<string>fbapi20150313</string>
<string>fbapi20150629</string>
</array>
Swift 4.2 ve Xcode 10.1'de
İnfo.plist içinde CFBundleURLSchemes ve LSApplicationQueriesSchemes eklemeniz gerekir.
-> Projenizde info.plist seçin,
-> sağ tıklama,
-> Kaynak Kodu Olarak Aç'ı seçin
Aşağıdaki ekran görüntüsüne bakın
-> xml dosyası açılacak
-> kopyala - aşağıdaki kodu yapıştırın ve kimliğinizle değiştirin
CFBundleURLSchemes ve LSApplicationQueriesGmail, fb, twitter ve bağlantılı için kimyasallar.
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>li5****5</string>
<string>com.googleusercontent.apps.8***************5f</string>
<string>fb8***********3</string>
<string>twitterkit-s***************w</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>8*********3</string>
<key>FacebookDisplayName</key>
<string>K************ app</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-share-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>twitter</string>
<string>twitterauth</string>
<string>linkedin</string>
<string>linkedin-sdk2</string>
<string>linkedin-sdk</string>
</array>
Son info.plist dosyanızın ekranına bakın.
Bir uygulamayı koşullu kontrol yapmadan openURL:
veya openURL:options:completionHandler:
(iOS 10'dan itibaren) doğrudan arayarak açabilirsiniz canOpenURL:
. Lütfen tartışma bölümünü okuyun yer yöntemle: canOpenURL Apple doc diyor ki:
openURL: yöntemi
LSApplicationQueriesSchemes
gereksinim tarafından kısıtlanmaz .
Yerleşik parametrelerle URL'lerin nasıl belirtileceğini hiç kimse ele almamış gibi görünüyor. Parametreleri içeren URL'ler, LSApplicationsQueriesSchemes içinde belirli URL'yi belirtmek mümkün olmayacaktır. Örneğin, gönderenlerin e-posta adresini geçen bir e-posta uygulamam olduğunu varsayalım:
myemail://mailto?bob@gmail.com
İOS9'da çalışmasını sağlamanın tek yolu herhangi bir parametreyi kaldırmaktır.
myemail
. Parametreler burada bir rol oynamaz.
Swift 3.1, Swift 3.2, Swift 4
if let urlFromStr = URL(string: "instagram://app") {
if UIApplication.shared.canOpenURL(urlFromStr) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(urlFromStr, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(urlFromStr)
}
}
}
Bunları Info.plist'e ekleyin:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>instagram</string>
</array>
Bugün kendi uygulamamdan Facebook'u aramaya çalıştığımda LSApplicationQueriesSchemes
, Info.plist
(Xcode Sürüm 8.2.1 (8C1002)) 'e ekleyebileceğim bir anahtar olmadığını gördüm . Sublime TextInfo.plist
ile açtım ve manuel olarak dosyaya ekledim, sonra çalıştı. Sadece anahtarı bulamazsanız, sadece kendiniz ekleyin.
+canOpenURL:
dönüyor?