测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可证 | MIT |
Released最后发布 | 2016年9月 |
SPM支持 SPM | ✗ |
由Roberto Frontado维护。
依赖库 | |
RxSwift | ~> 2.5.0 |
OAuthSwift | ~> 0.5.0 |
RxBlocking | ~> 2.5.0 |
OAuth RxSwift 扩展,用于 iOS。Android 版本位于此 仓库。
RxSocialConnect 将从多个社交网络检索授权令牌的过程简化为视图控制器(ViewController)的简洁的可观察(Observable)调用。
let facebookApi20: FacebookApi20 = // ...
RxSocialConnect.with(self, providerOAuth20: facebookApi20)
.subscribeNext { credential in self.showAlert(credential.oauth_token) }
将 RxSocialConnect-iOS 添加到您的 podfile 中
pod 'RxSocialConnect'
它还有一个与 Moya 一起工作的模块(在 endpointClosure 中配置 OAuth 标头)
pod 'RxSocialConnect/Moya'
对于使用 OAuth1 协议验证用户(例如 Twitter)的社交网络,您需要创建一个继承自 ProviderOAuth1 的对象实例,并将其传递给 RxSocialConnect。
let twitterApi = TwitterApi(
consumerKey: consumerKey,
consumerSecret: consumerSecret,
callbackUrl: callbackURL
)
RxSocialConnect.with(self, providerOAuth1: twitterApi)
.subscribeNext { credential in self.showAlert(credential.oauth_token) }
对于使用 OAuth2 协议验证用户(例如 Facebook、Google+ 或 LinkedIn)的社交网络,您需要创建一个继承自 ProviderOAuth1 的对象实例,并将其传递给 RxSocialConnect。
let facebookApi20 = FacebookApi20(
consumerKey: consumerKey,
consumerSecret: consumerSecret,
callbackUrl: callbackURL,
scope: "public_profile"
)
RxSocialConnect.with(self, providerOAuth20: facebookApi20)
.subscribeNext { credential in self.showAlert(credential.oauth_token) }
获取令牌后,RxSocialConnect 将将其保存到磁盘,以便在未来的调用中返回,而无需再次进行 OAuth 流程。此令牌仅在到期时间满足时才会从缓存中清除。
但是,如果您需要关闭特定的连接(或删除磁盘上的令牌),您可以在任何时间调用 RxSocialConnect.closeConnection(baseApiClass)
以清除缓存的令牌 -其中 baseApiClass 是 OAuth 流程中使用的提供器类。
// Facebook
RxSocialConnect.closeConnection(FacebookApi20.self)
.subscribeNext { self.showAlert("Facebook disconnected") }
// Twitter
RxSocialConnect.closeConnection(TwitterApi.self)
.subscribeNext { self.showAlert("Twitter disconnected") }
您还可以一次关闭所有连接,通过调用RxSocialConnect.closeConnections()
实现。
RxSocialConnect.closeConnections()
.subscribeNext { self.showAlert("All disconnected") }
这非常简单,您只需要调用这个方法,它就会将OAuth头部信息添加到您的端点上。
RxSocialConnect.addOAuthHeaders(/*ProviderOAuth 1 or 20 */, endpoint: endpoint)
以下是一个使用FacebookApi20提供者的示例
// MARK: - Endpoint Closure
let endpointClosure = { (target: Target) -> Endpoint<Target> in
let endpoint: Endpoint<Target> = Endpoint<Target>(URL: url(target), sampleResponseClosure: {.NetworkResponse(200, target.sampleData)}, method: target.method, parameters: target.parameters, parameterEncoding: target.parameterEncoding)
// Add this line to add OAuthHeaders
return RxSocialConnect.addOAuthHeaders(FacebookApi20.self, endpoint: endpoint)
}
Roberto Frontado