2012-02-02 27 views
6

Abbiamo sruck nel problema di logout di accesso di Facebook di iOS. Quando accedo a Facebook utilizzando la mia applicazione, verrà richiesta l'autorizzazione dell'utente con il pulsante 'login' e 'cancella'. Ma questa schermata appare solo la prima volta. Ad esempio, una volta effettuato l'accesso utilizzando Safari o l'app e anche se si è disconnessi da Facebook, l'applicazione sullo schermo che richiede l'autorizzazione dell'utente visualizza solo un pulsante "ok". Non consente di accedere come utente diverso. Perché lo schermo con il pulsante "login" e "annulla" non viene visualizzato ogni volta che viene avviata l'applicazione? Ho provato eliminando i cookie e rimuovendo NSUserDefaults ma senza fortuna.Problema di logout di accesso con facebook iOS sdk

Il problema è dopo il logout, non riesco ad accedere a Facebook come un altro utente. Si presenta ancora come lo stesso utente.

sto chiamando la funzione di logout di seguito in 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]; 
} 
} 

Anche in funzione di delegato fbDidLogout ho rimosso tutte le NSUserDefaults oggetti

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

regrds Shihab

+0

potresti scrivere come implementare il tuo metodo di disconnessione e quali delegati usi? forse posso aiutarti, sono stato alle prese con Facebook pure. –

+0

dov'è il tuo screenshot ?? –

+0

Spiacente, non riesco a collegare la schermata. Il problema che sto affrontando è anche dopo il logout dalla mia applicazione, non posso accedere come un altro utente. Mi aspetto che, dopo il logout, quando sto tentando di accedere nuovamente al sistema, ci dovrebbe essere un collegamento per disconnettersi dalla finestra della password del nome utente di Facebook. Ho visto lo stesso in alcune applicazioni iOS di Facebook. – user867662

risposta

4

FBSession openWithBehavior: completionHandler: può essere utilizzato ..

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.   
}]; 

Per disconnettersi, Ans By Ellen S .. ha funzionato bene per iOS.

+0

Ciao ho qualche problema ho lo stesso problema il mio logout è stato eseguito correttamente non riesco a ottenere la schermata di login per il nuovo utente –

5

ho modificato fbDidLogout metodo e ha funzionato, ecco il codice:

-(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 

Il metodo esegue correttamente la disconnessione dell'utente. Spero che questo aiuti!

2

Ho appena capito che sono entrato nelle impostazioni del mio iPhone e ho ottenuto la privacy ho scelto la scheda di Facebook e spengo dove dice che le applicazioni che hanno richiesto l'accesso al tuo account Facebook appariranno qui. Funziona!!!

7

È possibile cancellare la sessione, così come cancellare i cookie con il seguente codice:

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]; 
} 
+0

Se sei su iOS, non è necessario chiudere la sessione e impostare la sessione attiva a zero quando si chiude già AndClearTokenInformation. Dovrai fare clic due volte per accedere nel caso in cui lo fai. –

+0

Accetto con @AtifImran. Solo 'closeAndClearTokenInformation' fa il lavoro. – Alex

0

All'accesso per l'impostazione di loginBehavior, così quando si esce, con l'altro account di accesso, non apparirà solo autorizzato, senza la schermata di login login.loginBehavior = FBSDKLoginBehaviorWeb; io uso facebook 4.11, è lavoro

Problemi correlati