VimeoNetworking 4.1.0

VimeoNetworking 4.1.0

Jason HawkinsRogerio de Paula Assis 维护。



  • Gavin King, Nicole Lehrer, Mike Westendorf, Jason Hawkins, Jennifer Lim, Van Nguyen 和 Freddy Kellison-Linn

VimeoNetworking

VimeoNetworking 是 Vimeo API 的官方 Swift 网络库。完全用 Swift 设计和实现,VimeoNetworking 是类型安全的,良好的枚举化,也永远不会、永远不要强制解包。

嘿,创作者,如果您主要对上传视频到 Vimeo 有兴趣,您还应该检查一下 VimeoUpload

支持的平台

  • 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应用生成的持续令牌,您可以通过AuthenticationControlleraccessToken函数绕过代码授权授权机制。

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前缀命名:VIMUserVIMChannelVIMCategory等等。

发送请求和处理响应

发送请求后,我们将返回一个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 工作感兴趣吗?我们 正在招聘