Facebook iOS sdk登录注销问题

use*_*662 6 facebook login logout ios

我们在iOS facebook登录注销问题上遇到了麻烦.当我使用我的应用程序登录Facebook时,它将通过"登录"和"取消"按钮提示用户权限.但这个屏幕只在第一次出现.即一旦我们使用safari或应用程序登录,即使我们从Facebook注销,应用程序提示用户权限的屏幕也只显示"确定"按钮.它不允许以其他用户身份登录.为什么每次启动应用程序时都不显示带有"登录"和"取消"按钮的屏幕?我尝试删除cookie并删除NSUserDefaults,但没有运气.

问题是注销后,我无法以另一个用户身份登录facebook.它仍然显示为同一个用户.

我在sdk中调用以下注销功能

(void)logout:(id<FBSessionDelegate>)delegate {

  self.sessionDelegate = delegate;
 [_accessToken release];
 _accessToken = nil;
 [_expirationDate release];
 _expirationDate = nil;

 NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
 NSArray* facebookCookies = [cookies cookiesForURL:
 [NSURL URLWithString:@"http://login.facebook.com"]];
 for (NSHTTPCookie* cookie in facebookCookies) {
   [cookies deleteCookie:cookie];
 }

if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogout)]) {
  [_sessionDelegate fbDidLogout];
}
}
Run Code Online (Sandbox Code Playgroud)

同样在fbDidLogout委托函数中,我删除了所有NSUserDefaults对象

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]) {
    [defaults removeObjectForKey:@"FBAccessTokenKey"];
    [defaults removeObjectForKey:@"FBExpirationDateKey"];
    [defaults synchronize];
}
Run Code Online (Sandbox Code Playgroud)

重新组织什哈布

Ell*_*n S 7

您可以使用以下代码清除会话以及清除cookie:

FBSession* session = [FBSession activeSession];
[session closeAndClearTokenInformation];
[session close];
[FBSession setActiveSession:nil];

NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray* facebookCookies = [cookies cookiesForURL:[NSURL URLWithString:@"https://facebook.com/"]];

for (NSHTTPCookie* cookie in facebookCookies) {
    [cookies deleteCookie:cookie];
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*far 5

我修改了fbDidLogout方法并且它工作正常,这里是代码:

-(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];
        }
    }
}//End of Method
Run Code Online (Sandbox Code Playgroud)

该方法成功注销用户.希望这会有所帮助!


Yas*_*oni 5

可以使用FBSession openWithBehavior:completionHandler:。

FBSession *fbSession = [[FBSession alloc] initWithPermissions:[NSArray arrayWithObjects:@"email",@"publish_actions",@"publish_stream", nil]];
 [fbSession openWithBehavior:FBSessionLoginBehaviorForcingWebView completionHandler:^(FBSession *session,FBSessionState state, NSError *error){
    [FBSession setActiveSession:fbSession]; // Retain the Active Session.        
}];
Run Code Online (Sandbox Code Playgroud)

对于注销,Ellen S ...的Ans在iOS上运行良好。