2016-11-19 102 views
0

我使用此獲取用戶名和電子郵件(見下文)。FBSDKLoginManager保持Facebook登錄,因爲獲取用戶信息

問題是,登錄webview關閉了,對initWithGraphPath的調用:@「me」被完成異步,所以用戶可以在我得到這個調用響應的時候看到空字段。

有沒有辦法讓facebook登錄webview打開,因爲對initWithGraphPath的調用完成了?

謝謝!

-(void)loginButtonClicked_Facebook{ 
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
    [login 
    logInWithReadPermissions: @[@"public_profile", @"email"] 
    fromViewController:self 
    handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
     if (error) { 
      NSLog(@"Process error"); 
     } else if (result.isCancelled) { 
      NSLog(@"Cancelled"); 
     } else { 
      if ([result.grantedPermissions containsObject:@"email"]){ 
       NSLog(@"result is:%@",result); 
       [self fetchUserInfo]; 
      } 
     } 
    }]; 
} 

-(void)fetchUserInfo{ 
    if ([FBSDKAccessToken currentAccessToken]){ 
     NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]); 
     [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, email"}] 
     startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
      if (!error){ 
       NSString *userName = [result valueForKey:@"name"]; 
       NSString *email = [result valueForKey:@"email"]; 
       self.tfName.text=userName; 
       self.tfEmail.text=email; 
       self.tfEmailConfirmation.text=email; 
       NSLog(@"resultis:%@",result); 
      }else{ 
       NSLog(@"Error %@",error); 
      } 
     }]; 
    } 
} 

回答

0
//YOURCONTROLLER.M 

#import <FBSDKCoreKit/FBSDKCoreKit.h> 
#import <FBSDKLoginKit/FBSDKLoginKit.h> 


NSString *getFbid; 
NSString *getFbFirstName,*getFBlastName, *getFbemail,*getfbBirthday,*getfbGender,*getFBpHone,*getFBlocation,*getFBcountry; 





- (void) loginButton: (FBSDKLoginButton *)loginButton 
didCompleteWithResult: (FBSDKLoginManagerLoginResult *)result 
      error: (NSError *)error{ 

NSLog(@"facebook login button test"); 


} 
- (void) loginButtonDidLogOut:(FBSDKLoginButton *)loginButton{ 
NSLog(@"facebook logout button test"); 
} 




-(void)loginButtonClicked 
{ 



NSUserDefaults *defFacebookData = [NSUserDefaults standardUserDefaults]; 


FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
[login 
logInWithReadPermissions: @[@"public_profile", @"user_friends", @"email"] 
fromViewController:self 
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
    if (error) { 
     DLog(@"Process error======%@",error.description); 
     indicators.hidden=YES; 
     [indicators stopAnimating]; 
    } else if (result.isCancelled) { 
     DLog(@"Cancelled"); 
     indicators.hidden=YES; 
     [indicators stopAnimating]; 
    } else { 

     if ([FBSDKAccessToken currentAccessToken]) { 



      [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location ,friends ,hometown , gender ,friendlists"}] 
       startWithCompletionHandler:^(
              FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
        if (!error) 
        { 

         // NSLog(@"fetched user:%@", result); 

         // [self fetchingFacebookFriends]; 

         [defFacebookData setObject:[result objectForKey:@"email"] forKey:@"fbEmail"]; 

         [defFacebookData setObject:[result objectForKey:@"id"] forKey:@"fbID"]; 


         //PASS ID 
         getFbid = [result objectForKey:@"id"]; 
    NSLog(@"getFbid========>%@",getFbid); 

         //PASS FIRST NAME 
         getFbFirstName=[result objectForKey:@"first_name"]; 

    NSLog(@"first======>%@",getFbFirstName); 

         //PASS LAST NAME 
         getFBlastName=[result objectForKey:@"last_name"]; 
    NSLog(@"first======>%@",getFBlastName); 

         //PASS EMAIL 
         getFbemail=[result objectForKey:@"email"]; 
    NSLog(@"first======>%@",getFbemail); 

         //PASS PHONE 
         getfbGender=[result objectForKey:@"gender"]; 
    NSLog(@"first======>%@",getfbGender); 


         [defFacebookData setObject:[result objectForKey:@"name"] forKey:@"fbName"]; 

         // Image 
         FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] 
                initWithGraphPath:[NSString stringWithFormat:@"me/picture?type=large&redirect=false"] 
                parameters:nil 
                HTTPMethod:@"GET"]; 
         [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, 
                  id fbImageResult, 
                  NSError *error) { 

NSString *strURL = [NSString stringWithFormat:@"%@",[[fbImageResult objectForKey:@"data"] objectForKey:@"url"]]; 

    NSLog(@"strURL=====>%@",strURL); 

[defFacebookData setObject:strURL forKey:@"fbImage"]; 

          [defFacebookData synchronize]; 


          NSDictionary *fbdict=[NSDictionary dictionaryWithObjectsAndKeys:getFbid,@"id",getFbFirstName,@"first_name",getFBlastName,@"last_name",getFbemail,@"email",getfbGender,@"gender",strURL,@"fbImage", nil]; 

          NSLog(@"done=========>%@",fbdict); 

    UIStoryboard*storyboard=[AppDelegate storyBoardType]; 

    NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; 


    BOOL fblogin =[defaults boolForKey:@"KeyEditProfile"]; 

     if (fblogin) 
      { 

       UIStoryboard*Storyboard=[AppDelegate storyBoardType]; 
       DashboardVC* tabbarController = (DashboardVC*)[Storyboard instantiateViewControllerWithIdentifier:@"DashboardVCId"]; 

// tabbarController.dictFacebookdict = fbdict; // tabbarController.strFBlogin = @「fbAllDataValue」;

   indicators.hidden=YES; 
       [indicators stopAnimating]; 

       [self.navigationController pushViewController:tabbarController animated:YES]; 

     } 

    else 
    { 
    EditFBVC *cpvc=(EditFBVC*)[storyboard instantiateViewControllerWithIdentifier:@"EditFBVCId"]; 
    NSLog(@"get fb id ===%@",getFbid); 

// cpvc.checkBtnclick = @「1」; cpvc.dictFacebookdict = fbdict;

cpvc.strFBlogin [email protected]"fbAllDataValue"; 

     indicators.hidden=YES; 
     [indicators stopAnimating]; 

    [self.navigationController pushViewController:cpvc animated:YES]; 

    }     // [self facebookdataOnServer]; 
         }]; 
        } 
        else{ 
         //[SVProgressHUD dismiss]; 
         DLog(@"error is %@", error.description); 
        } 
       }]; 
     } 
    } 
}]; 

} 
相關問題