测试测试通过的 | ✗ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
发布上次发布 | 2014年12月 |
由 未声明 维护。
依赖 | |
LVTwitterOAuthClient | ~> 0.0.1 |
AFOAuth1Client | ~> 0.3.3 |
动机
我为几个iOS应用实现了Twitter SSO,这个过程相对简单,直到你需要认证用户的访问令牌或密钥。
到处看了看,找不到一个库来隐藏从Twitter获取用户信息的令人烦躁的逆认证过程,所以我就写了这个包装器,允许基于块的简单Twitter认证,支持新式原生动议认证和旧式重定向认证。
这个库基于LVTwitterOAuthClient(这个项目看起来是基于Sean Cook的TWReverseAuthExample构建的),以及AFOAuth1Client来实现OAuth 1.0重定向流程。
用法
请参阅示例项目以获取完整的实现。以下是基本步骤:
在您的Podfile中添加PFTwitterSignOn
。
添加一个自定义URL方案以处理来自Safari的回调。这将是您的包标识符。
<AFOAuth1Client/AFOAuth1Client.h>
,并添加以下方法(或将其添加到现有的方法中): - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:kAFApplicationLaunchedWithURLNotification object:nil userInfo:@{kAFApplicationLaunchOptionsURLKey: url}]];
return YES;
}
[PFTwitterSignOn setCredentialsWithConsumerKey:@"<your_consumer_key>" andSecret:@"<your_consumer_secret>"];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLoadingWithNotification:) name:PF_TWITTER_SIGN_ON_LOADING_STARTED_NOTIFICATION object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLoadingWithNotification:) name:PF_TWITTER_SIGN_ON_LOADING_ENDED_NOTIFICATION object:nil];
请求访问
PFTwitterSignOn有两种方法来请求用户的Twitter账号。第一种允许您传递一个视图,并显示一个标准操作表让用户选择账号。如果用户只有一个账号,这两种方法在用户体验上是相同的。
第一方法是:
+ (void)requestAuthenticationInView:(UIView *)view andCompletion:(twitterAuthenticationCallback)callback;
这个视图是如果用户有多个账号时您想显示操作表的视图。
另一个方法是允许您创建一个自定义选择视图,并将一个包含ACAccount
数组的数组和回调块传递进去
+ (void)requestAuthenticationWithSelectCallback:(twitterSelectAccountCallback)selectCallback andCompletion:(twitterAuthenticationCallback)callback;
twitterSelectCallback
是一个块,其定义如下:void (^twitterSelectAccountCallback)(NSArray *accounts, twitterAccountCallback callback);
。
twitterAccountCallback
也是一个块,其定义如下:void (^twitterAccountCallback)(ACAccount *account);
。
PFTwitterSignOn会自动检测用户是否已存储了Twitter账号,如果没有,它将通过浏览器使用OAuth流程,因此您始终可以 expect 能够获取用户信息。两种认证方法都会调用一个完成回调,它的定义如下:
void (^twitterAuthenticationCallback)(NSDictionary *accountInfo, NSError *error);
字典包括了从API返回的所有用户账户信息,以及2个额外的键,分别为accessToken
和tokenSecret
。这些都是你代表用户进行调用所需的凭证。