IOSLinkedInAPI 2.0.0

IOSLinkedInAPI 2.0.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新版本2014年12月

未声明的个人维护。



  • 作者
  • Jacob von Eyben 和 Eduardo Fonseca

这是一个小型、非侵入式库,简化了使用OAuth2协议对LinkedIn进行身份验证和授权的过程。API使用UIWebView对LinkedIn进行身份验证。

Authentication

Authentication

如果最终用户已成功认证,您将获得一个访问令牌,这是从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];
  • redirectURL: 必须是一个http或https URL(由LinkedIn要求),但除了这一点外,端点不需要做出任何响应。此库仅使用端点来确定在UIWebView中何时截获调用。
  • clientId: LinkedIn在注册应用程序时提供的id。
  • clientSecret: LinkedIn在注册应用程序时提供的密码。
  • state: 用于防止跨站请求伪造(CSRF)的state。应该是一个难以猜测的东西。
  • grantedAccess: 一个数组,告诉应用希望被最终用户授予哪些权限。完整列表请见此处:http://developer.linkedin.com/documents/authentication
  • presentingViewController: 将从中以模态方式展示UIWebView的视图控制器。传递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 参数。

如果你有关于如何实现的创意,请告诉我。

http://www.ancientprogramming.com