最近段時間做了一下在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
然後,對應用進行相關設定,其中比較重要的是應用預設權限,如果沒特殊的想法,全部選中就好了,
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DN2EzMzEjM1EzNygDM1EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
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後的權限,後面拿到權限的時候再來補上。
其實隻是把一個庫的使用總結了一下而已,以上!