ios - 如何在 ios 中管理 facebook 集成中的 session

标签 ios objective-c facebook

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

这是我的代码

- (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");
    }
}

最佳答案

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

- (void)viewDidLoad {
    [super viewDidLoad];

      if ([FBSDKAccessToken currentAccessToken]) {

        [self getFacebookData];

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

在这里您可以获取用户信息并根据您的需要保存并推送到下一个屏幕:

- (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 - 如何在 ios 中管理 facebook 集成中的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37963818/

相关文章:

objective-c - 当用户点击弹出窗口外部时调用什么方法

ios - NSURLSessionDownloadDelegate 协议(protocol)的错误信息

objective-c - 对 objective-c 有帮助吗?我的应用程序不断崩溃?

objective-c - Obj-C、iOS,如何将基于导航的应用程序转换为基于 View 的应用程序?

php - 为什么我不能使用 Facebook Graph API 点赞评论?

Facebook SDK 登录 - 应用程序不可用 : The application you're trying to use is either no longer available or access is restricted

ios - 如何更新单元格中的 View 框架

ios - 使用 Quartz (iOS) 创建 PDF 注释

iphone - 托管对象之外的 NSManagedObject 子类作为普通对象

ios - 动态更改表格 View 单元格的高度