iOS DeveloperiOS 开发

iOS LinkedIn登录及信息获取

2016-06-22  本文已影响538人  robyzhou

最近段时间做了一下在iOS上使用LinkedIn登录并获取用户数据的预研工作,有些结论记录在这里:

  1. LinkedIn在2015年7月1日的时候,终于推出了自家的SDK,大家可以去他们家的开发者网站下载,这个东西我只看了一下文档,就放弃了,使用这个SDK必须要求用户必须安装了LinkedIn客户端,这对于我们的应用来说是无法接受的,直接就放弃了,希望LinkedIn以后能升级SDK,不要整这么恶心。
  2. 由于SDK的路堵死了,只好调用REST API通过OAuth 2.0协议进行登录和信息获取。

在Github上找到两个不错的开源项目

  1. IOSLinkedInAPI,这是一个比较老的库了,去年的时候就使用过,不过这次拿来用的时候用不了,而且接口并不友好,所以放弃了。
  2. LinkedinIOSHelper, 这是一个非常新的库,虽然目前为止并不是很火,但接口很友好,下载下来就可以用了,所以最后采取了这个。

首先,需要在LinkedIn创建一个应用,地址:https://www.linkedin.com/developer/apps
然后,对应用进行相关设置,其中比较重要的是应用预设权限,如果没特殊的想法,全部选中就好了,

Note: 前段时间LinkedIn对开发者的应用权限进行了调整,目前只有这几个权限了。我的应用其实去年就在LinkedIn上创建了,这次去设置的时候,本来还有不少的,比如r_fullprofile, r_contactinfo这些,而且是勾选中的,因为我之前创建的时候就把这些权限勾中了,当时完全没有问题,这次已经拿不到这些数据了,在去掉这些勾中状态之后,刷新页面就找不到这些权限了,原因是LInkedIn的权限调整,要求成为他们的partner才有这些权限,anyway,先用这些权限用着。

接着,把OAuth2.0的重定向网址填好,以及一些其他的必须填写的信息都挨个填好就行了。

运行Github上下载下来的LinkedinIOSHelper的demo,记得修改ViewController.m里面的设置。


NSArray *permissions = @[@(BasicProfile),  
                         @(EmailAddress),  
                         @(Share),  
                         @(CompanyAdmin)];  

以上是LinkedIn登录的时候需要获取的权限,这里的对应关系在LinkedInAppSettings.m这个文件中:


if ([permissions containsObject:@(ContactInfo)])    [self.permissions addObject:@"r_contactinfo"];  
if ([permissions containsObject:@(FullProfile)])    [self.permissions addObject:@"r_fullprofile"];  
if (![permissions containsObject:@(FullProfile)] &&  
    [permissions containsObject:@(BasicProfile)])   [self.permissions addObject:@"r_basicprofile"];  
if ([permissions containsObject:@(Nus)])            [self.permissions addObject:@"rw_nus"];  
if ([permissions containsObject:@(Network)])        [self.permissions addObject:@"r_network"];  
if ([permissions containsObject:@(EmailAddress)])   [self.permissions addObject:@"r_emailaddress"];  
if ([permissions containsObject:@(Share)])          [self.permissions addObject:@"w_share"];  
if ([permissions containsObject:@(CompanyAdmin)])   [self.permissions addObject:@"rw_company_admin"];  
if ([permissions containsObject:@(Groups)])         [self.permissions addObject:@"rw_groups"];  
if ([permissions containsObject:@(Messages)])       [self.permissions addObject:@"w_messages"];  

从上可以看出这个库定义的权限和LinkedIn定义的权限的对应关系,在这里配置你在LinkedIn中勾选中的权限就好了。

接着是配置应用的相关key:


#warning - Your LinkedIn App ClientId - ClientSecret - RedirectUrl - And state  
          
        [linkedIn requestMeWithSenderViewController:self  
                                           clientId:@""  
                                       clientSecret:@""  
                                        redirectUrl:@""  
                                        permissions:permissions  
                                              state:@""  
                                    successUserInfo:^(NSDictionary *userInfo) {  
                                          
                                        self.btnLogout.hidden = !linkedIn.isValidToken;  
                                          
                                        NSString * desc = [NSString stringWithFormat:@"first name : %@\n last name : %@",  
                                                           userInfo[@"firstName"], userInfo[@"lastName"] ];  
                                        [self showAlert:desc];  
  
                                        // Whole User Info  
                                        NSLog(@"user Info : %@", userInfo);  
                                        // You can also fetch user's those informations like below  
                                        NSLog(@"job title : %@",     [LinkedInHelper sharedInstance].title);  
                                        NSLog(@"company Name : %@",  [LinkedInHelper sharedInstance].companyName);  
                                        NSLog(@"email address : %@", [LinkedInHelper sharedInstance].emailAddress);  
                                        NSLog(@"Photo Url : %@",     [LinkedInHelper sharedInstance].photo);  
                                        NSLog(@"Industry : %@",      [LinkedInHelper sharedInstance].industry);  
                                    }  
                                  failUserInfoBlock:^(NSError *error) {  
                                      NSLog(@"error : %@", error.userInfo.description);  
                                      self.btnLogout.hidden = !linkedIn.isValidToken;   
                                  }  
         ];  

依次填好客户端编号,客户端密码,重定向URL,运行demo,大功告成了。

由于不是partner,所以最多只有这些权限。登录之后,可以获取用户数据,包括名字,头像,地理位置,邮箱,从事行业,职位,公司名字这些信息,更多的类似于工作经历,教育经历这些内容需要申请成为partner才行了。成为partner后的权限,后面拿到权限的时候再来补上。

其实只是把一个库的使用总结了一下而已,以上!

上一篇下一篇

猜你喜欢

热点阅读