14

Facebook iOS SDK 3.0.Xから3.1.1にアップグレードし、コードを書き直しました...

ログアウトワークフローに関するFacebookのドキュメント(https://developers.facebook.com/docs/tutorials/ios-sdk-tutorial/authenticate/#step3)に従って、 FBSession.activeSessionオブジェクトのcloseAndClearTokenInformationメソッドを呼び出しています。

呼び出しの直後にチェックするとまだ開いているセッションが返されるため、これはFacebookセッションの状態には影響しないようです。

現状では、アプリケーションがFacebookでログインすると、ログアウトしません。

[更新1]

要求に応じて、セッションの状態を確認するために使用するコードは次のとおりです。

if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded && FBSession.activeSession.isOpen)
 //logged in
else
 //not logged in

[更新2]

ロジックを少し変更しました...元のコードを次のように変更しました:

if (FBSession.activeSession.isOpen)
 //logged in
else
 //not logged in

FBSession.activeSession.stateは、 FBSessionStateCreatedTokenLoadedではなくFBSessionStateOpenを返していたためです。

4

2 に答える 2

22

多分これは役立つでしょう。 https://developers.facebook.com/bugs/497294866962479?browse=search_507cb8ebc4f025673237228

これらすべてのメソッドを一緒に呼び出して、実際にログアウトしていることを確認します。クレイジーバグ。

[FBSession.activeSession closeAndClearTokenInformation];
[FBSession.activeSession close];
[FBSession setActiveSession:nil];
于 2012-11-18T20:07:18.520 に答える
6

これは遅いかもしれませんが、Android(3.0 SDK)では、作成したコンテキストと同じでない場合(または、アプリを閉じてセッションが何らかの理由で取得されなかった場合)、Session.getActiveSession()がnullを返す場合があります。復元されました)。それは発生し、SDKによって処理されるため、実際にできることはあまりありません。

そのような場合、closeAndClearTokenInformation()を呼び出してもあまり効果はありません(ソースコードを見ると、その理由がわかります)。私にとっての解決策は、これらの線に沿ったものでした(Javaで):

Session session = Session.getActiveSession();
if (session != null) {
   Session.getActiveSession().closeAndClearTokenInformation();
   Session.getActiveSession().close();
   Session.setActiveSession(null);
} else {
   // construct a new session (there are different ways to do this, this is how I do it because I need to pass the FACEBOOK_API_KEY programmatically).
   session = new Session.Builder(MyApp.getInstance()).setApplicationId(Constants.FACEBOOK_API_KEY).build();
   if (session != null) {//to be safe
     //beware with the case of Session vs sesssion.
     Session.setActiveSession(session); 
     session.closeAndClearTokenInformation();
     session.close();
     Session.setActiveSession(null);
   }
}

これにより、セッションは事実上次のようになります。

{Session state:CREATED, token:{AccessToken token: permissions:[]}, appId:xxxxx}

作成されたものは、閉じた(または開いた)ものと同じではないことに注意してください。その状態から、問題なくセッションを再開できます。

お役に立てれば。

于 2013-03-12T23:31:38.953 に答える