我想在我的应用程序中加入一些 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];
}
}
非常感谢!