简体   繁体   English

Swift Facebook登录

[英]Swift Facebook Login

I'm trying to convert the following code lines from Objective C to the new programming language Swift. 我正在尝试将以下代码行从Objective C转换为新的编程语言Swift。 Maybe someone can help me and outline the differences. 也许有人可以帮助我并概述差异。 Would be awesome! 太棒了!

if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) {
 [FBSession openActiveSessionWithReadPermissions:@[@"public_profile"]
                                 allowLoginUI:NO
                            completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
                              // Handler for session state changes
                              // This method will be called EACH time the session state changes,
                              // also for intermediate states and NOT just when the session open
                              [self sessionStateChanged:session state:state error:error];
                            }];}

Thanks, Tobias 谢谢,托比亚斯

Here is my answer: Few keywords like FBSessionStateCreatedTokenLoaded thrown error for me.. So This might helps 这是我的答案:很少关键字像FBSessionStateCreatedTokenLoaded抛出错误给我..所以这可能会FBSessionStateCreatedTokenLoaded帮助

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

  // Whenever a person opens the app, check for a cached session
    if FBSession.activeSession().state == FBSessionState.CreatedTokenLoaded
    {

         // If there's one, just open the session silently, without showing the user the login UI
        FBSession.openActiveSessionWithReadPermissions(["public_profile"], allowLoginUI: false, completionHandler: {
            (session, state, error) -> Void in
             self.sessionStateChanged(session, state: state, error: error)
        })
    }

 return true
}
 func sessionStateChanged(session : FBSession, state : FBSessionState, error : NSError?)
{
    // If the session was opened successfully
    if  state == FBSessionState.Open
    {
        println("Session Opened")
    }
    // If the session closed
    if state == FBSessionState.Closed
    {
        println("Closed")
    }
}

On Button click do Facebook login 点击按钮点击Facebook登录

 @IBAction func FacebookLoginPressed(Sender: AnyObject)
{
   if (FBSession.activeSession().state == FBSessionState.Open || FBSession.activeSession().state == FBSessionState.OpenTokenExtended)
    {
        // Close the session and remove the access token from the cache
        // The session state handler (in the app delegate) will be called automatically
        FBSession.activeSession().closeAndClearTokenInformation()
    }
    else
    {
        // Open a session showing the user the login UI
        // You must ALWAYS ask for public_profile permissions when opening a session
        FBSession.openActiveSessionWithReadPermissions(["public_profile"], allowLoginUI: true, completionHandler: {
            (session:FBSession!, state:FBSessionState, error:NSError!) in

            let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
             // Call the app delegate's sessionStateChanged:state:error method to handle session state changes
            appDelegate.sessionStateChanged(session, state: state, error: error)
        })
    }

}
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
        if FBSession.activeSession.state.value == FBSessionStateCreatedTokenLoaded.value {
            FBSession.openActiveSessionWithReadPermissions(self.facebookReadPermissions, allowLoginUI: true, completionHandler: {(session, state, error) -> Void in
                    self.sessionStateChanged(session, state: state, error: error)
                })
        }

}    
func sessionStateChanged(session:FBSession, state:FBSessionState, error:NSError?) {

}

This is the code 这是代码

if FBSession.activeSession().state == FBSessionStateCreatedTokenLoaded
    {
        FBSession.openActiveSessionWithPublishPermissions("publish_actions", defaultAudience: FBSessionDefaultAudienceFriends, allowLoginUI: true, completionHandler: ^(session : FBSession, state : FBSessionState, error : NSError))
            {
                // Handler for session state changes
                // This method will be called EACH time the session state changes,
                // also for intermediate states and NOT just when the session open
                self.sessionStateChanged(session, state: state, error: error)
        }
    }
           return true
}

func sessionStateChanged(session : FBSession, state : FBSessionState, error : NSError)
{
    // If the session was opened successfully
    if  state == FBSessionStateOpen
    {
        println("Session Opened")
    }
}

This can be simplified to: 这可以简化为:

let state = FBSession.activeSession().state

if state == .Open && state == .OpenTokenExtended {
  FBSession.activeSession().closeAndClearTokenInformation()
} else {
  FBSession.openActiveSessionWithReadPermissions(["public_profile"], allowLoginUI: true) {
    _ in
    FBSession.activeSession().closeAndClearTokenInformation()
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM