天天看點

iOS LinkedIn登入及資訊擷取

最近段時間做了一下在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

然後,對應用進行相關設定,其中比較重要的是應用預設權限,如果沒特殊的想法,全部選中就好了,

iOS LinkedIn登入及資訊擷取

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,大功告成了。

iOS LinkedIn登入及資訊擷取

由于不是partner,是以最多隻有這些權限。登入之後,可以擷取使用者資料,包括名字,頭像,地理位置,郵箱,從事行業,職位,公司名字這些資訊,更多的類似于工作經曆,教育經曆這些内容需要申請成為partner才行了。成為partner後的權限,後面拿到權限的時候再來補上。

其實隻是把一個庫的使用總結了一下而已,以上!