Ios Swift Facebook集成登录回调问题

Ios Swift Facebook集成登录回调问题,ios,swift,facebook,facebook-sdk-4.x,Ios,Swift,Facebook,Facebook Sdk 4.x,我正在尝试为我的swift3应用程序集成Facebook登录 我正在阅读这些文档 使用pod安装后 pod 'FacebookLogin' pod 'FacebookShare' 并将它们添加到链接的框架和库中,facebook登录的工作方式与示例中显示的safari窗口相同,该窗口用于登录facebook并重定向相同的ViewController 但是,我有两个具体的问题。 第一个,我需要在facebook登录重定向(成功或错误)后添加回调,并分配当前令牌 我目前的代码是: import F

我正在尝试为我的
swift3
应用程序集成
Facebook登录

我正在阅读这些文档

使用
pod安装后

pod 'FacebookLogin'
pod 'FacebookShare'
并将它们添加到链接的框架和库中,facebook登录的工作方式与示例中显示的safari窗口相同,该窗口用于登录facebook并重定向相同的ViewController

但是,我有两个具体的问题。 第一个,我需要在facebook登录重定向(成功或错误)后添加回调,并分配当前令牌

我目前的代码是:

import FacebookLogin
import FacebookCore

class LoginViewController: UIViewController {

    override func viewDidLoad(){
        super.viewDidLoad()
        self.navigationItem.setHidesBackButton(true, animated:true);
        var fbtoken = AccessToken.current

        LoginManager().logOut()

        if(fbtoken != nil){
            let connection = GraphRequestConnection()
            connection.add(GraphRequest(graphPath: "/me")) { httpResponse, result in
                switch result {
                case .success(let response):
                    print("Graph Request Succeeded: \(response)")
                case .failed(let error):
                    print("Graph Request Failed: \(error)")
                }
            }
            connection.start()
        }

        let loginButton = LoginButton(readPermissions: [ .publicProfile ])

        let screenSize:CGRect = UIScreen.main.bounds
        let screenHeight = screenSize.height
        let newCenterY = screenHeight - loginButton.frame.height - 10
        let newCenter = CGPoint(x: view.center.x, y: newCenterY)
        loginButton.center = newCenter

        view.addSubview(loginButton)
}
fbtoken
变量始终为
nil
,读取操作无法分配
回调


我做错了什么?

以下情况可能会导致访问令牌为零

  • 您没有正确设置
    info.plist
    :必须将布尔值设置为
    YES
    ,并在
    NSAppTransportSecurity
    字典下使用键
    NSAllowsArbitraryLoads

  • Facebook SDK在AppDelegate文件的
    didFinishLaunchingWithOptions
    中未正确初始化:您必须进行此调用:

    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    
  • 您的SDK版本不是最新的。据报道,某些版本在这方面存在缺陷,因此如果前面的2点已经涵盖,那么更新SDK可能会解决您的问题

  • 为了回答您的另一个问题,FacebookSDK有一个
    login
    方法,其中包含一个闭包参数,如下所示

    let manager = FBSDKLoginManager()
    
    manager.logIn(withReadPermissions: ["public_profile"], from: self, handler: { (result, error) in
          if error != nil {
             // handle error
          }
    
          // login successful
    
    })
    
    注意:我提供的代码使用了
    pod'FBSDKLoginKit'
    pod'FBSDKShareKit'
    ,因此可能会有细微的语法差异,但最终它们的工作方式是相同的

    编辑

    我刚刚注意到你正在使用Facebook的
    LoginButton
    。在这种情况下,请参阅文档页以了解更多信息。主要是,以下是您可以做的:


    确保您遵守
    fbsdkloginbuttonelegate
    并实现
    didpleteWithResult
    方法,该方法包含登录操作的结果。我链接的页面包含该方法的参数和您可能需要的其他详细信息。

    以下内容可能会导致访问令牌为零

  • 您没有正确设置
    info.plist
    :必须将布尔值设置为
    YES
    ,并在
    NSAppTransportSecurity
    字典下使用键
    NSAllowsArbitraryLoads

  • Facebook SDK在AppDelegate文件的
    didFinishLaunchingWithOptions
    中未正确初始化:您必须进行此调用:

    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    
  • 您的SDK版本不是最新的。据报道,某些版本在这方面存在缺陷,因此如果前面的2点已经涵盖,那么更新SDK可能会解决您的问题

  • 为了回答您的另一个问题,FacebookSDK有一个
    login
    方法,其中包含一个闭包参数,如下所示

    let manager = FBSDKLoginManager()
    
    manager.logIn(withReadPermissions: ["public_profile"], from: self, handler: { (result, error) in
          if error != nil {
             // handle error
          }
    
          // login successful
    
    })
    
    注意:我提供的代码使用了
    pod'FBSDKLoginKit'
    pod'FBSDKShareKit'
    ,因此可能会有细微的语法差异,但最终它们的工作方式是相同的

    编辑

    我刚刚注意到你正在使用Facebook的
    LoginButton
    。在这种情况下,请参阅文档页以了解更多信息。主要是,以下是您可以做的:

    确保您遵守
    fbsdkloginbuttonelegate
    并实现
    didpleteWithResult
    方法,该方法包含登录操作的结果。我链接的页面包含该方法的参数和您可能需要的其他详细信息