2015-07-27 5 views
1

У меня есть приложение, выполняющее логин facebook, который хорошо работает, но каждый раз, когда я его снова открываю, мне нужно снова подключиться к facebook для входа в систему. Я также использую sdk для входа в google, где я могу вызвать функцию gSignIn.signInSilently(), есть ли что-то подобное для facebook? Я нашел this для javascript sdk, но я не знаю, возможно ли это для SDK ios и как его использовать в swift ...Facebook IOS SDK: как сделать молчаливый вход?

+0

facebook не обеспечивают бесшумную логин, но вы можете проверить, существует ли сеанс пользователя или нет –

+0

если FBSDKAccessToken.currentAccessToken()! = Ноль {// пользователь вошел в систему } else {// do Login здесь} –

ответ

5

В SDK Facebook автоматически сохраняется состояние входа в систему, что подтверждается проверкой на наличие токен доступа.

Вы можете проверить для доступа, используя следующий метод:.

FBSDKAccessToken.currentAccessToken() 

Вы можете проверить на наличие маркера, который будет означать, что пользователь вошел в систему

Проверьте docs больше Детали.

1

я попробовал этот

if(![FBSDKAccessToken currentAccessToken]) 
{ 
    FBSDKLoginManager *manager = [[FBSDKLoginManager alloc]init]; 
    [manager logInWithReadPermissions:@[@"public_profile", @"email",@"user_photos"] handler:^(FBSDKLoginManagerLoginResult *result,NSError *error) 
    { 
     if(error == nil) 
     { 
      NSLog(@"Facebook - successfully login %@",result.token); 
      //login successfully 
      //do your stuff here 
     } 
    }]; 
} 
else 
{ 
    //already login 
    //Do Your stuff here 
} 
0

Я спасаю лексемы строку доступа и вручную установить его на последовательных запусков, чтобы обойти поток повторного входа в систему.

func loginWithFacebook() { 
    //Check for previous Access Token 
    if let accessToken = AccessToken.current { 
     //AccessToken was obtained during same session 
     getAccountDetails(withAccessToken: accessToken) 
    } 
    else if let strAuthenticationToken = UserDefaults.standard.string(forKey: "AccessToken_Facebook") { 
     //A previous access token string was saved so create the required AccessToken object 
     let accessToken = AccessToken(authenticationToken: strAuthenticationToken) 

     //Skip Login and directly proceed to get facebook profile data with an AccessToken 
     getAccountDetails(withAccessToken: accessToken) 
    } 
    else { 
     //Access Token was not available so do the normal login flow to obtain the Access Token 
     LoginManager().logIn(readPermissions: [.publicProfile, .email], viewController: nil) { loginResult in 
      switch loginResult { 
      case .failed(let error): 
       print(error) 

      case .cancelled: 
       print("User cancelled login.") 

      case .success(let grantedPermissions, 
          let declinedPermissions, 
          let accessToken): 

       //Save Access Token string for silent login purpose later 
       let strAuthenticationToken = accessToken.authenticationToken 
       UserDefaults.standard.set(strAuthenticationToken, 
              forKey: "AccessToken_Facebook") 

       //Proceed to get facebook profile data 
       self.getAccountDetails(withAccessToken: accessToken) 
      } 
     } 
    } 
} 

func getAccountDetails(withAccessToken accessToken: AccessToken) { 
    let graphRequest: GraphRequest = GraphRequest(graphPath  : "me", 
                parameters : ["fields" : "id, name, email"], 
                accessToken : accessToken, 
                httpMethod : GraphRequestHTTPMethod.GET, 
                apiVersion : GraphAPIVersion.defaultVersion) 
    graphRequest.start { (response, result) in 
     switch result { 
     case .success(let resultResponse): 
      print(resultResponse) 
     case .failed(let error): 
      print(error) 
     } 
    } 
} 

ПРИМЕЧАНИЕ: Для простоты этого примера, строка Facebook Маркер доступа в настоящее время сохраняется в UserDefaults, но в идеале он должен быть сохранен в брелок.

(Swift 4/Facebook SDK 4,30)

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