RxSocialConnect 0.0.8

RxSocialConnect 0.0.8

测试已测试
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-iOS

RxSocialConnect 将从多个社交网络检索授权令牌的过程简化为视图控制器(ViewController)的简洁的可观察(Observable)调用。

let facebookApi20: FacebookApi20 = // ...

RxSocialConnect.with(self, providerOAuth20: facebookApi20)
            .subscribeNext { credential in self.showAlert(credential.oauth_token) }

功能

  • 使用 Webview 实现处理 OAuth 流程的后续步骤。
  • 本地存储令牌。
  • 自动刷新令牌,注意到期日期。
  • 支持主要社交网络;包括 Facebook、Twitter、GooglePlus、LinkedIn、Instagram 等。

设置

将 RxSocialConnect-iOS 添加到您的 podfile 中

pod 'RxSocialConnect'

它还有一个与 Moya 一起工作的模块(在 endpointClosure 中配置 OAuth 标头)

pod 'RxSocialConnect/Moya'

用法

使用 OAuth1 获取令牌

对于使用 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 获取令牌

对于使用 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") }

Moya

这非常简单,您只需要调用这个方法,它就会将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

其他作者使用的RxSwift库

  • BaseApp-iOS:用于开始每个新iOS项目的基骨架结构
  • OkDataSources:iOS TableView和CollectionView DataSources的包装器,以最简化的方式简化其API。它还具有酷炫的PagerView和SlidingTabs!
  • RxGcm-iOS:iOS Google Cloud Messaging (又名gcm)的RxSwift扩展。