iOS 9 “fbauth2” missing from Info.plist

FBSDKLog: fbauth2 is missing from your Info.plist under LSApplicationQueriesSchemes and is required for iOS 9.0

Any idea what this is? I have added it in my plist but did not work.

43359 次浏览

当你为 iOS9构建应用程序并想调用 URL 方案时,你可以继续使用 URL 方案,现在你需要在你的应用程序 Info.plist 中声明它们。这里有一个新的键 查询方案,在这里您需要添加您想要的 canOpenURL 方案列表。

Try like this.

<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbauth2</string>
</array>

只要按照 Facebook 的解释: 为 iOS9准备应用程序
苹果在他们的《隐私和你的应用基调2015》中提到了这一点

如果您正在使用 iOS9,那么更新 info.plist 文件就很重要。 你只需要做三个步骤 1. 访问 info.plist 2. 添加一个字段,即 查询方案 NSArray 数据类型。 3. 添加一个 NSString 数据类型的项,名称为 fbauth2。

就是这样。只是清理和运行。警告不会再次出现。enter image description here

当我们的测试目标没有访问 main bundle 时运行 Kiwi 测试时得到了这个。所以我必须在 FBSDKInternalUtility.m中的 isRegisteredCanOpenURLScheme中添加一个条件

+ (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];
}

至于 FaceBookSDK 的4.6.0版本,在 plist 文件中添加以下密钥:

<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>

链接: https://developers.facebook.com/docs/ios/ios9

请不要把这个添加到您的 CFBundleURLScheme... 这将实际上 HIJACK 任何应用程序的尝试在 Facebook 认证,导致弹出窗口显示“ X 应用程序想要打开”对话框..。

你不会想这么做的。

比对:

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

为 iOS9开发你的应用程序: (用于 Facebook 分享)

  1. 打开 Info.plist文件,在 资讯产权清单下添加另一个字段 查询方案,并设置其数据类型为 ArrayNSArray
  2. 查询方案添加3个 物品并将它们的数据类型设置为 StringNSString
  3. 分配 fbauth2fbshareextensionfbapi作为项值。

关注这张照片 :

enter image description here

您可以在 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
}