2016-01-20 408 views

回答

0

请尝试这样!希望你已经正确配置了info.plist

static NSString *kFBLoginRequestIdKey    = @"userID"; 
static NSString *kFBUserInfoIdKey     = @"id"; 
static NSString *kFBLoginRequestAccessTokenKey  = @"accessToken"; 
static NSString *kFBLoginRequestAuthorizationKey = @"authResponse"; 


NSArray *fbReadPermissions = @[@"public_profile", @"email", @"user_friends"]; 
NSArray *fbUserInfoParams = @{@"fields": @"id, name, email, birthday, picture"}; 

[self doFacebookLogin]; 

-(void)doFacebookLogin { 

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init]; 

[loginManager logOut]; 

[loginManager logInWithReadPermissions:fbReadPermissions fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 

    if (error) { 
     NSLog(@"Error %@", error); 
    } 
    else if (result.isCancelled) { 
     NSLog(@"Cancelled by user"); 
    } 
    else { 

     [self getFBUserProfile:^(NSMutableDictionary *requestDict) { 

      if(requestDict.count > 0) { 

      // do stuff here 

      } 

     }]; 
    } 
}]; 

} 


-(void)getFBUserProfile:(void(^)(NSMutableDictionary *requestDict))completionBlock { 

[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:fbUserInfoParams] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 

    NSMutableDictionary *requestDict = [[NSMutableDictionary alloc] init]; 

    if(!error) { 

     NSLog(@"%@",result); 
     NSDictionary *userData = (NSDictionary *)result; 

     NSString *userId = [userData valueForKey:kFBUserInfoIdKey]; 
     NSString *token = [FBSDKAccessToken currentAccessToken].tokenString; 

     NSDictionary *params = @{kFBLoginRequestIdKey: userId, kFBLoginRequestAccessTokenKey: token}; 
     [requestDict setObject:params forKey:kFBLoginRequestAuthorizationKey]; 

     // NSString *profileURL = [[[userData valueForKey:@"picture"] valueForKey:@"data"] valueForKey:@"url"]; 
    } 

    completionBlock (requestDict); 

}]; 
} 
+0

感谢您的回答,我解决它,其实我同时使用Facebook的以及Google.I在返回GIDSignIn和FBSDKApplicationDelegate的共享实例犯错误。 –