StravaSwift 1.0.0

StravaSwift 1.0.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2019年10月
SPM支持 SPM

Matthew ClarksonMatthew ClarksonLudovic Landry 维护。



 
依赖
Alamofire~> 4
SwiftyJSON~> 5
 

StravaSwift

CI Status codebeat badge Version License Platform

这是对 Strava v3 API 的 Swift 包装。

因为这是一个充满热情的项目,所以只有在我有时间的时候我才工作。所以,如果您有兴趣贡献,请随时提交 PR。

示例

要运行示例项目,请克隆存储库,然后首先从 Example 目录中运行 pod install

安装

StravaSwift 通过 Swift 包管理器CocoaPods 提供。

Swift 包管理器

dependencies: [
    .package(url: "https://github.com/mpclarkson/StravaSwift.git", from: "1.0.0")
]

Cocoapods

要安装它,只需将以下行添加到您的Podfile中

pod "StravaSwift", '~> 1.0.0'

快速开始

完整的库文档可在此处找到。

  • 首先,您必须在Strava注册您的应用并获得OAuth client idclient secret

  • 以下是如何初始化Strava客户端,建议在您的 AppDelegate.swift 中执行,以确保在调用之前已进行配置

let config = StravaConfig(
    clientId: YourStravaClientId,
    clientSecret: YourStravaClientSecret,
    redirectUri: YourRedirectUrl
)

StravaClient.sharedInstance.initWithConfig(config)
  • 请注意,默认情况下OAuth令牌仅在应用运行期间可用,这意味着您需要请求新的令牌。您可以通过在《StravaConfig》初始化器中重写默认的令牌 delegate 来实现自定义令牌存储和检索行为,该初始化器必须实现《TokenDelegate》协议。

  • 在您的《info.plist》文件中注册您的重定向URL方案。

  • 默认情况下,认证将使用已安装在设备上的Strava应用。如果用户没有安装Strava,它将回退到iOS版本的《SFAuthenticationSession》或《ASWebAuthenticationSession》。如果您的应用链接在iOS 9.0或更高版本上,您必须将《strava》添加到您的应用的《info.plist》文件中。它应该是《LSApplicationQueriesSchemes》键下的数组条目。如果未执行此操作,则调用《canOpenUrl:》时会导致崩溃。

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>strava</string>
</array>
  • 在您的《AppDelegate.swift》中实现以下方法以处理来自Strava的OAuth重定向
let strava = StravaClient.sharedInstance

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    return strava.handleAuthorizationRedirect(url)
}
  • 在授权后,您可以开始请求资源
strava.authorize() { result in
    switch result {
        case .success(let token):
            //do something for success
        case .failure(let error):
            //do something for error
    }
}
  • 请求资源

《Router》的实现基于这个Alamofire 示例

strava.request(Router.athletes(id: 9999999999)) { (athlete: Athlete?) in
    //do something with the athlete
}

let params = [
    'page' = 2,
    'per_page' = 25
]

strava.request(Router.athleteActivities(params: params) { (activities: [Activity]?) in
   //do something with the activities
}

待办事项

  • 100% API 覆盖率(目前约90%)
  • 文档
  • 测试
  • 更好的示例应用

作者

Matthew Clarkson,[email protected]

许可

StravaSwift根据MIT许可发布。查看LICENSE文件以获得更多信息。