Użyłem Facebook Connect w innym projekcie z relatywnie niewielkimi problemami, jednak w moim obecnym projekcie wydaje mi się, że kiedy dzwonię pod numer [facebook logout];
, nie usuwa on szczegółów użytkownika. Gdybym wtedy ponownie uruchomić aplikację, mam następujący w funkcji didFinishLaunchingWithOptions:iOS - Facebook Connect wyloguj się nie usuwając danych logowania?
facebook = [[Facebook alloc] initWithAppId:@"XXXXXXXXXXXXX" andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]){
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
NSLog(@"startup login");
[self loginToFacebook];//attempt to login automatically on startup
Moja funkcja loginToFacebook to:
- (void)loginToFacebook
{
NSLog(@"Logging into facebook");
//set up facebook and login in automatically if possible
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]){
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
if (![facebook isSessionValid]){
//get permissions that user will need to agree to us using
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"user_likes",@"read_friendlists",@"offline_access", @"publish_stream",
nil];
//authorise our login
[facebook authorize:permissions];
[permissions release];
}
else
{
[facebook authorize:nil];
}
}
Jeśli chodzi o mnie, tym razem powinno być poproszony o zaloguj się za pomocą mojego adresu e-mail i hasła. Ja głównie za pomocą symulatora więc sama aplikacja Facebook nie jest przyczyną, a w klasie Facebook.h Zmieniłem
[self authorizeWithFBAppAuth:NO safariAuth:YES];
do
[self authorizeWithFBAppAuth:NO safariAuth:NO];
Jednak to, co się dzieje, że okna facebook krótko miga i znika, tak jak oczekiwałbym, gdy już się zaloguję. Następnie ładuje mój identyfikator, imię, listę znajomych itp. z moich poprzednich danych logowania. Nie mogę już zmieniać użytkowników! Dodam, że mam następujący kod, który drukuje się odpowiednio na „”: wylogowania
- (void)fbDidLogout{
NSLog(@"Logged out of facebook");
}
... która drukuje na konsoli, gdy [facebook wylogowania] jest tzw. Mam również poprawne schematy adresów URL, więc nie ma problemu.
Jak już mówiłem, pracuję nad inną aplikacją, ale nie widzę tego, co mogłem przeoczyć tym razem. Witam każdą sugestię, ponieważ podejrzewam, że jest to coś śmiesznie prostego.
Edytuj: Właśnie przetestowałem to na urządzeniu, a próba zalogowania się na Facebooku powoduje awarię aplikacji. Podejrzewam, że to dlatego, że próbuje zalogować się przy użyciu "zapisanych" informacji, które nie istnieją, ponieważ nie zalogowałem się jeszcze na urządzeniu. Nadal badam, ale znowu, jeśli ktokolwiek zauważy oczywistą wadę, byłbym bardzo wdzięczny.
Edycja2: Próbowałem usunąć pliki cookie za pomocą przykładu Safecase. Ja również wydrukować wszystkie pliki cookie w czasie) didFinishLaunchingWithOptions i b) podczas fbDidLogout i uzyskać następujące:
a) `2012-05-18 10: 40: 40.665 MojaApl [15545: 17003] ( "",
"<NSHTTPCookie version:0 name:\"c_user\" value:\"634361620\" expiresDate:2012-06-17 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:TRUE>",
"<NSHTTPCookie version:0 name:\"csm\" value:\"2\" expiresDate:2012-06-17 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>",
"<NSHTTPCookie version:0 name:\"datr\" value:\"gxe2T8ZyBzMGb5w3LS29Q0kJ\" expiresDate:2014-05-18 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>",
"<NSHTTPCookie version:0 name:\"locale\" value:\"en_US\" expiresDate:2012-05-25 09:36:43 +0000 created:2012-05-18 09:36:44 +0000 (3.59027e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>",
"<NSHTTPCookie version:0 name:\"lu\" value:\"RgayA7CMIlsAl-lOD2-Y-O3g\" expiresDate:2014-05-18 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>",
"<NSHTTPCookie version:0 name:\"m_user\" value:\"0%3A0%3A0%3A0%3Av_1%2Cajax_1%2Cwidth_320%2Cpxr_1%2Cgps_1%3A1337333673%3A2\" expiresDate:2012-08-16 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:FALSE>",
"<NSHTTPCookie version:0 name:\"s\" value:\"Aa4WdKU-oOFathmK\" expiresDate:2012-06-17 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:TRUE>",
"<NSHTTPCookie version:0 name:\"xs\" value:\"125%3AFFIWXjAXDXUMmw%3A2%3A1337333673\" expiresDate:2012-06-17 09:34:33 +0000 created:2012-05-18 09:34:34 +0000 (3.59026e+08) sessionOnly:FALSE domain:\".facebook.com\" path:\"/\" isSecure:TRUE>"
) `
b) 2012-05-18 10:41:16.530 MyApp[15545:17003] ( )
Ponieważ zmienia się pusta, chciałbym założyć, że zostaną usunięte. Ale po ponownym otwarciu aplikacji wszyscy znowu tam są.
Edycja3: Jedynym sposobem, w jaki znalazłem to, jest usunięcie wszystkich plików cookie zaraz po otwarciu aplikacji, jednak oznacza to, że użytkownik musi się logować za każdym razem, nawet jeśli zostawili się zalogowani, gdy ostatni raz mieli aplikacja otwarta. To chwilowa poprawka na chwilę, nadal nie jestem pewien, dlaczego to nie działa tak, jak powinno być.
Nic nie zmieniłem Obawiam się. Klasa facebook zawiera już usuwanie plików cookie w funkcji invalidateSession, która jest wywoływana w [wylogowaniu z Facebooka]. Nadal próbowałem dodawać twój kod jawnie do mojej funkcji fbDidLogout, ale problem nadal występuje. – TheBestBigAl
Dodałem to na początku mojego kodu, więc usuwa dane logowania przy każdym uruchomieniu. Nie idealne, ale działa na razie. – TheBestBigAl
Awesome! Pracowałam jak magia dla mnie –