2015-08-23 5 views
2

Я написал базовую регистрационную информацию для Swift Class для Facebook. Я хочу проверить, разрешено ли пользователю авторизовать приложение, потому что в моем случае пользователь каждый раз спрашивает, разрешает ли он это приложение, - он переключается на сафари каждый раз, а не просто регистрируется. Иногда логин полностью завершается неудачей - нет сообщения об ошибке, но и без успеха.Facebook Вход в систему Swift

Вот мой код:

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

Смежные вопросы