VimeoNetworking 是 Vimeo API 的官方 Swift 网络库。完全用 Swift 设计和实现,VimeoNetworking 是类型安全的,良好的枚举
化,也永远不会、永远不要强制解包。
VimeoUpload。
嘿,创作者,如果您主要对上传视频到 Vimeo 有兴趣,您还应该检查一下支持的平台
- iOS (8.0+)
- tvOS (9.0+)
安装
要开始,请在您的 Podfile 中添加以下内容
use_frameworks!
target 'YourTarget' do
pod 'VimeoNetworking'
end
您可以指定一个版本号,或直接指向我们的 develop
分支。请注意,develop
分支可能会在任何时候引入破坏性更改,但这些更改都将始终低于主版本或次要版本号。
初始化
使用Vimeo API的第一步是,在Vimeo开发者网站上注册一个新的应用程序:。我的API应用。如果您还没有Vimeo账户,您需要先创建一个。
应用配置
一旦您已经设置好新的应用程序,请点击其身份验证设置,并注意“客户端标识符”和“客户端密钥”字段。接下来,确定您的应用程序需要哪些范围
权限,从以下列出的选项中选择:。支持的范围。使用此信息实例化新的AppConfiguration
值
let appConfiguration = AppConfiguration(
clientIdentifier: "Your client identifier goes here",
clientSecret: "Your client secret goes here",
scope: [.Public, .Private, .Interact] //replace with your scopes)
客户端
要与Vimeo API交互,我们使用VimeoClient
实例。客户端是VimeoNetworking的主要接口,负责执行请求、缓存存储和检索、跟踪当前认证账户以及处理全局错误条件。您可以用刚才创建的应用程序配置来实例化一个。
let vimeoClient = VimeoClient(configuration: appConfiguration)
认证
在我们实际上开始从API获取有意义的数据之前,还有最后一步:认证。AuthenticationController
负责处理和简化此过程。它使用相关VimeoClient
的配置来发出请求。在认证成功后,它将新的Vimeo账户返回给此客户端,该客户端可以以此向API端点发出请求。有两种认证方式:如下详细说明的客户端凭证授予和代码授予
客户端凭证
客户端凭证允许您查看Vimeo上公开发布的所有内容。这本质上等同于未注册账户或登录就访问Vimeo.com。这是实现最简单的身份验证方法,只需一个函数即可完成授权。
let authenticationController = AuthenticationController(client: vimeoClient)
authenticationController.clientCredentialsGrant { result in
switch result {
case .Success(let account):
print("Successfully authenticated with account: \(account)")
case .Failure(let error):
print("error authenticating: \(error)")
}
}
代码授权
如果您想作为用户登录,Vimeo API提供了一种名为代码授权的身份验证过程。这比客户端凭证授权要复杂一些,但可以让您的应用以Vimeo用户的名义发送请求,并查看他们的个人内容。
要使用代码授权进行身份验证,您的应用将启动Safari中的特定URL。用户在Vimeo.com上注册或登录,并选择要授予的权限。然后,控制权会传回您的应用,身份验证完成。
为了准备您的应用接收此重定向,转到您的应用目标的设置 > 信息 > URL类型。添加一个新的URL类型,在url scheme中输入vimeo
后跟您的客户端标识符(例如,如果您的客户端标识符为1234
,请输入vimeo1234
)。您还需要在Vimeo API网站上添加此重定向URL。在“App Callback URL”下添加vimeo{CLIENT_IDENTIFIER}://auth
(例如,vimeo1234://auth
)。
现在,在您的应用中适当的位置打开代码授权授权URL
let authenticationController = AuthenticationController(client: vimeoClient)
let URL = authenticationController.codeGrantAuthorizationURL()
UIApplication.sharedApplication.openURL(URL)
用户将被提示登录并授予应用权限。当他们接受时,您的重定向URL将被打开,这将重新打开您的应用。在您的应用代理中处理此事件。
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool
{
authenticationController.codeGrant(responseURL: url) { result in
switch result
{
case .Success(let account):
print("authenticated successfully: \(account)")
case .Failure(let error):
print("failure authenticating: \(error)")
}
}
return true
}
轻量使用
如果您想使用自己的OAuth令牌,例如为您的API应用生成的持续令牌,您可以通过AuthenticationController
的accessToken
函数绕过代码授权授权机制。
let authenticationController = AuthenticationController(client: vimeoClient)
authenticationController.accessToken("your_access_tocken") { result in
switch result
{
case .Success(let account):
print("authenticated successfully: \(account)")
case .Failure(let error):
print("failure authenticating: \(error)")
}
}
已保存的账户
AuthenticationController
将其成功验证的账户保存在密钥链中。下次您的应用启动时,您应首先尝试加载以前已验证的账户,然后再提示用户进行验证。
do
{
if let account = try authenticationController.loadSavedAccount()
{
print("account loaded successfully: \(account)"
}
else
{
print("no saved account found, authenticate...")
}
}
catch let error
{
print("error loading account: \(error)")
}
与Vimeo交互
初始化,配置,认证。现在准备好大显身手!让我们开始调用一些端点。
构建请求
我们把与Vimeo API的每次交互表示为一个Request
实例。每个实例都有自己的对HTTP方法、URL路径、参数(如果有的话)、期望的模型对象类型、缓存行为以及(如果需要的话)失败后的重试行为的知识。一开始要理解这么多内容,所以让我们退一步,看看我们可以发出最简单的请求,也就是一个视频。
let videoRequest = Request<VIMVideo>(path: "/videos/45196609")
这里有两个关键要点
<VIMVideo>
:模型对象的通用类型。如果请求成功,请求将返回此类型的数据。path: "..."
:我们想要调用的API端点,你可以在Vimeo API端点看到其他许多选项。
通过声明期望的模型对象类型,我们可以确保请求和JSON解析成功,并且我们可以在响应中精确匹配这一期望。所有潜在的Vimeo模型都在VimeoNetworking
中实现,并且在你的实现中可用。模型类都以VIM
前缀命名:VIMUser
、VIMChannel
、VIMCategory
等等。
发送请求和处理响应
发送请求后,我们将返回一个Result
枚举值。这可能是一个.Success
或.Failure
值。.Success
将包含一个响应对象,而.Failure
将包含一个NSError
。在这些情况之间切换以处理发现的情况。
vimeoClient.request(videoRequest) { result in
switch result {
case .Success(let response: Response):
let video: VIMVideo = response.model
print("retrieved video: \(video)")
case .Failure(let error: NSError):
print("error retrieving video: \(error)"
}
}
集合
一个小巧的 ProTip:您的 Request
模型类型不仅限于单个模型对象,还可以指定一个具有模型对象元素类型的数组,例如 [VIMVideo]
。当您这样做时,您的 Response
对象的 model
属性将是一个相同类型的数组。请注意,返回多个对象的 API 请求通常是分页的,有关如何请求更多页面内容的提示,请参阅 Response
类的文档。
let staffPickedVideosRequest = Request<[VIMVideo]>(path: "/channels/staffpicks/videos")
vimeoClient.request(staffPickedVideosRequest) { result in
switch result
{
case .Success(let response: Response):
let videos: [VIMVideo] = response.model
for video in videos
{
print("retrieved video: \(video)")
}
case .Failure(let error: NSError):
print("error retrieving videos: \(error)"
}
}
最后备注
总之,您现在对 VimeoNetworking 可以做什么有了相当不错的理解。总有更多东西可以探索,我们鼓励您尝试样本项目,或者直接深入代码尝试。我们的大部分类和函数都已合理地在源文件中进行了文档说明,因此任何主题的更多详细信息都可以在那里找到。如果您仍有问题或遇到困难,请自由地 提交问题。更好的是,如果您修复了一个问题或想分享改进,请发送我们 pull request。
VimeoNetworking 在 MIT 许可下提供,有关更多信息请参阅 LICENSE 文件。
感谢阅读,祝您编程愉快!
有问题吗?
在这里给我们发推文: @vimeoeng。在 Stackoverflow 上发帖,使用标签 vimeo-ios
。在这里联系 我们。对在 Vimeo 工作感兴趣吗?我们 正在招聘!