2015-08-23 66 views
2

我寫了一個基本的斯威夫特班Facebook登錄處理。 我要檢查,如果用戶已經授權的應用程序,因爲在我的情況下,用戶被要求每次如果他授權的應用程序 - 它切換到每次Safari瀏覽器,而不是簡單地登錄有時登錄完全失敗 - 沒有錯誤信息,但也沒有成功。Facebook的登錄斯威夫特

這裏是我的代碼:

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) 
      } 
     }) 
    } 
} 
} 

感謝

回答

2

在您的視圖控制器viewDidLoad()您可以添加以下代碼:

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

哦,是的,這對我的工作。那麼currentAccessToken代表用戶accesstoken,並且用戶是否已經授予了權限?感謝您的回答! – Tobias