Добавьте это в свой файл info.plist <key> LSApplicationQueriesSchemes </key> <array> <string> URLScma1 </string> <string> URLScma2 </string> <string> URLScma3 </string> </array>
Камлешвар
Ответы:
212
iOS 9 внесла небольшое изменение в обработку схемы URL. Вы должны внести в белый список URL-адреса, которые ваше приложение будет вызывать с помощью LSApplicationQueriesSchemesключа в вашем Info.plist.
Если вы вызовете метод canOpenURL для URL-адреса, которого нет в вашем белом списке, он вернет «NO», даже если установлено приложение, зарегистрированное для обработки этой схемы. Появится запись системного журнала «Это приложение не может запрашивать схему xxx».
Если вы вызовете метод openURL для URL-адреса, которого нет в вашем белом списке, он потерпит неудачу. Появится запись системного журнала «Это приложение не может запрашивать схему xxx».
Автор также предполагает, что это ошибка ОС, и Apple исправит ее в следующем выпуске.
В качестве пояснения НЕ включайте «: //» в строку конкретного приложения, которое будет добавлено в белый список в массиве LSApplicationQueriesSchemes, то есть «comgooglemaps: //». Если вы включите ": //", canOpenUrl: вернет NO и предоставит системный журнал / ошибку «Этому приложению не разрешено запрашивать схему xxx». Однако, когда вы выполняете фактический вызов canOpenUrl: вы все равно должны включать двоеточие, то есть canOpenUrl: @ "comgooglemaps:".
EmphaticArmPump
5
Фактически, Apple исправила это в недавнем обновлении. -openURL:всегда работает, хотя -canOpenURL:и ограничен.
Тим Джонсен
какой в этом смысл? Где безопасность, если я могу просто перечислить все в списке и по-прежнему запрашивать это?
Maciej Swic
@MaciejSwic Одна из причин заключается в том, что вы не можете изменить список без повторной отправки в Apple.
thelaws
Обратите внимание, что все это относится только к приложениям, скомпилированным с использованием iOS SDK 9. «Если вы не перекомпилируете с iOS SDK 9.0, ваше приложение ограничено 50 различными схемами (впоследствии вызовы canOpenURL возвращают НЕТ)», как указано на developers.facebook.com/docs/ios/ios9
mkll
162
Как было сказано выше, вы хотите добавить ключ в информационный список, вот список для большинства социальных сетей.
но если я хочу перенаправить на любую страницу фейсбука, например " facebook.com/ .... ", после добавления fb только его wrkng
krishna
Почти хорошо. В октябре 2015 года у меня возникли проблемы со странными URL-адресами в диалоговых окнах общего доступа Facebook. Я добавил их в качестве ответа, не стесняйтесь добавлять его к своему, что действительно правильно.
elbuild
1
и Ha://add/[username]добавить друзей в снэпчат в Swift 3
EssamSoft
87
Это новая функция безопасности iOS 9. Смотрите WWDC 2015 Session 703 для получения дополнительной информации.
Любое приложение, созданное с помощью SDK 9, должно предоставить LSApplicationQueriesSchemesзапись в своем файле plist, объявляющую, какие схемы оно пытается запрашивать.
Чтобы прояснить ситуацию. Будет ли это исключать такие приложения, которые позволяют пользователю вводить свою собственную схему URL + выполнять ее?
Джонни
@Jonny Нет, потому что вы все равно можете попытаться открыть любой URL, используя openURL:. И он скажет вам, было ли открытие успешным или нет.
Лео Натан
Да, но canOpenURL нельзя использовать, поэтому мы не можем сказать пользователю, будет он работать или нет, он просто должен попробовать сам.
Джонни
Я хочу открыть карты Google, что мне добавить в схему URL?
coding22
25
Предполагая, что два приложения TestA и TestB. TestB хочет запросить, установлен ли TestA. TestA определяет следующую схему URL в своем файле info.plist:
Но это обычно возвращает NO в iOS9, потому что "TestA" необходимо добавить в запись LSApplicationQueriesSchemes в файле info.plist TestB. Это делается путем добавления следующего кода в файл info.plist TestB:
подождите, не должно быть строковое значение ключа LSApplicationQueriesSchemes как "testA" в into.plist приложения TestB?
Ник Екимов
22
От, сессия 703 WWDC 2015:
Вы можете продолжать использовать схемы URL-адресов, когда создаете приложение для iOS 9 и хотите вызывать схемы URL-адресов, теперь вам нужно будет объявить их в Info.plist ваших приложений. Появился новый ключ, LSApplicationQueriesSchemesи здесь вам нужно будет добавить список схем, для которых вы хотите использовать canOpenURL.
Да, это не так. Comgooglemaps по-прежнему не работает, даже с info.plist
Раду
ты нашел исправление для этого?
Салман Хасрат Хан
1
картинка стоит 1000 слов. спасибо за скриншот. это было все, что мне было нужно.
sean808080 03
3
Публикация в Facebook из диалогового окна общего доступа не выполняется даже при ответе @Matthieu (что на 100% верно для остальных URL-адресов социальных сетей). Мне пришлось добавить набор URL-адресов, которые я перевернул из Facebook SDK.
Важно отметить, что в 9.0.x была ошибка с взломанными телефонами, которая нарушала схемы URL. Если вы используете взломанное устройство, обязательно обновите Patcyh в Cydia.
Что ж, вы можете открыть приложение, позвонив openURL:или openURL:options:completionHandler:(iOS 10 и выше) напрямую, не выполняя условную проверку canOpenURL:. Прочтите раздел обсуждения метода canOpenURL: в документации Apple, в котором говорится:
метод openURL: не ограничен LSApplicationQueriesSchemesтребованиями.
Кажется, никто не обращался к тому, как указать URL-адреса со встроенными параметрами. Любой URL-адрес, содержащий параметры, невозможно указать конкретный URL-адрес в LSApplicationsQueriesSchemes. Например, предположим, что у меня есть почтовое приложение, которое передает адрес электронной почты отправителя:
myemail://mailto?bob@gmail.com
Единственный способ заставить его работать в iOS9 - это удалить какие-либо параметры.
А? В список следует добавить myemail. Параметры здесь не играют роли.
Лео Натан,
0
Apple изменила метод canOpenURL в iOS 9. Приложения, которые проверяют схемы URL-адресов в iOS 9 и iOS 10, должны объявлять эти схемы в том виде, в каком они отправляются в Apple.
Когда я сегодня попытался позвонить в Facebook из моего собственного приложения, я обнаружил, что нет LSApplicationQueriesSchemesключа, который я мог бы добавить в Info.plist(Xcode Version 8.2.1 (8C1002)). Я открыл с Info.plistпомощью Sublime Text и вручную добавил его в файл, после чего все заработало. Просто чтобы вы знали, что если вы не можете найти ключ, просто добавьте его самостоятельно.
+canOpenURL:
возвращается?Ответы:
iOS 9 внесла небольшое изменение в обработку схемы URL. Вы должны внести в белый список URL-адреса, которые ваше приложение будет вызывать с помощью
LSApplicationQueriesSchemes
ключа в вашемInfo.plist
.См. Сообщение здесь: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes
Главный вывод таков:
Автор также предполагает, что это ошибка ОС, и Apple исправит ее в следующем выпуске.
источник
-openURL:
всегда работает, хотя-canOpenURL:
и ограничен.Как было сказано выше, вы хотите добавить ключ в информационный список, вот список для большинства социальных сетей.
<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. «Ха» для снэпчат
источник
Ha://add/[username]
добавить друзей в снэпчат в Swift 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>
источник
openURL:
. И он скажет вам, было ли открытие успешным или нет.Предполагая, что два приложения 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 в файле info.plist TestB. Это делается путем добавления следующего кода в файл info.plist TestB:
<key>LSApplicationQueriesSchemes</key> <array> <string>TestA</string> </array>
Рабочую реализацию можно найти здесь: https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example
источник
От, сессия 703 WWDC 2015:
источник
Публикация в 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>
источник
В Swift 4.2 и Xcode 10.1
В info.plist нужно добавить CFBundleURLSchemes и LSApplicationQueriesSchemes.
-> Выберите info.plist в своем проекте,
-> щелкните правой кнопкой мыши,
-> Выбрать " Открыть как исходный код"
См. Снимок экрана ниже
-> 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
источник
Важно отметить, что в 9.0.x была ошибка с взломанными телефонами, которая нарушала схемы URL. Если вы используете взломанное устройство, обязательно обновите Patcyh в Cydia.
источник
Что ж, вы можете открыть приложение, позвонив
openURL:
илиopenURL:options:completionHandler:
(iOS 10 и выше) напрямую, не выполняя условную проверкуcanOpenURL:
. Прочтите раздел обсуждения метода canOpenURL: в документации Apple, в котором говорится:источник
Кажется, никто не обращался к тому, как указать URL-адреса со встроенными параметрами. Любой URL-адрес, содержащий параметры, невозможно указать конкретный URL-адрес в LSApplicationsQueriesSchemes. Например, предположим, что у меня есть почтовое приложение, которое передает адрес электронной почты отправителя:
myemail://mailto?bob@gmail.com
Единственный способ заставить его работать в iOS9 - это удалить какие-либо параметры.
источник
myemail
. Параметры здесь не играют роли.Apple изменила метод canOpenURL в iOS 9. Приложения, которые проверяют схемы URL-адресов в iOS 9 и iOS 10, должны объявлять эти схемы в том виде, в каком они отправляются в Apple.
источник
Для PayPal добавьте ниже схемы URL-адресов:
Обратитесь по этой ссылке
источник
Свифт 3.1, Свифт 3.2, Свифт 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 Version 8.2.1 (8C1002)). Я открыл сInfo.plist
помощью Sublime Text и вручную добавил его в файл, после чего все заработало. Просто чтобы вы знали, что если вы не можете найти ключ, просто добавьте его самостоятельно.источник