iOS版LinkedIn认证

问题描述 投票:2回答:6

我开始开发用于iOS版雨燕的应用程序。现在,我在哪里,我需要创建一个登录系统的一部分。然而,我们需要从人的LinkedIn资料。

我如何使用的OAuth2 API iOS中实现这一目标?

我已经创造了LinkedIn开发区域的应用程序,但现在我卡住了。我是从一个人,我需要使用UIWebView一些建议,但我不知道这是如何工作。

ios swift api linkedin linkedin-api
6个回答
29
投票

在斯威夫特应用集成LinkedIn登录

首先,下载LinkedIn iOS SDK。我将使用1.07稳定版的这个例子。我会在下面的集成指南here

  1. 创建一个新的Developer Application
  2. 添加您的iOS应用的束标识符来移动在你的LinkedIn应用。
  3. 添加您的LinkedIn应用ID和URL计划,您的应用程序的Info.plist文件。
  4. 白名单中指定的URL LinkedIn计划和ATS的URL。
  5. linkedin-sdk.framework库复制到您的应用程序。确保“复制文件,如果有必要”和“创建组的文件夹引用”被选中。

项目设置完成,现在让我们写一些代码!

创建一个名为BridgingHeader.h一个新的头文件。下目标 - > YourApp - >构建设置 - >夫特编译器 - “Objective-C的桥接报头” 代码生成,添加到MyApp/BridgingHeader.h

在你BridgingHeader.h,添加以下两行:

#import <Foundation/Foundation.h>
#import <linkedin-sdk/LISDK.h>

在你AppDelegate.swift,添加以下代码来处理OAuth URL回调:

斯威夫特3:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    if LISDKCallbackHandler.shouldHandle(url) {
        return LISDKCallbackHandler.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
    }
    return true
}

斯威夫特2.X:

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    if LISDKCallbackHandler.shouldHandleUrl(url) {
        return LISDKCallbackHandler.application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
    }
    return true
}

现在是时候登录的用户。在您的视图控制器,说你有一个“登录”按钮。你IBAction可能是这样的:

@IBAction func doLogin(sender: AnyObject) {
    LISDKSessionManager.createSessionWithAuth([LISDK_BASIC_PROFILE_PERMISSION], state: nil, showGoToAppStoreDialog: true, successBlock: { (returnState) -> Void in
        print("success called!")
        let session = LISDKSessionManager.sharedInstance().session
        }) { (error) -> Void in
            print("Error: \(error)")
    }
}

登录时,用户将被要求使用你的应用程序进行身份验证:

LinkedIn

如果用户允许,成功块将被调用,您可以获取有关身份验证的用户信息。如果登录失败,或者用户不允许访问,那么不良区将被调用,您可以提醒所发生问题的用户。

要获得有关我们与认证的用户信息,请拨打用户的配置文件的GET请求:

let url = "https://api.linkedin.com/v1/people/~"

if LISDKSessionManager.hasValidSession() {
    LISDKAPIHelper.sharedInstance().getRequest(url, success: { (response) -> Void in
        print(response)
        }, error: { (error) -> Void in
            print(error)
    })
}

response.data将包含在认证的用户信息:

"{\n  \"firstName\": \"Josh\",\n  \"headline\": \"Senior Mobile Engineer at A+E Networks\",\n  ... }"

进一步阅读docs更多的东西,你可以用API做的。

样本项目(有混淆我的应用程序ID),可以发现here


3
投票

在雨燕3.0,UIApplicationOpenURLOptionsKey应增加对FacebookLinkedIn

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

    if  LISDKCallbackHandler.shouldHandle(url)
    {
        return LISDKCallbackHandler.application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: nil)
    }
    else
    {
        return FBSDKApplicationDelegate.sharedInstance().application(app, open: url
            , options: options)
    }
}

2
投票

LinkedIn是一个有趣的东西,因为它们的移动SDK有两个缺陷:

因此,尽管日航的回答是足够的,你可能想看看在你的移动应用程序,而不是LinkedIn SDK实现LinkedIn的authorization_code OAuth的流程。这大致如下流程如下:

  1. 该应用程序将用户重定向到Web服务器。
  2. Web服务器开始LinkedIn认证流程,用户LinkedIn重定向。
  3. 用户登录到LinkedIn,和被重定向到Web服务器。
  4. Web服务器读取响应,并交换了授权码与LinkedIn的访问令牌。
  5. Web服务器的用户重定向回应用程序,使用自定义URL方案发送LinkedIn的访问令牌。
  6. 该应用程序使用LinkedIn的访问令牌登录到Stormpath。

听起来很复杂?它实际上更简单似乎比。其实,我写了一些demo code for this flow using Express.js & Swift。这个例子最终将访问令牌Stormpath最终验证用户,但你总是可以用自己的代码调用LinkedIn REST API to grab the profile's information更换。


1
投票

我知道这已经回答了,但我面对这个问题,以及和做了一切都在接受的答案集,但是由于各种原因的代码仍然没有打成功或失败。原来,与iOS 9以下已被弃用。

- (BOOL)application:(UIApplication *)application 
        openURL:(NSURL *)url 
        sourceApplication:(NSString *)sourceApplication 
        annotation:(id)annotation

解决的办法是改用这样的:

- (BOOL)application:(UIApplication *)app
        openURL:(NSURL *)url
        options:(NSDictionary<NSString *,
                         id> *)options

例如,你可以这样做:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
if ([LISDKCallbackHandler shouldHandleUrl:url]) {
    return [LISDKCallbackHandler application:app openURL:url sourceApplication:options[UIApplicationLaunchOptionsSourceApplicationKey] annotation:options[UIApplicationLaunchOptionsAnnotationKey]];
}
return YES;
}

0
投票

更新爱德华江的回答;变化是在服务器+移动侧令牌访问。来源:https://developer.linkedin.com/docs/ios-sdk-auth


0
投票

作为@Edward江已经解释过,LinkedIn变成整个认证过程非常笨拙,由于其安装在LinkedIn应用的要求。我写了一个处理嵌入式WKWebView中的身份验证通量斯威夫特库:LinkedInAuth-Swift

这个库甚至消除处理LinkedIn在服务器响应的必要性。其呈现所述认证通量WKWebView实例是在电荷捕获由LinkedIn返回的授权代码,并且随后请求所述接入令牌。

© www.soinside.com 2019 - 2024. All rights reserved.