从LinkedIn API获取电子邮件地址

我想在我的应用程序中包含“使用LinkedIn注册”function。

我希望能够得到一些信息,如姓名和电子邮件。

默认情况下,我可以得到一个名字,但我被困在获得电子邮件。

我的结果是在JSON中。

这是我的代码:

- (IBAction)logInWithLinkedIn:(id)sender { if ([_client validToken]) { [self requestMeWithToken:[_client accessToken]]; } else { [_client getAuthorizationCode:^(NSString *code) { [self.client getAccessToken:code success:^(NSDictionary *accessTokenData) { NSString *accessToken = [accessTokenData objectForKey:@"access_token"]; [self requestMeWithToken:accessToken]; } failure:^(NSError *error) { NSLog(@"Quering accessToken failed %@", error); }]; } cancel:^{ NSLog(@"Authorization was cancelled by user"); } failure:^(NSError *error) { NSLog(@"Authorization failed %@", error); }]; } } - (void)requestMeWithToken:(NSString *)accessToken { [self.client GET:[NSString stringWithFormat:@"https://api.linkedin.com/v1/people/~?oauth2_access_token=%@&format=json", accessToken] parameters:nil success:^(AFHTTPRequestOperation *operation, NSDictionary *result) { NSLog(@"current user %@", result); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"failed to fetch current user %@", error); }]; } - (LIALinkedInHttpClient *)client { LIALinkedInApplication *application = [LIALinkedInApplication applicationWithRedirectURL:@"redirectURL" clientId:@"key" clientSecret:@"secret" state:@"state" grantedAccess:@[@"r_emailaddress"]]; return [LIALinkedInHttpClient clientForApplication:application presentingViewController:nil]; } 

我的结果是:

名字

标题

siteStandardProfileRequest

任何人都可以看到我如何获得电子邮件?

你应该使用:

 [self.client GET:[NSString stringWithFormat:@"https://api.linkedin.com/v1/people/~:(id,first-name,last-name,maiden-name,email-address)?oauth2_access_token=%@&format=json", accessToken] parameters:nil success:^(AFHTTPRequestOperation *operation, NSDictionary *result) 

这可能有助于:)

你可以使用LinkedIn SDK

 + (void)loginToLinkedInAndFetchProfileData:(RequestResult)resultHandler { void (^PerformDataFetch)() = ^() { if ([LISDKSessionManager hasValidSession]) { NSString *urlString = [NSString stringWithFormat:@"%@/people/~:(id,first-name,last-name,maiden-name,email-address)", LINKEDIN_API_URL]; [[LISDKAPIHelper sharedInstance] getRequest:urlString success:^(LISDKAPIResponse *response) { NSString *token = [[LISDKSessionManager sharedInstance].session.accessToken serializedString]; [[NSUserDefaults standardUserDefaults] setValue:token forKey:LinkedInAccessTokenKey]; [[NSUserDefaults standardUserDefaults] synchronize]; NSData *objectData = [response.data dataUsingEncoding:NSUTF8StringEncoding]; id value = [NSJSONSerialization JSONObjectWithData:objectData options:kNilOptions error:nil]; resultHandler(value, nil); } error:^(LISDKAPIError *error) { resultHandler(nil, error); }]; } }; NSString *token = [[NSUserDefaults standardUserDefaults] stringForKey:LinkedInAccessTokenKey]; if (token.length) { LISDKAccessToken *accessToken = [LISDKAccessToken LISDKAccessTokenWithSerializedString:token]; if ([accessToken.expiration isLaterThan:[NSDate date]]) { [LISDKSessionManager createSessionWithAccessToken:accessToken]; PerformDataFetch(); } } else { [LISDKSessionManager createSessionWithAuth:[NSArray arrayWithObjects:LISDK_BASIC_PROFILE_PERMISSION, LISDK_EMAILADDRESS_PERMISSION, nil] state:nil showGoToAppStoreDialog:YES successBlock:^(NSString *returnState) { PerformDataFetch(); } errorBlock:^(NSError *error) { resultHandler(nil, error); }]; } } 

响应

 > { > emailAddress = "someEmail@email.com"; > firstName = Name; > id = "2342d-6Y"; > lastName = LastName; > } 

这个链接也是有用的

Swift 3的更新:

 // Set preferred scope. let scope = "r_basicprofile%20r_emailaddress" // Then if let accessToken = UserDefaults.standard.object(forKey: "LIAccessToken") { // Specify the URL string that we'll get the profile info from. let targetURLString = "https://api.linkedin.com/v1/people/~:(id,first-name,last-name,maiden-name,email-address)?format=json" 
 -(void)syncLinkedInWithCompetionHandler:(CompletionBlock)block{ [LISDKSessionManager createSessionWithAuth:[NSArray arrayWithObjects:LISDK_BASIC_PROFILE_PERMISSION, LISDK_EMAILADDRESS_PERMISSION, nil] state:@"some state" showGoToAppStoreDialog:YES successBlock:^(NSString *returnState) { NSLog(@"%s","success called!"); LISDKSession *session = [[LISDKSessionManager sharedInstance] session]; NSLog(@"value=%@ \nisvalid=%@",[session value],[session isValid] ? @"YES" : @"NO"); block(returnState, nil); } errorBlock:^(NSError *error) { NSLog(@"%s %@","error called! ", [error description]); block(nil, error); } ]; } -(void)getProfileDataWithCompletion:(CompletionBlock)block { NSString *urlString = [NSString stringWithFormat:@"%@/people/~:(id,first-name,last-name,headline,location,email-address)", LINKEDIN_API_URL]; NSLog(@"urlString = %@",urlString); [[LISDKAPIHelper sharedInstance] getRequest:urlString success:^(LISDKAPIResponse *response) { NSError *jsonError; NSData *objectData = [response.data dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:objectData options:NSJSONReadingMutableContainers error:&jsonError]; NSLog(@"responseDict = %@",responseDict); block(responseDict, nil); } error:^(LISDKAPIError *error) { NSLog(@"error = %@",error); block(error, nil); }]; }