ios - Facebook 登录 Swift

标签 ios facebook swift

我为 Facebook 登录处理编写了一个基本的 Swift 类。 我想检查用户是否已经授权该应用程序,因为在我的情况下,每次都会询问用户是否授权该应用程序 - 每次都会切换到 safari 而不是简单地登录。有时登录完全失败 - 没有错误消息,但是也没有成功。

这是我的代码:

class FacebookLogin{

private var data : NSMutableData? = nil

init(){

}

let facebookReadPermissions = ["public_profile", "email", "user_friends"]

    func loginToFacebookWithSuccess(successBlock: () -> (), andFailure failureBlock: (NSError?) -> ()) {

        if FBSDKAccessToken.currentAccessToken() != nil {
            return
        }

        FBSDKLoginManager().logInWithReadPermissions(self.facebookReadPermissions, handler: { (result:FBSDKLoginManagerLoginResult!, error:NSError!) -> Void in
            if error != nil {
                // Process error
                FBSDKLoginManager().logOut()
                failureBlock(error)
            } else if result.isCancelled {
                // Handle cancellations
                FBSDKLoginManager().logOut()
                failureBlock(nil)
            } else {
                // If you ask for multiple permissions at once, you
                // should check if specific permissions missing
                var allPermsGranted = true

                let grantedPermissions = Array(result.grantedPermissions).map( {"\($0)"} )

                for permission in self.facebookReadPermissions {
                    if !contains(grantedPermissions, permission) {
                        allPermsGranted = false
                        break
                    }
                }

                if allPermsGranted {
                    // Do work
                    let fbToken = result.token.tokenString
                    let fbUserID = result.token.userID

                    println(fbUserID)
                    successBlock()
                } else {
                    //The user did not grant all permissions requested

                    failureBlock(nil)
                }
            }
        })
    }

func login() -> Void{
    if(self.alreadyLoggedIn() == false){
        self.performLogin()
    }else{
        self.getFBUserData()
    }
}

private func performLogin() -> Void {
    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager();
    fbLoginManager.loginBehavior = FBSDKLoginBehavior.SystemAccount

    println(FBSDKAccessToken.currentAccessToken())
    fbLoginManager.logInWithReadPermissions(["email"], handler: { (result, error) -> Void in
        if (error == nil){
            var fbloginresult : FBSDKLoginManagerLoginResult = result
            if(fbloginresult.grantedPermissions.contains("email"))
            {
                self.getFBUserData()
                fbLoginManager.logOut()
            }
        }
    })
}

private func alreadyLoggedIn() -> Bool {
    if (FBSDKAccessToken.currentAccessToken() != nil)
    {
        return true
    }else{
        return false
    }
}

private func getFBUserData() -> Void{
    if((FBSDKAccessToken.currentAccessToken()) != nil){
        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).startWithCompletionHandler({ (connection, result, error) -> Void in
            if (error == nil){
                println(result)
            }
        })
    }
}   
}

谢谢

最佳答案

在 View Controller viewDidLoad() 中,您可以添加以下代码:

if (FBSDKAccessToken.currentAccessToken() == nil)
    {
        // User is not already logged
        println("No Logged")
    }
    else
    {
        // User is already logged
        println("Already Logged")
    }

关于ios - Facebook 登录 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32167563/

相关文章:

ios - 绑定(bind)到 MvvmCross 中的 UIBarButtonItem 事件

cocoa-touch - 界面生成器 : How to select nested elements?

c# - 使用 xamarin (ios) 扫描本地网络中的设备

php - 一位 Facebook 用户和一位我的网站用户

javascript - Facebook Messenger API 获取用户位置

ios - 在同一个应用程序上使用两个 Facebook 应用程序 ID 进行测试

Swift & Parse - 我尝试通过查询检索用户名。

ios - 展开表格 View 部分时如何旋转图像?

ios - Swift - 如何在使用 AVFoundation 录制音频时消除延迟

ios - 如何使用 Rxswift 获取 UIImageView 的 Observable is Empty?