У меня была аналогичная проблема.
После инициализации FBSDKLoginManager
я добавил строку для сброса данных и токена (Facebook):
FBSDKLoginManager *loginmanager= [[FBSDKLoginManager alloc]init];
[loginmanager logOut];
Надеюсь это поможет.
Таким образом, именно так, как спрашивает ОП, «я что-то упустил»?
Да, следующий стандартный пример кода, который можно увидеть повсюду, просто неверен:
-(IBAction)facebookLoginClick:(id)sender
{
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
---- ONE MAGIC LINE OF CODE IS MISSING HERE ----
[login logInWithReadPermissions:@[@"email"]
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
{
if (error) {...}
else if (result.isCancelled) {...}
else { // (NB for multiple permissions, check every one)
if ([result.grantedPermissions containsObject:@"email"])
{ NSLog(@"%@",result.token); }
}
}];
}
вы должны сделать это:
-(IBAction)facebookLoginClick:(id)sender
{
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logOut]; //ESSENTIAL LINE OF CODE
[login logInWithReadPermissions:@[@"email"]
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
{
if (error) {...}
else if (result.isCancelled) {...}
else { // (NB for multiple permissions, check every one)
if ([result.grantedPermissions containsObject:@"email"])
{ NSLog(@"%@",result.token); }
}
}];
}
В противном случае приложение не будет работать, если пользователь изменит аккаунт FB на устройстве. (Если они по какой-то причине не переустановят приложение!)
Еще раз — популярный пример кода выше просто не работает (приложение переходит в бесконечный цикл), если пользователь меняет учетные записи FB. Должен быть сделан вызов logOut
.
person
Vineeth Joseph
schedule
22.05.2015