如何使用Swift 2.0和iOS 9.1进行Facebook登录?

时间:2015-11-02 15:45:10

标签: facebook swift ios9.1

我已将最新的Facebook SDK添加到为XCode 7.1编写的iOS 9.1项目中。不幸的是,我所知道的是 Swift ,而不是 Objective C Facebook's developer site documentation仅包含目标C 中的文档。谷歌上的每一次搜索都会显示过于陈旧的文档,因为过去6个月内事情发生了很大变化。所以我有点失落。

我用plist文件做了所有简单的事情。

我能够使用:

import FBSDKCoreKit
import FBSDKLoginKit

我还补充说:

return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)

return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

到我的AppDelegate.swift文件。这一切都有效并且构建成功。显然,我也添加了正确的框架。除此之外,我处于停滞状态,因为我不知道添加登录按钮的语法,用于捕获我认为会返回带有令牌的json字符串以及我可以用来存储在用户帐户中的其他配置文件信息等等。

2 个答案:

答案 0 :(得分:8)

你走在正确的轨道上。

Have you set up your pList yet?

您必须添加到VC,添加登录按钮,处理委托,然后处理FB信息。像(但不完全)这样的东西:

class yourVC: UIViewController, FBSDKLoginButtonDelegate, UITextFieldDelegate 

{
var loginView : FBSDKLoginButton = FBSDKLoginButton()

viewDidLoad() {
            loginView.frame = CGRectMake(20, 20, theWidth-40, 40)
            self.view.addSubview(loginView)
            loginView.readPermissions = ["public_profile", "email", "user_friends","user_birthday"]
            loginView.delegate = self

}

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
        if ((error) != nil)
        {
        //handle error
        } else {
                returnUserData()
        }
    }

func returnUserData()
    {


  let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"id,interested_in,gender,birthday,email,age_range,name,picture.width(480).height(480)"])
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

        if ((error) != nil)
        {
            // Process error
            print("Error: \(error)")
        }
        else
        {
            print("fetched user: \(result)")
            let id : NSString = result.valueForKey("id") as! String
            print("User ID is: \(id)")
            //etc...
         }
      })
}

你必须使用returnData()部分才能正确使用它,但是这段代码可以让你获得90%的胜利。

我已经包含了广泛的权限(用户年龄,感兴趣等),但您必须自己配置它们。老实说,这部分(困难的部分)与它的对象C对应物非常相似,这更好地记录了。只需下载一些可以工作的项目,并尝试将它们拼凑成适合您喜欢的内容。

很难让它全部正常工作,但要试一试,并坚持下去!

答案 1 :(得分:5)

如果您想通过点击自定义按钮从Facebook登录,这将有助于:

@IBAction func onClickFacebookButton(sender: UIButton){
    let login = FBSDKLoginManager()
    login.loginBehavior = FBSDKLoginBehavior.SystemAccount
    login.logInWithReadPermissions(["public_profile", "email"], fromViewController: self, handler: {(result, error) in
        if error != nil {
            print("Error :  \(error.description)")
        }
        else if result.isCancelled {

        }
        else {
            FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "first_name, last_name, picture.type(large), email, name, id, gender"]).startWithCompletionHandler({(connection, result, error) -> Void in
                if error != nil{
                    print("Error : \(error.description)")
                }else{

                    print("userInfo is \(result))")

                }
            })
        }

    })
}