2016-10-06 23 views
0

FB SDKを使用してログインしようとしています。しかし、時には既にログインしているユーザーがいることがあります。私が最初にログアウトするために使用するコードは次のとおりです。FBSDKLoginManagerのログアウトとログイン管理

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init]; 

[loginManager logOut]; 
[loginManager logInWithReadPermissions:permissionsArray fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
} 

私は二つのことを疑問に思って:

1)以下は、競合状態を打つのだろうか?
2)もしそうなら、この条件を避けるためにlogOutを同期化する必要がありますか?

+1

これは完全な推測ですが、完了ブロックが指定されていないため、私はlogOutが同期していると推測しています。ドキュメントによれば、 'logOut'は' [FBSDKAccessToken setCurrentAccessToken:nil] 'と' [FBSDKProfile setCurrentProfile:nil] 'を呼び出します。どちらも同期すると仮定します。 – toddg

+0

このコードでは何ができますか?本当にログアウトしたい場合は、Safariからログアウトする必要があります。 FBログアウトコールはすべてを設定しますが、ログインしたユーザーはサファリと同じです。また、次回にログインすると、同じユーザーが同じトークンで再び承認されます。 –

答えて

1

私はこの問題のより良い解決策は、currentAccessTokenがnilかどうかをチェックし、それに応じて管理することです。

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init]; 

if ([FBSDKAccessToken currentAccessToken]) { 
    // It will be synchronous and will present an alert controller which will further confirm you to logout and will set token and profile to nil. 
    [loginManager logOut]; 
    //after logout you can change your LogOut Button to Login Facebook as done in Facebook samples. 
} else { 
    // if the token is nil, just make a login call 
    [loginManager logInWithReadPermissions:permissionsArray fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
    } 
} 
関連する問題