首页 文章

Swift Facebook集成登录回调问题

提问于
浏览
0

我正在尝试将 Facebook login 集成到我的 swift3 应用程序中 .

我正在阅读本文档Facebook SDK for Swift .

pod 安装后

pod 'FacebookLogin'
pod 'FacebookShare'

并将它们添加到 Linked framework and libraries 中,facebook登录正如显示一个Safari登录的示例,并重定向相同的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 ,读取Login Behavior documentation无法分配 callback .

我做错了什么?

1 回答

  • 2

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

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

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

    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
    
    • 您拥有的SDK版本不是最新版本 . 据报道,某些版本在该区域存在错误,因此如果您已满足前两个版本,则更新SDK可能会解决您的问题

    要回答您的其他问题,Facebook SDK有一个带有闭包参数的 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' ,因此可能存在轻微的语法差异,但最终它们的工作方式相同 .

    EDIT

    我刚注意到你're using Facebook' s LoginButton . 在这种情况下,请参阅文档的this页面以获取更多信息 . 主要是,这是你可以做的:

    确保符合 FBSDKLoginButtonDelegate 并实现 didCompleteWithResult 方法,该方法包含登录操作的结果 . 我链接的页面包含方法的参数和您可能需要的其他详细信息 .

相关问题