Ответы:
Вы можете продолжать использовать схемы URL, когда создаете свое приложение для iOS 9 и хотите вызывать схемы URL, теперь вам нужно будет объявить их в Info.plist вашего приложения. Существует новый ключ LSApplicationQueriesSchemes , и здесь вам нужно будет добавить список схем, для которых вы хотите использовать canOpenURL.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbauth2</string>
</array>
Если вы используете iOS9, важно обновить файл info.plist. Вам просто нужно сделать 3 шага 1. Перейдите в info.plist 2. Добавьте поле, а именно тип данных LSApplicationQueriesSchemes NSArray. 3. Добавьте элемент типа данных NSString, назовите его fbauth2.
Это оно. Просто убери и беги. предупреждение больше не появится
Что касается v4.6.0 FaceBook SDK, добавьте следующий ключ в ваш plist-файл:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
not
говорит вам это, хорошо, что вы на это указали!
Просто следуйте объяснениям Facebook: Подготовка ваших приложений для iOS9
Apple упоминает об этом в разделе « Конфиденциальность и ваше приложение» Keynote 2015
Пожалуйста, только не добавляйте это в ваши CFBundleURLSchemes ..., которые фактически перехватывают попытки любого приложения на авторизацию Facebook, вызывая всплывающее окно, показывающее диалог "X app хочет открыть" ...
Вы НЕ хотите этого делать.
сравни:
https://developers.facebook.com/docs/applinks/ios
https://www.fireeye.com/blog/threat-research/2015/04/url_masques_on_apps.html
https://www.reddit.com/r/workflow/comments/2tlx29/get_url_scheme_of_any_app
Я получил это при выполнении моих тестов на киви, так как у нашей тестовой цели не было доступа к основному пакету. Поэтому мне пришлось добавить условие isRegisteredCanOpenURLScheme
вFBSDKInternalUtility.m
+ (BOOL)isRegisteredCanOpenURLScheme:(NSString *)urlScheme
{
static dispatch_once_t fetchBundleOnce;
static NSArray *schemes = nil;
dispatch_once(&fetchBundleOnce, ^{
schemes = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"LSApplicationQueriesSchemes"];
if (!schemes) { // This is a work around for our Kiwi tests as the Specs target doesn't have access to main bundle
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSString *path = [bundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:path];
schemes = [dictionary valueForKey:@"LSApplicationQueriesSchemes"];
}
});
return [schemes containsObject:urlScheme];
}
Чтобы создать ваше приложение для iOS 9: (для Facebook Поделиться)
Info.plist
файл, добавьте другое поле LSApplicationQueriesSchemes в списке свойств информации и установите его тип данных Array
или NSArray
.String
или NSString
.fbauth2
, fbshareextension
, в fbapi
качестве значения элемента.Следуйте за этим фото :
Write the below code in your info.plist under the **LSApplicationQueriesScheme**
<string>fbapi</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>
<string>fbauth</string>
<string>fbauth2</string>
<string>fb-messenger-api20140430</string>
<string>fb-messenger-platform-20150128</string>
<string>fb-messenger-platform-20150218</string>
<string>fb-messenger-platform-20150305</string>
Вы можете попробовать с приведенным ниже кодом в swift 5.0
extension Bundle {
static let externalURLSchemes: [String] = {
guard let urlTypes = main.infoDictionary?["LSApplicationQueriesSchemes"]
as? [String] else {
return []
}
return urlTypes
}()
}
Вы можете позвонить, используя Bundle
guard Bundle.externalURLSchemes.contains(URLScheme) else {
return
}