如何在iOS中使用OAuth2 API来实现此目的?
我已经在LinkedIn开发人员区域创建了一个应用程序,但现在我被卡住了.我得到了一些我需要使用UIWebView的建议,但我不知道这是如何工作的.
在Swift应用程序中集成LinkedIn登录首先,下载LinkedIn iOS SDK.我将在本例中使用1.07稳定版本.我将关注集成指南here.
>创建一个新的Developer Application.
>将您的iOS应用程序的Bundle Identifier添加到Mobile下的LinkedIn应用程序中.
>将您的LinkedIn应用ID和URL方案添加到您应用的Info.plist文件中.
>将指定的LinkedIn URL方案和ATS URL列入白名单.
>将linkedin-sdk.framework库复制到您的应用程序.确保选中“必要时复制文件”和“为文件夹引用创建组”.
项目设置完成,现在让我们编写一些代码!
创建一个名为BridgingHeader.h的新头文件.在目标下 – > YourApp – >构建设置 – > Swift编译器 – 代码生成,将MyApp / BridgingHeader.h添加到“Objective-C Bridging Header”.
在您的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 }
Swift 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)") } }
登录时,系统会要求用户对您的应用程序进行身份验证:
如果用户允许,将调用成功块,您可以获取有关经过身份验证的用户的信息.如果登录失败或用户不允许访问,则将调用失败块,您可以提醒用户发生的问题.
要获取有关我们通过身份验证的用户的信息,请在用户的配置文件上调用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可以执行的更多操作.
可以在here找到示例项目(我的App ID被混淆).