最近段时间做了一下在iOS上使用LinkedIn登录并获取用户数据的预研工作,有些结论记录在这里:
- LinkedIn在2015年7月1日的时候,终于推出了自家的SDK,大家可以去他们家的开发者网站下载,这个东西我只看了一下文档,就放弃了,使用这个SDK必须要求用户必须安装了LinkedIn客户端,这对于我们的应用来说是无法接受的,直接就放弃了,希望LinkedIn以后能升级SDK,不要整这么恶心。
- 由于SDK的路堵死了,只好调用REST API通过OAuth 2.0协议进行登录和信息获取。
在Github上找到两个不错的开源项目
- IOSLinkedInAPI,这是一个比较老的库了,去年的时候就使用过,不过这次拿来用的时候用不了,而且接口并不友好,所以放弃了。
- 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后的权限,后面拿到权限的时候再来补上。
其实只是把一个库的使用总结了一下而已,以上!