美文网首页iOS DeveloperiOS 开发
iOS LinkedIn登录及信息获取

iOS LinkedIn登录及信息获取

作者: robyzhou | 来源:发表于2016-06-22 10:57 被阅读538次

    最近段时间做了一下在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后的权限,后面拿到权限的时候再来补上。

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

    相关文章

      网友评论

        本文标题:iOS LinkedIn登录及信息获取

        本文链接:https://www.haomeiwen.com/subject/gvzgdttx.html