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

Nat*_*kle 5 facebook swift ios9.1

我已经为我的XCode 7.1项目添加了最新的Facebook SDK iOS 9.1.不幸的是我所知道的是斯威夫特,而不是目标C.Facebook的开发者网站文档仅包含Objective C中的文档.谷歌上的每一次搜索都会显示过于陈旧的文档,因为过去6个月内事情发生了很大变化.所以我有点迷茫.

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

我能够使用:

import FBSDKCoreKit
import FBSDKLoginKit
Run Code Online (Sandbox Code Playgroud)

我还补充说:

return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
Run Code Online (Sandbox Code Playgroud)

return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
Run Code Online (Sandbox Code Playgroud)

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

MQL*_*QLN 8

你走在正确的轨道上.

你有没有设置你的pList?

您将不得不添加到您的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...
         }
      })
}
Run Code Online (Sandbox Code Playgroud)

你将不得不玩这个returnData()部分才能做到正确,但是这段代码可以让你获得90%的成功.

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

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

  • 这有效!我可能会弄清楚剩下的.谢谢! (2认同)

Nak*_*rma 6

如果您想通过点击自定义按钮从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))")

                }
            })
        }

    })
}
Run Code Online (Sandbox Code Playgroud)

  • 如果让firstName = result.valueForKeyPath("first_name")为?打印名字?字符串{print("名字:\(firstName)")} (2认同)