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