2011-01-04 19 views
5

Mit der neuen Facebook-Bibliothek ist das FBSession-Objekt verschwunden. Wie kann ich überprüfen, ob der Benutzer sofort eine gültige Sitzung auf seinem Gerät hat, wenn er die App ohne Aufforderung zur Safari oder uiwebview startet?Facebook Connect-Sitzung auf IOS überprüfen

Die Methode [facebook isSessionValid] funktioniert mit acccessToken, aber accessToken wird gesetzt, wenn die App von Safari (oder inline uiwebview) zurückkommt.

Kann die Sitzung mit Cookies überprüft werden?

Antwort

12

Nach erfolgreicher Anmeldung möchten Sie den Zugriffstoken und das Ablaufdatum speichern, wie folgt aus:

[[NSUserDefaults standardUserDefaults] setObject:_facebook.accessToken forKey:@"AccessToken"]; 
[[NSUserDefaults standardUserDefaults] setObject:_facebook.expirationDate forKey:@"ExpirationDate"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

Dann, wenn Sie die App laden, die Sie prüfen möchten, ob ein Token gespeichert wird, wie dies:

_facebook = [[Facebook alloc] initWithAppId:@"[app_id]"]; 
_facebook.accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccessToken"]; 
_facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"]; 
if (![_facebook isSessionValid]) { 
    [_facebook authorize:_permissions delegate:self]; 
} 
else { 
    [_facebook requestWithGraphPath:@"me" andDelegate:self]; 
} 

Hoffe, das hilft!

+0

Ja ich denke, das ist die Methode, die ich annehmen werde, danke – MatterGoal

+0

Funktioniert gut. Es gibt jedoch ein Speicherleck in der _Facebook-Initialisierungszeile (keine Notwendigkeit für beibehalten). –

+0

Guter Punkt, Amir. Es wurde bearbeitet! Danke – donkim

0

Ich bin mir ziemlich sicher es sollte automatisch überprüfen, ob der Benutzer eingeloggt ist, ob über Safari oder die Facebook iPhone App. Wenn der Benutzer nicht angemeldet ist, wird er aufgefordert, eine der oben genannten Anwendungen zu verwenden (Standard ist Safari, wenn die FB-App nicht installiert ist, deshalb öffnet der Simulator die FB in Safari).

+0

Danke Danny Boy, ja, es wird durch Safari überprüft ... aber ich muss nicht von Safari/uiwebView etc übergeben, um zu überprüfen, ob ich eingeloggt bin. Beispiel: Ich logge mich das erste Mal mit Safari/Uiwebview ein, ich schließe die App, dann komme ich zurück zur App Ich möchte, dass mein Benutzer automatisch mit seinem Namen und Facebook Bild erkannt wird – MatterGoal

+0

Das Facebook Objekt selbst wird prüfen, ob der Benutzer ist Mit [self isSessionValid] angemeldet, wenn Sie versuchen, eine Aktion auszuführen. Wenn der Benutzer nicht angemeldet ist, wird er die entsprechende Maßnahme ergreifen, um sie einzuloggen. –

+0

Wenn ich den isSessionValid-Code betrachte, dachte ich, dass er die accessToken-Eigenschaft und ihre Ablaufzeit überprüft. Diese Eigenschaft wird jedoch erst nach einer Login-Aktion (oder einer safai/uiwebview/FBapp-Aktion) gesetzt. Daher kann ich keine Möglichkeit finden, auf diese Informationen zuzugreifen, ohne zumindest einen FB-Dialog anzuzeigen. – MatterGoal