Эдуардо,
Я чувствую твою боль! Я потратил большую часть дня, работая над этим вопросом. Я обнаружил, что когда вы используете SSO и вызов:
Вызов из вашего кода:
[facebook logout:self];
Метод Facebook API:
- (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];
}
}
Facebook API делает недействительными переменные токена доступа и даты истечения срока действия и пытается удалить cookie-файлы Safari для мобильных устройств, но по какой-то причине, вероятно, по вине Apple, cookie-файлы на самом деле не удалены. Поэтому, когда вы попытаетесь войти в следующий раз, ваш мобильный Safari увидит файл cookie и выдаст:
"You have already authorized .... Press "Okay" to continue. Logged in as ... (Not You?)."
Пока Facebook не найдет исправление или Apple не исправит их неработающий API, мы должны обойти единый вход через Safari. Ниже приведены изменения, которые я внес в Facebook.m, чтобы вызвать старый диалог входа в систему. Если вы использовали эти изменения, они могут работать не вечно, но я думаю, что они будут работать очень долго. Также, чтобы убедиться, что это работает с самым последним API Facebook, который я обновил до самого последнего на этот пост (сборка ноября 2011 года).
Вызывается из вашего кода:
[facebook authorize:permissions];
Метод Facebook API:
- (void)authorize:(NSArray *)permissions {
self.permissions = permissions;
// [self authorizeWithFBAppAuth:YES safariAuth:YES];
[self authorizeWithFBAppAuth:NO safariAuth:NO];
}
Если это поможет вам, пожалуйста, оцените эту тему и мой пост, чтобы помочь другим найти ее.
gadildafissh