2

ログイン方法を知っている

[FBSession openActiveSessionWithReadPermissions:readPermissions allowLoginUI:YES completionHandler:
 ^(FBSession *session,FBSessionState state, NSError *error) {
     [self sessionStateChanged:session state:state error:error];//This is done on main thread already
 }];

問題は、ユーザーがログアウトボタンを押したときなど、ログアウト時に何をするかです。

現在、私は単にやっています

[FBSession.activeSession closeAndClearTokenInformation];
[[NSNotificationCenter defaultCenter] postNotificationName:FACEBOOKSESSIONCHANGED object:self];

しかし、私はそれが真実ではないと思います。[FBSession.activeSession closeAndClearTokenInformation]; [self sessionStateChanged:session state:state error:error] で呼び出す必要があります。ログアウト後。

では、ログアウトするにはどうすればよいですか?

facebook のおいしいサンプルを確認しましたが、ログアウトするメカニズムが見つかりませんでした。デリゲートを持つ特殊なfacebook viewControllerを使用しているようです。しかし、どのデリゲートも呼び出されません。

4

2 に答える 2

1

ログアウトメカニズムでは、アクセストークンを解放し、nilに設定することで、アクセストークンを無効にします。ただし、ログインでsafariを使用している場合でも、Cookieは存在します。したがって、次回ユーザーがサファリを開いてFacebookにアクセスしようとすると、既に承認されていると表示されます。クッキーを削除するには、次の方法を使用します

- (void)fbDidLogout
{
  NSLog(@"Logged out of facebook");
  NSHTTPCookie *cookie;
  NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  for (cookie in [storage cookies])
   {
       NSString* domainName = [cookie domain];
       NSRange domainRange = [domainName rangeOfString:@"facebook"];
       if(domainRange.length > 0)
       {
            [storage deleteCookie:cookie];
       }
   }
}

closeAndClearTokenInformationを呼び出した後でも開いているセッションを返すバグがいくつかあるので、より確実に呼び出すこともできます。https://developers.facebook.com/bugs/497294866962479?browse=search_507cb8ebc4f025673237228

[FBSession.activeSession closeAndClearTokenInformation];
[FBSession.activeSession close];
[FBSession setActiveSession:nil];

他のオプションは、アクティブなセッションをチェックするときに次の条件を使用することです。

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

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

于 2013-02-15T05:26:56.493 に答える