facebooklogin问题 – canOpenURL:URL失败:“fbauth2:///” – 错误:“(null)”

当我点击Facebookloginbutton时,它正在打开Safari浏览器,并立即closures。 注意到控制台上的错误。

应用程序委托方法:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool { print("###### URL : ") print(url) print("###### App : ") print(app) print(options["UIApplicationOpenURLOptionsSourceApplicationKey"]) return FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String, annotation: nil) } 
 2015-09-18 18:37:51.410 [21036:5050465] -canOpenURL:URL失败:“fbauth2:///” - 错误:“(null)”

 2015-09-18 18:37:51.417 [21036:5050465] -canOpenURL:URL失败:“fbauth2:///” - 错误:“(null)”

  ######url: 

   fb4554284912963222://授权/ ERROR_CODE = 100&ERROR_MESSAGE =无效+范围%3A +公共&状态=%7B%22challenge%22%3A%222ZmK6R5F05d%252F060TkCqj8SjPLjc%253D%22%2C%220_auth_logger_id%22%3A%223C79F2C8-61B9-470E-? AE1B-E1C68435DB83%22%2C%22com.facebook.sdk_client_state%22%3Atrue%2C%223_method%22%3A%22sfvc_auth%22%7D&E2E =%7B%22init%22%3A145973.000512302%7D#_ = _

    ###### App: 

   
    可选(com.apple.SafariViewService)
    零

    ###### 呃:

   可选(错误域= com.facebook.sdk.core代码= 8“(空)”UserInfo = {com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode = 100,com.facebook.sdk:FBSDKErrorDeveloperMessageKey =无效范围:公共,com.facebook。 SDK:FBSDKGraphRequestErrorCategoryKey = 0})

IDE:xcode 7
语言:Swift2
Facebook SDK:4.6.0
parsing:1.8.4

我也已经validation.plist具有所有必需的密钥。 还validation了打字错误的包标识符。 一切看起来不错。 Facebook是活跃的。

任何帮助?

我有同样的警告,但在Facebook文件中有一个答案。

这是一个Xcode警告,指示canOpenURL:调用返回false。 只要你像上面描述的那样在plist中configuration了LSApplicationQueriesSchemes条目,你可以忽略这个警告

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

“-canOpenURL:URL失败”警告是一个红色鲱鱼,只是意味着FB应用程序没有安装在您正在运行的设备/模拟器上。

它看起来像你要求一个无效的范围(又名许可)的“公共”。 你能包括你的代码,包括你问什么权限? public_profile可能是你想要的(如果没有提供,SDK默认是什么)。

更重要的是, 不要将fbauth2添加到您的CFBundleURLSchemes中,因为这会破坏loginstream。 正如Himanshu指出的那样,这些条目应该在我们的plist的LSApplicationQueriesSchemes下input。

如果您使用iOS SDK 9.0进行重新编译,如果您使用的是Facebook SDK v4.6.0或更高版本,请将以下内容添加到应用程序的plist中:

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

要准备iOS 9支持的Facebook集成,请通过Facebook Integraion for iOS 9准则

要检查Facebook SDK的版本,请使用以下代码行:

  print("SDK version \(FBSDKSettings .sdkVersion())") 

我错过了导入FBSDKCoreKit 。 之后它开始在模拟器上工作,但不在iPhone设备上。

还注意到Facebook网站上的以下常见问题。 为什么我看到控制台消息

'canOpenURL:URL失败:“fb …://'

要么 ? 这是一个Xcode警告,指示canOpenURL:调用返回false。 只要你像上面描述的LSApplicationQueriesSchemesplistconfiguration了LSApplicationQueriesSchemes条目,你可以忽略这个警告

关于不在iPhone设备上工作,请参考: parsingAPI – Facebooklogin不能在iPhone设备上工作

你的url“fbauth2:///”中有一个额外的“/”。

然后你可以在url中看到“error_message = Invalid + Scope”,你应该检查你的应用的权限: https : //developers.facebook.com/docs/facebook-login/permissions/v2.4

这个问题是由于在iOS 9中引入了App Transport Security。

有两个解决scheme,都处理固定您的info.plist文件

这是一个指南http://discoverpioneer.com/blog/2015/09/18/updating-facebook-integration-for-ios-9/

如果您的应用在iOS9或更高版本上运行,则需要添加此方法。

 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options { return [[FBSDKApplicationDelegate sharedInstance] application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; 

}

如果你需要一个Swift版本:

 @available(iOS 9.0, *) func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return SDKApplicationDelegate.shared.application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplicationOpenURLOptionsKey.annotation] as Any) } 

这是一个Xcode警告,指示canOpenURL:调用返回false。 只要你像上面描述的LSApplicationQueriesSchemes在plist中configuration了LSApplicationQueriesSchemes条目,你可以忽略这个警告。

转到此链接select您的应用程序,并configuration您的info.plist

import并将此代码添加到您的AppDelegate

 import FBSDKCoreKit . import FBSDKLoginKit func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) } func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options) } 

我想出了我的问题。 这只是loginButtonClicked函数中的语法。 错误消息导致我错误的path。 这是工作代码。

 @objc func loginButtonClicked() { self.login = FBSDKLoginManager() self.login.logIn(withReadPermissions: ["public_profile"], from: self, handler: {(result, error) -> Void in if error != nil { print("Process error") } else if (result?.isCancelled)! { print("Cancelled") } else { print("Logged in") DispatchQueue.main.async(execute: { let viewController:UIViewController = self.storyboard?.instantiateViewController(withIdentifier: "UITabBarController") as! UITabBarController self.present(viewController, animated: true, completion: nil) }) } }) }