Facebook的login总是回来取消。 (iOS Swift)

我目前正在尝试使用4.0版本的SDK实现Facebooklogin,这也发生在3. +版本。 当我调用logInWithReadPermissions (4.0版本)或openActiveSessionWithReadPermissions (3. +版本)。 在用户可以进行select( 取消确定 )之前,立即使用isCancelled (4.0版本)和ClosedFailedLogin (3. +版本)调用闭包/块。 我认为这可能是在我的plist设置的URL计划的问题,但我已经检查了一遍又一遍,一切似乎是正确的。 只是想知道如果有人可以有任何解决这个问题的想法。 我的Bundle ID是正确的,在Facebook开发控制台中启用了单点login,本地应用程序已启用。 请参阅下面的一些示例代码和configuration(4.0版本)。

login电话: 登录电话

AppDelegate中: AppDelegate中

plist中: PLIST

我有一些问题,但我find了一个解决方法。 您可以设置loginpipe理器的login行为以使用电话上的Facebook详细信息。 默认行为是FBSDKLoginBehaviorSystemNative,它试图首先使用Facebook应用程序,如果它不在那里,则使用Web模式。

而不是这样做,并传递似乎不起作用的url,您可以将login行为设置为FBSDKLoginBehaviorSystemAccount

长话短说,试试:

let fbLoginManager = FBSDLoginManager(); fbLoginManager.loginBehavior = FBSDKLoginBehaviorSystemAccount; // call login method of choice here 

使用Facebook SDK版本4,我只需将其添加到iOS 10和Swift 3上的应用程序委托,即可进行身份validation。 在此之前,我也只取消login。

 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return SDKApplicationDelegate.shared.application(app, open: url, options: options) } 

我有同样的问题login方法总是返回canacelled然后我添加下面的东西在info.plist

 <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>akamaihd.net</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>facebook.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> <key>fbcdn.net</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict> <key>LSApplicationQueriesSchemes</key> <array> <string>fbapi</string> <string>fb-messenger-api</string> <string>fbauth2</string> <string>fbshareextension</string> </array> 

并在AppDelegate中更新didFinishLaunching方法并添加如下的新方法

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions) } func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return SDKApplicationDelegate.shared.application(app, open: url, options: options) } 

login方法如下:

 @objc func loginButtonClicked() { let loginManager = LoginManager() loginManager.loginBehavior = .systemAccount loginManager.logIn([ .publicProfile,.userFriends,.email ], viewController: self) { loginResult in switch loginResult { case .failed(let error): print(error) case .cancelled: print("User cancelled login.") case .success(let grantedPermissions, let declinedPermissions, let accessToken): print("Logged in!") //Do further code... } } } 

它适用于我在Swift 3.0SDK 4.17.0 ,我希望它适合你谢谢。

你有没有添加functionAppDelegate?

 func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) } 

我也有这个问题。 事实certificate,应用程序包ID(在项目configuration中)与facebook应用程序仪表板中configuration的应用程序包ID不匹配。 在修复捆绑ID后,login工作得很好。

希望这有助于某人。

在我的应用程序中添加LoginButton时,遇到了非常类似的问题,请参阅本教程→ https://developers.facebook.com/docs/swift/login

点击Facebook Connectbutton并完成授权后,它总是返回状态“取消”。 我尝试了很多解决scheme,最后以下工作:

AppDelegate.swift中 ,添加以下2个函数:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { return SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions) } func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return SDKApplicationDelegate.shared.application(application, open: url, options: options) } 

过去1个月我也遇到过这个问题。 我正在整合Facebook的login与ios 10 swift 3的firebase。最后,我能够成功地实现它。 我通过在AppDelegate文件中进行以下更改来纠正它。

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { FIRApp.configure() FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) return true } @available(iOS 9.0, *) func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool { var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!,annotation: options[UIApplicationOpenURLOptionsKey.annotation]) return shouldOpen } // for iOS below 9.0 func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(application,open: url as URL!,sourceApplication: sourceApplication,annotation: annotation) return shouldOpen } 

我希望它可以帮助别人

在运行10.2的ios 10.2 Emulator,iPhone 6 Plus上testing

我发现错误的AppDelegate方法被调用。 这是呼唤

 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {... 

代替

 func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {... 

所以我不得不把这个添加到第一个AppDelegate方法(被调用的方法):

 return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: "com.apple.mobilesafari", annotation: nil) 

请注意,我必须明确地传递safari包ID,否则FB账户委托将得到isCancelled = true

我的问题是由于我模态地呈现一个加载视图控制器,当视图消失时我被解雇了。 由于FBSDK在转换到Safari或应用程序时调用viewWillDisappear方法,因此正在closures视图和FBlogin屏幕。 如果您通过UIAlertController进行login,也会发生同样的情况。