首页 > 编程知识 正文

登录获取用户信息失败,获取登录信息接口异常

时间:2023-05-04 00:27:30 阅读:271144 作者:3378

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


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



版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。