ConcurAPI 0.0.5

ConcurAPI 0.0.5

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2016年2月

Richard Puckett维护。



 
依赖
AFNetworking>= 0
JSONModel>= 0
 

ConcurAPI 0.0.5

  • Richard Puckett和Lance Hughes

Objective-C版本的Concur API

概述

要开始OAuth流程,请使用beginConcurAuthentication方法。提供您的客户端ID、作用域值数组和显示的视图控制器,以及回调处理程序。

此方法将向用户展示一个单次使用的viewcontroller,其中包含一个UIWebView。WebView将包含由Concur托管的登录页面,用户可以直接使用该页面将自己的用户名和密码提供给Concur进行认证。

如果登录不成功,则将返回错误;否则,将向处理程序提供短期代码(nonce),处理程序必须将其交换为令牌。没有通用的完成此步骤的方法,因此将其留给客户端代码在自己的环境中实现。通常是通过将nonce发送到客户端拥有的web服务来完成,web服务会负责将nonce(以及客户端的私钥)发送到Concur的代码交换web服务。这在演示应用程序中有一个示例。

一旦成功交换nonce,客户端应该从交换响应中创建AccessToken对象的实例,并将其传递给ConcurClient。

以下过程是完整的演示,可在演示应用程序https://github.com/concurlabs/concur-api-objc-demo中找到。

设置

在AppDelegate的application:didFinishLaunchingWithOptions方法中,使用您的客户端ID和包含您请求访问的权限的作用域数组的CXConcurClient进行配置。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    [CXConcurClient.sharedInstance setupWithClientId:@"0123456789ABCDEF0123" scope:@[@"EXPRPT"]];
}

如果AppDelegate中尚未添加application:openURL:options,请将其添加,并允许CXConcurClient尝试处理传递到您的应用程序的URL。如果该URL与Concur OAuth登录过程相关,则此方法将返回true,否则将返回NO。

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
    BOOL handled = false;

    handled = [CXConcurClient.sharedInstance handleOpenUrl:url];

    return handled;
}

登录

CXConcurClient和客户端代码之间的通信通过代理进行。一旦您将调用代码设置为代理,您将收到通知,了解您执行认证过程(如登录和注销)时的重要事件。请考虑您将想要从UIViewController开始OAuth认证。

- (void)viewDidLoad {
    [super viewDidLoad];

    CXConcurClient.sharedInstance.client = [CXConcurClient sharedInstance];

    ...
}

然后,比如说响应登录按钮被按下的事件时,你会启动OAuth过程。

- (IBAction)didTapSignIn:(id)sender {
    [CXConcurClient.sharedinstance login];
}

这将在用户的屏幕上显示Concur OAuth身份验证页面,提示输入用户名和密码,然后请求代表你的应用程序访问资源的权限,具体取决于你指定的范围。完成这一步骤后,CXConcurClient将调用适当的委托方法,这些方法将如下之一

#pragma mark - ConcurClient Delegate Methods

- (void)onLoginSuccess {
}

- (void)onLoginFailure:(NSError*)error {
}

- (void)onLogoutSuccess {
}

- (void)onLogoutFailure:(NSError*)error {
}