如何在 ios 中的 facebook 集成中管理会话

Posted

技术标签:

【中文标题】如何在 ios 中的 facebook 集成中管理会话【英文标题】:how to manage session in facebook integration in ios 【发布时间】:2016-06-22 09:24:26 【问题描述】:

我将使用 facebook 成功登录,但我有问题,因为当我运行应用程序时,每次都打开 facebook 登录屏幕,但如果用户可以注销而不是打开登录屏幕,我想要主屏幕。所以如何管理会话。

这是我的代码

- (IBAction)gb_login:(id)sender 
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
    login.loginBehavior = FBSDKLoginBehaviorBrowser;
    [login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
     
         if (error)
         
             // Process error
         
         else if (result.isCancelled)
         
             // Handle cancellations
         
         else
         
             if ([result.grantedPermissions containsObject:@"email"])
             


                 NSLog(@"result is:%@",result);

                 [self fetchUserInfo];

             
         
     ];


-(void)fetchUserInfo 

    if ([FBSDKAccessToken currentAccessToken]) 

        NSLog(@"Token is available");

        [[[FBSDKGraphRequest alloc] initWithGraphpath:@"me" parameters:@@"fields": @"id, name, link, first_name, last_name, picture.type(large), email"]
         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) 
             if (!error) 


                 NSLog(@"Fetched User Information:%@", result);

                 NSLog(@"imagepath=%@",[[[result objectForKey:@"picture"]objectForKey:@"data"] objectForKey:@"url"]);
                 NSString *facebook=@"facebook";
                 [[NSUserDefaults standardUserDefaults] setObject:facebook forKey:@"logintype"];
                 [[NSUserDefaults standardUserDefaults] setObject:result forKey:@"facebooklogin"];
                 [[NSUserDefaults standardUserDefaults] synchronize];

             
             else 
                 NSLog(@"Error %@",error);
             
         ];

     else 
       [[FBSDKLoginManager new] logOut];
        NSLog(@"User is not Logged in");
    

【问题讨论】:

【参考方案1】:

首先你需要检查你是否有AccessToken在登录屏幕ViewDidLoad方法:

- (void)viewDidLoad 
    [super viewDidLoad];

      if ([FBSDKAccessToken currentAccessToken]) 

        [self getFacebookData];

    
    else
    
     // here use login code bcz you dont have accessToken
    

在这里,您可以获取 userInfo 并根据需要保存并推送到下一个屏幕:

- (void)getFacebookData
    if ([FBSDKAccessToken currentAccessToken]) 
        [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, bio ,location , friends ,hometown , friendlists , gender"]

         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) 
             if (!error) 
                 NSLog(@"fetched user:%@", result);

               // here you need to code for push a next screen
             

         ];
    

【讨论】:

以上是关于如何在 ios 中的 facebook 集成中管理会话的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS6 上将 Facebook 框架集成到应用程序中?

如何在请求会话之前检测用户是不是有 iOS 集成 Facebook 帐户设置?

如果我在 ios 中使用电话号码登录,如何从 Facebook 获取电子邮件 ID?

如何在没有 Facebook、Twitter 等的情况下将社交功能集成到 iOS 和/或 Android 应用程序中?

iOS 应用程序中的 Facebook 信使

我如何在 ios 的 Facebook 集成中获取用户的位置、家乡和电子邮件 ID