iOS 9 tidak membuka aplikasi Instagram dengan URL SCHEME


138

URL berikut terbuka di iOS 8.3 dan lebih rendah, tetapi tidak berfungsi dan iOS 9

let instagramURL = NSURL(string: "instagram://app")

Mengapa URL tidak terbuka?


Apa yang +canOpenURL:kembali?
hukum

Kesalahan apa yang Anda dapatkan? Ini bukan pertanyaan tentang xcode .
JAL

Gagal "jika UIApplication.sharedApplication (). CanOpenURL (instagramURL!)" Yang memeriksa
Sk.Azad

Silakan lihat artikel di sini: awkwardhare.com/post/121196006730/... Di iOS 9 Anda harus menentukan skema url apa yang dicari aplikasi Anda (saya belum melakukan ini sendiri)
hukumnya

3
Tambahkan ini ke file info.plist Anda <key> LSApplicationQueriesSchemes </key> <array> <string> URLScma1 </string> <string> URLScma2 </string> <string> URLScma3 </string> </array>
Kamleshwar

Jawaban:


210

iOS 9 telah melakukan sedikit perubahan pada penanganan skema URL. Anda harus memasukkan daftar putih URL yang akan dipanggil aplikasi Anda untuk menggunakan LSApplicationQueriesSchemeskunci di Info.plist.

Silakan lihat posting di sini: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes

Kesimpulan utama adalah bahwa:

Jika Anda memanggil metode "canOpenURL" pada URL yang tidak ada dalam daftar putih Anda, itu akan mengembalikan "TIDAK", bahkan jika ada aplikasi yang diinstal yang telah terdaftar untuk menangani skema ini. "Aplikasi ini tidak diizinkan untuk meminta skema xxx" entri syslog akan muncul.

Jika Anda memanggil metode "openURL" pada URL yang tidak ada dalam daftar putih Anda, itu akan gagal secara diam-diam. "Aplikasi ini tidak diizinkan untuk meminta skema xxx" entri syslog akan muncul.

Penulis juga berspekulasi bahwa ini adalah bug dengan OS dan Apple akan memperbaikinya dalam rilis berikutnya.


23
Sebagai titik klarifikasi, JANGAN sertakan ": //" dalam string aplikasi tertentu untuk dimasukkan dalam daftar putih dalam array LSApplicationQueriesSchemes, yaitu "comgooglemaps: //". Jika Anda menyertakan ": //" canOpenUrl: akan mengembalikan NO dan memberikan "Aplikasi ini tidak diizinkan untuk meminta skema xxx" syslog / error. Namun, ketika Anda membuat panggilan canOpenUrl yang sebenarnya: Anda masih harus menyertakan titik dua yaitu canOpenUrl: @ "comgooglemaps:".
EmphaticArmPump

5
Apple, pada kenyataannya, memperbaikinya dalam pembaruan terbaru. -openURL:selalu bekerja meskipun -canOpenURL:terbatas.
Tim Johnsen

Apa gunanya ini? Di mana keamanannya jika saya bisa daftar semuanya di plist dan masih meminta untuk itu?
Maciej Swic

@MaciejSwic Salah satu alasannya adalah Anda tidak dapat mengubah daftar tanpa mengirim ulang ke Apple.
hukum

Perhatikan bahwa semua itu terkait dengan aplikasi yang dikompilasi hanya untuk iOS SDK 9. "Jika Anda tidak melakukan kompilasi ulang dengan iOS SDK 9.0, aplikasi Anda dibatasi hingga 50 skema yang berbeda (panggilan ke canOpenURL kemudian mengembalikan TIDAK)", seperti yang ditentukan pada developers.facebook.com/docs/ios/ios9
mkll

158

Seperti yang dikatakan di atas, Anda ingin menambahkan kunci di daftar info, berikut adalah daftar untuk sebagian besar jejaring sosial

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

* 3 pertandingan pertama Facebook (FBSDK 4.6): fbapi, fbauth2, fbshareextension. "Ha" adalah untuk snapchat


Thx, saya pikir v perlu menambahkan "fb" ke daftar
siva krishna

1
@sivakrishna fb tidak disebutkan di sini developers.facebook.com/docs/ios/ios9
Matthieu Rouif

tetapi jika saya ingin mengarahkan ulang ke halaman buku wajah seperti " facebook.com/....",Setelah menambahkan fb hanya itu wrkng
siva krishna

Hampir baik. Di Octobr 2015 saya mengalami beberapa kegagalan dengan URL aneh dari dialog berbagi Facebook. Saya menambahkannya sebagai jawaban, silakan menambahkannya ke Anda yang memang benar.
elbuild

1
dan Ha://add/[username]untuk menambahkan teman-teman snapchat dengan cepat 3
EssamSoft

87

Ini adalah fitur keamanan baru iOS 9. Tonton WWDC 2015 Sesi 703 untuk informasi lebih lanjut.

Aplikasi apa pun yang dibangun dengan SDK 9 harus menyediakan LSApplicationQueriesSchemesentri dalam file plistnya, mendeklarasikan skema mana yang coba di-query.

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>urlscheme</string>
 <string>urlscheme2</string>
 <string>urlscheme3</string>
 <string>urlscheme4</string>
</array> 

Untuk memperjelas. Akankah ini mengesampingkan aplikasi seperti itu yang memungkinkan pengguna memasukkan skema URL mereka sendiri + menjalankannya?
Jonny

@Jonny Tidak, karena Anda masih dapat mencoba membuka URL apa pun menggunakan openURL:. Dan itu akan memberi tahu Anda apakah pembukaan berhasil atau tidak.
Leo Natan

Ya, tetapi canOpenURL tidak dapat digunakan sehingga kami tidak dapat memberi tahu pengguna apakah itu akan berfungsi atau tidak, ia hanya harus mencoba sendiri.
Jonny

Saya ingin membuka peta google apa yang harus saya masukkan ke dalam urlscheme?
coding22

25

Dengan asumsi dua aplikasi TestA dan TestB. TestB ingin menanyakan apakah TestA diinstal. "TestA" mendefinisikan skema URL berikut dalam file info.plist-nya:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>testA</string>
        </array>
    </dict>
</array>

Aplikasi kedua "TestB" mencoba mencari tahu apakah "TestA" diinstal dengan menelepon:

[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestA://"]];

Tetapi ini biasanya akan mengembalikan TIDAK di iOS9 karena "TestA" perlu ditambahkan ke entri LSApplicationQueriesSchemes dalam file info.plist TestB. Ini dilakukan dengan menambahkan kode berikut ke file info.plist TestB:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>TestA</string>
</array>

Implementasi yang berfungsi dapat ditemukan di sini: https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example


tunggu, bukankah seharusnya nilai string kunci LSApplicationQueriesSchemes sebagai "testA" di into.plist aplikasi TestB?
Nik Yekimov

22

Dari, Sesi 703 WWDC 2015:

Anda dapat terus menggunakan skema URL ketika Anda membangun aplikasi untuk iOS 9 dan Anda ingin memanggil skema URL, Anda sekarang harus mendeklarasikannya di Info.plist aplikasi Anda. Ada kunci baru LSApplicationQueriesSchemes,, dan di sini Anda perlu menambahkan daftar skema yang Anda inginkan canOpenURL aktif.

Misalnya, memetikan FB


1
Ya, bukan itu. Itu masih tidak akan berfungsi comgooglemaps, bahkan dengan info.plist
Radu

apakah Anda menemukan perbaikan untuk ini?
Salman Hasrat Khan

1
sebuah gambar bernilai 1000 kata. terima kasih atas tangkapan layarnya. itu yang saya butuhkan.
sean808080

3

Berbagi Facebook dari dialog berbagi gagal bahkan dengan jawaban @Matthieu (yang 100% benar untuk URL sosial lainnya). Saya harus menambahkan satu set URL yang saya balikkan dari Facebook SDK.

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

Apakah Anda tahu aplikasi mana yang dapat saya gunakan untuk melihat dokumen dan dapatkah Anda memberikan saya kode untuk itu?
Nishat Jahan

2

Di Swift 4.2 dan Xcode 10.1

Dalam info.plist perlu menambahkan CFBundleURLSchemes dan LSApplicationQueriesSchemes.

-> Pilih info.plist di proyek Anda,

-> klik kanan,

-> Pilih Open As Source Code

Lihat tangkapan layar di bawah ini

masukkan deskripsi gambar di sini

-> file xml akan dibuka

-> salin - rekatkan kode di bawah ini dan ganti dengan ID Anda

CFBundleURLSchemes dan LSApplicationQueriesSchemes untuk gmail, fb, twitter, dan tertaut di.

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

Lihat di bawah layar file info.plist terakhir Anda

masukkan deskripsi gambar di sini


1

Penting untuk dicatat bahwa ada bug pada ponsel yang sudah di-jailbreak pada 9.0.x yang merusak skema url. Jika Anda menjalankan perangkat yang di-jailbreak maka pastikan Anda memperbarui Patcyh di Cydia


1

Anda dapat membuka aplikasi dengan menelepon openURL:atau openURL:options:completionHandler:(iOS 10 dan seterusnya) secara langsung tanpa melakukan pemeriksaan bersyarat canOpenURL:. Silakan baca bagian diskusi di Apple doc untuk canOpenURL: metode yang mengatakan:

metode openURL: tidak dibatasi oleh LSApplicationQueriesSchemespersyaratan.


0

Tampaknya tidak ada yang membahas cara menentukan URL dengan parameter yang disematkan. URL apa pun yang berisi parameter tidak mungkin menentukan URL spesifik di LSApplicationsQueriesSchemes. Misalnya, anggap saya memiliki aplikasi email yang melewati alamat email pengirim:

myemail://mailto?bob@gmail.com

Satu-satunya cara tampaknya membuatnya berfungsi di iOS9 adalah menghapus parameter apa pun.


4
Hah? Yang harus Anda tambahkan di daftar adalah myemail. Parameter tidak berperan di sini.
Leo Natan

0

Apple mengubah metode canOpenURL di iOS 9. Aplikasi yang memeriksa Skema URL di iOS 9 dan iOS 10 harus mendeklarasikan Skema ini saat diajukan ke Apple.



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)
        }
    }
}

Tambahkan ini di Info.plist:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>instagram</string>
</array>

-1

Ketika saya mencoba menelepon Facebook dari aplikasi saya sendiri hari ini, saya menemukan bahwa tidak ada LSApplicationQueriesSchemeskunci yang dapat saya tambahkan ke Info.plist(Versi Xcode 8.2.1 (8C1002)). Saya membuka Info.plistdengan Sublime Text dan secara manual menambahkannya ke dalam file, lalu berhasil. Hanya untuk memberi tahu Anda bahwa jika Anda tidak dapat menemukan kunci, cukup tambahkan sendiri.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.