Я хочу добавить некоторую интеграцию Facebook в свое приложение. На этом этапе мне удалось войти в систему, опубликовать на стене друзей, получить список друзей и т.д. Все в порядке, за исключением одной вещи...
Если пользователь удаляет приложение из ваших настроек/приложений Facebook а затем входит в приложение iOS, код не распознает, что приложение Facebook было удалено из пользовательских настроек и предполагает, что он зашел в систему (это проблема, потому что если пользователь пытается отправить сообщение на стену друга, приложение ничего).
Затем пользователь закрывает приложение iOS и перезапускает его... С этой перезагрузкой приложение iOS фиксируется и обнаруживает, что пользователь больше не вошел в систему.
Я не могу обнаружить момент сразу после того, как пользователь удалит приложение facebook из настроек, чтобы принести пользователю поток входа...
Вот мой код:
На первой сцене моего приложения...
if([FBSession activeSession].state == FBSessionStateCreatedTokenLoaded)
{
NSLog(@"Logged in to Facebook");
[self openFacebookSession];
UIAlertView *alertDialog;
alertDialog = [[UIAlertView alloc] initWithTitle:@"Facebook" message:@"You're already logged in to Facebook" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alertDialog show];
[alertDialog release];
return YES;
}
else{
NSLog(@"Not logged in to Facebook"); //Show the login flow
return NO;
}
Вот код для openFacebookSession
-(void)openFacebookSession
{
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"publish_stream",
nil];
[FBSession openActiveSessionWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceFriends allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
[self sessionStateChanged:session state:status error:error];
}];
}
Код для sessionStateChanged...
-(void)sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error
{
switch (state) {
case FBSessionStateOpen: {
NSLog(@"Session opened");
}
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
if (error) {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
}
Большое спасибо!