IOS 9 не открывает приложение Instagram с URL SCHEME

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

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

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

Ответ 1

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

Пожалуйста, см. сообщение здесь: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes

Основной вывод:

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

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

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

Ответ 2

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

<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 матча Facebook (FBSDK 4.6): fbapi, fbauth2, fbshareextension. "Ха" для Snapchat

Ответ 3

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

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

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

Ответ 4

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

<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 в файле test.plist. Это делается путем добавления следующего кода в файл TestB info.plist:

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

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

Ответ 5

Сессия 703 WWDC 2015:

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

Например, включить FB

Ответ 6

Обмен Facebook из диалога общего доступа невозможен даже при ответе @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>

Ответ 7

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

Ответ 8

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

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

Ответ 9

В Swift 4.2 и Xcode 10.1

В info.plist необходимо добавить CFBundleURLSchemes и LSApplicationQueriesSchemes.

→ Выберите info.plist в вашем проекте,

→ щелкните правой кнопкой мыши,

→ Выберите Открыть как исходный код

Смотрите скриншот ниже

enter image description here

→ XML файл будет открыт

→ копировать - вставить ниже код и заменить ваши идентификаторы

CFBundleURLSchemes и LSApplicationQueriesSchemes для gmail, fb, twitter и связанных ссылок.

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

Смотрите ниже экран ваш окончательный файл info.plist

enter image description here

Ответ 10

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

myemail://[email protected]

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

Ответ 11

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

Ответ 12

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

введите описание изображения здесь

Отправьте ссылку

Ответ 13

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>

Ответ 14

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