这是一个小型、非侵入式库,简化了使用OAuth2协议对LinkedIn进行身份验证和授权的过程。API使用UIWebView对LinkedIn进行身份验证。
如果最终用户已成功认证,您将获得一个访问令牌,这是从LinkedIn API检索数据所必需的。
为什么还需要另一个LinkedIn库?尽管已经存在一些iOS库封装了LinkedIn API,但据我所知,没有任何一个库(至少公开的)使用LinkedIn首选的OAuth2协议。
可以从cocoapods中将此库作为Pod获取。
如果您不使用CocoaPods,您可以始终下载此库并将IOSLinkedInAPI文件夹中的文件导入到您现有的项目中。
使用LIALinkedInApplication创建LinkedIn客户端。LIALinkedInApplication定义了应用程序,该应用程序被授权访问用户的LinkedIn数据。
LIALinkedInApplication *application = [LIALinkedInApplication applicationWithRedirectURL:@"http://www.ancientprogramming.com/liaexample"
clientId:@"clientId"
clientSecret:@"clientSecret"
state:@"DCEEFWF45453sdffef424"
grantedAccess:@[@"r_fullprofile", @"r_network"]];
return [LIALinkedInHttpClient clientForApplication:application presentingViewController:nil];
然后可以使用客户端检索访问令牌,并使用LinkedIn API访问数据
- (IBAction)didTapConnectWithLinkedIn:(id)sender {
[self.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);
}];
}
以下代码示例获取一个访问令牌,并使用它来获得授予访问权限的用户的user数据。如果用户在UIWebView中点击取消按钮拒绝授权,则执行取消回调。如果任何步骤因某些原因失败,则执行失败回调。
一个小型示例应用可以在以下位置找到:https://github.com/jeyben/IOSLinkedInAPI/tree/master/Example/IOSLinkedInAPI-Podexample/IOSLinkedInAPI-Podexample
它使用了 cocoapods。在克隆后,只需在该目录中运行 'pods install',然后应该就能运行应用。
当前库正在处理身份验证和授权。我想改进库,使其更容易进行实际 API 调用。我的想法是让客户端在获取 accessToken 后记住它,然后自动将其添加到后续调用中,并附带 format=json GET 参数。
如果你有关于如何实现的创意,请告诉我。