iOS 9 не открывает приложение Instagram со схемой URL

следующий URL-адрес открывается на iOS 8.3 и ниже, но он не работает и iOS 9

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

почему URL не открывается?

13 ответов


iOS 9 внесла небольшое изменение в обработку схемы URL. Вы должны белый список url-адрес, что ваше приложение будет вызывать с помощью LSApplicationQueriesSchemes ключ в Info.plist.

см. пост здесь: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes

основной вывод таков:

Если вы вызываете метод "canOpenURL" по URL-адресу, который не находится в вашем белом списке, он вернет "нет", даже если есть установленное приложение, зарегистрированное для обработки этой схемы. Появится запись системного журнала "Это приложение не разрешено запрашивать схему xxx".

Если вы вызываете метод "openURL" по URL-адресу, который не находится в вашем белом списке, он завершится беззвучно. Появится запись системного журнала "Это приложение не разрешено запрашивать схему xxx".

автор также предполагает, что это ошибка с ОС, и Apple исправит это в следующем выпуске.


как сказано выше, вы хотите добавить ключ в info plist, вот список для большинства социальных сетей

<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>kakaotalk</string>
     <string>mqq</string>
     <string>vk</string>
     <string>comgooglemaps</string>
     <string>googlephotos</string>
     <string>ha</string>
    </array>

* Первые 3 матча Facebook (FBSDK 4.6): fbapi, fbauth2, fbshareextension. "Ха" для snapchat


Это новая функция безопасности iOS 9. Смотреть WWDC 2015 сессия 703 для получения дополнительной информации.

любое приложение, построенное с SDK 9, должно предоставить LSApplicationQueriesSchemes запись в его файле plist, объявляя, какие схемы он пытается запросить.

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

предполагая два приложения TestA и TestB. TestB хочет запросить, установлен ли TestA. "TestA" определяет следующую схему URL в своей информации.plist file:

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

второе приложение "TestB" пытается выяснить, установлен ли "TestA" по телефону:

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

но это обычно возвращает NO в iOS9, потому что "TestA" необходимо добавить в запись LSApplicationQueriesSchemes в информации TestB.plist файл. Это делается путем добавления следующего кода в информацию TestB.файл plist файл:

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

рабочую реализацию можно найти здесь: https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example


From, Session 703 WWDC 2015:

вы можете продолжать использовать схемы URL при создании приложения для iOS 9 и вы хотите вызвать схемы URL, теперь вам нужно будет объявить их в информация о ваших приложениях.файл plist. Есть новый ключ, LSApplicationQueriesSchemes, и здесь вам нужно будет добавить список схем, которые вы хотите canOpenURL on.

For instance, incase of FB


совместное использование Facebook из диалога share не удается даже с ответом @Matthieu (что на 100% правильно для остальных социальных URL-адресов). Мне пришлось добавить набор URL, который я отменил из 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>

важно отметить, что была ошибка с джейлбрейкнутыми телефонами на 9.0.x, который сломал схемы url. Если вы используете взломанное устройство, убедитесь, что вы обновили Patcyh в Cydia


Ну вы можете открыть приложение, позвонив openURL: или openURL:options:completionHandler: (iOS 10 и далее) непосредственно без выполнения условной проверки canOpenURL:. Ознакомьтесь, пожалуйста дискуссионный раздел на Apple doc для canOpenURL: метод он говорит:

метод openURL: не ограничен LSApplicationQueriesSchemes требование.


похоже, никто не обращался к тому, как указать URL-адреса со встроенными параметрами. Любой URL-адрес, содержащий параметры, невозможно указать конкретный URL-адрес в LSApplicationsQueriesSchemes. Например, предположим, что у меня есть приложение электронной почты, которое передает адрес электронной почты отправителей:

myemail://mailto?bob@gmail.com

единственный способ заставить его работать в iOS9-это удалить любые параметры.


Apple изменила метод canOpenURL на iOS 9. Приложения, которые проверяют схемы URL на iOS 9 и iOS 10, должны объявить эти схемы по мере их отправки в Apple.


для PayPal добавить ниже URL схемы:

enter image description here

передать этот ссылке


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

добавьте их в Info.файл plist :

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

когда я попытался позвонить Facebook из моего собственного приложения сегодня, я обнаружил, что нет LSApplicationQueriesSchemes ключ, который я могу добавить в Info.plist (Xcode версии 8.2.1 (8C1002)). Я открыл Info.plist С Возвышенное Текст и вручную добавил его в файл, затем он работал. Просто чтобы вы знали, что если вы не можете найти ключ, просто добавьте его сами.