iOS 9, URL SCHEME ile Instagram uygulamasını açmıyor


138

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?


Ne +canOpenURL:dönüyor?
thelaws

Ne hatası alıyorsunuz? Bu xcode ile ilgili bir soru değil .
JAL

"UIApplication.sharedApplication (). CanOpenURL (instagramURL!)"
İse

: Burada makalesine bakın awkwardhare.com/post/121196006730/... Eğer düzenleri url uygulama (kendim yapmadım) aradığını belirtmelisiniz iOS 9
thelaws

3
Bunu info.plist dosyanıza <key> LSApplicationQueriesSchemes </key> <array> <string> URLScma1 </string> <string> URLScma2 </string> <string> URLScma3 </string> </array>
Kamleshwar

Yanıtlar:


210

iOS 9, URL düzeninin işlenmesinde küçük bir değişiklik yaptı. Uygulamanızın LSApplicationQueriesSchemesanahtarı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.


23
Bir açıklama noktası olarak, LSApplicationQueriesSchemes dizisinde beyaz listeye eklenecek belirli bir uygulamanın dizesine ": //" dahil etmeyin, örneğin "comgooglemaps: //". ": //" canOpenUrl: Eğer NO döndürür ve "Bu uygulama düzeni xxx için sorgulama izni yok" syslog / error sağlar. Ancak, canOpenUrl: 'un gerçek çağrısını yaptığınızda, iki nokta üst üste eklemeniz gerekir; yani canOpenUrl: @ "comgooglemaps:".
EmphaticArmPump

5
Apple aslında bunu son güncellemede düzeltti. sınırlı -openURL:olmasına rağmen her zaman çalışır -canOpenURL:.
Tim Johnsen

Bunun amacı ne? Ben sadece plist her şeyi listeleyebilir ve hala bunun için sorgu eğer güvenlik nerede?
Maciej Swic

@MaciejSwic Bunun bir nedeni, Apple'a yeniden göndermeden listeyi değiştirememenizdir.
thelaws

Tüm bunların yalnızca iOS SDK 9'a karşı derlenmiş uygulamalarla ilgili olduğunu unutmayın. Üzerinde belirtilen, "iOS SDK 9.0 ile yeniden derlenmesine değilseniz, uygulamanız 50 ayrı düzenleri ile sınırlıdır (canOpenURL yapılan çağrılar sonrasında HAYIR return)" developers.facebook.com/docs/ios/ios9
MKll

158

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


Teşekkürler, listeye "fb" eklemeniz gerektiğini düşünüyorum
siva krishna

1
@sivakrishna fb burada bahsedilmiyor developers.facebook.com/docs/ios/ios9
Matthieu Rouif

ama " facebook.com/ .... " gibi herhangi bir yüz kitap sayfasına yönlendirmek istersem fb sadece onun wrkng'sini ekledikten sonra
siva krishna

Neredeyse iyi. Octobr 2015'te Facebook paylaşım diyaloglarından tuhaf URL'lerle ilgili bazı hatalar aldım. Onları bir cevap olarak ekledim, sizinkine eklemekten çekinmeyin, gerçekten doğru.
elbuild

1
ve Ha://add/[username]hızlıca arkadaşlarına 3
ekledi sohbet

87

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 LSApplicationQueriesSchemesplist 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> 

Her şeyi netleştirmek için. Bu, kullanıcının kendi URL şemasını + girmesine izin veren bu tür uygulamaları reddedecek mi?
Jonny

@Jonny Hayır, çünkü kullanarak herhangi bir URL'yi açmaya çalışabilirsiniz openURL:. Ve açmanın başarılı olup olmadığını söyleyecektir.
Leo Natan

Evet ama canOpenURL kullanılamaz, bu yüzden kullanıcıya çalışıp çalışmayacağını söyleyemeyiz, sadece kendisi için denemek zorunda.
Jonny

Google haritalarını açmak istiyorum urlscheme'e ne koymalıyım?
kodlama22

25

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


bekleyin, TestB uygulaması listesine LSApplicationQueriesSchemes anahtarının "testA" olarak dize değeri olmamalı mı?
Nik Yekimov

22

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 LSApplicationQueriesSchemesve burada canOpenURL olmasını istediğiniz şemaların listesini eklemeniz gerekecek.

Örneğin, FB


1
Evet, öyle değil. İnfo.plist ile bile comgooglemaps çalışmaz
Radu

bunun için bir düzeltme buldun mu?
Salman Hasrat Khan

1
bir resim 1000 kelimeye bedeldir. ekran görüntüsü için teşekkürler. tüm ihtiyacım olan buydu.
sean808080

3

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>

Bir dokümanı görüntülemek için hangi uygulamayı kullanabilirim ve bana kodunu verebilir misiniz?
Nishat Jahan

2

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

resim açıklamasını buraya girin

-> 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.

resim açıklamasını buraya girin


1

9.0.x'te url düzenlerini bozan jailbreak yapılmış telefonlarda bir hata olduğunu not etmek önemlidir. Jailbreak yapılmış bir cihaz çalıştırıyorsanız, Cydia'daki Patcyh'i güncellediğinizden emin olun


1

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 LSApplicationQueriesSchemesgereksinim tarafından kısıtlanmaz .


0

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.


4
Ha? Pliste eklemeniz gereken şey myemail. Parametreler burada bir rol oynamaz.
Leo Natan

0

Apple, iOS 9'daki canOpenURL yöntemini değiştirdi. İOS 9 ve iOS 10'da URL Şemalarını kontrol eden uygulamalar, Apple'a gönderildikçe bu Şemaları bildirmek zorundadır.



0

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>

-1

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.