Наступна URL-адреса відкривається на iOS 8.3 та новіших версіях, але вона не працює та iOS 9
let instagramURL = NSURL(string: "instagram://app")
Чому URL не відкриється?
Наступна URL-адреса відкривається на iOS 8.3 та новіших версіях, але вона не працює та iOS 9
let instagramURL = NSURL(string: "instagram://app")
Чому URL не відкриється?
Відповіді:
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 виправить це в наступному випуску.
-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. "Ха" - це snapchat
Ha://add/[username]
додати друзів snapchat у швидкій 3
Це нова функція безпеки iOS 9. Дивіться WWDC 2015 Session 703 для отримання додаткової інформації.
Будь-який додаток, побудований за допомогою SDK 9, повинен передбачати LSApplicationQueriesSchemes
запис у своєму пліст-файлі, декларуючи, які схеми він намагається запитувати.
<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://"]];
Але це нормально повертає НІ у 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:
Ви можете продовжувати використовувати схеми URL-адрес, коли ви створюєте додаток для iOS 9 і хочете викликати схеми URL-адрес, тепер вам потрібно буде оголосити їх у своїх додатках Info.plist. Існує новий ключ,
LSApplicationQueriesSchemes
і тут вам потрібно буде додати список схем, на яких ви хочете бути canOpenURL.
Обмін Facebook у діалоговому вікні спільного доступу не вдається навіть з відповіддю @Matthieu (що на 100% правильно для інших соціальних URL-адрес). Мені довелося додати набір URL-адрес, які я повернув від SDK Facebook.
<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
Добре ви можете відкрити додаток, зателефонувавши openURL:
або openURL:options:completionHandler:
(iOS 10 далі) безпосередньо, не роблячи умовної перевірки canOpenURL:
. Прочитайте розділ обговорення в Apple doc для методу canOpenURL: :
метод openURL: не обмежений
LSApplicationQueriesSchemes
вимогою.
Здається, ніхто не звертався, як вказати URL із вбудованими параметрами. Будь-яку URL-адресу, яка містить параметри, неможливо вказати конкретну URL-адресу в LSApplicationsQueriesSchemes. Наприклад, припустимо, що у мене є програма електронної пошти, яка передає електронну адресу відправників:
myemail://mailto?bob@gmail.com
Єдиний спосіб, як видається, змусити його працювати в iOS9 - це видалити будь-які параметри.
myemail
. Параметри тут не грають ніякої ролі.
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 Version 8.2.1 (8C1002)). Я відкрив Info.plist
з Sublime Text і вручну додати його в файл, а потім він працював. Просто, щоб повідомити, що якщо ви не можете знайти ключ, просто додайте його самостійно.
+canOpenURL:
повертає?