GPhotos
我想以 Swift 消费 Google Photos API,但撰写本文时,没有任何框架可以以简单的方式实现这一点。
那为什么不分享我的理解呢?
实现的方法列表
-
身份验证
- 自动刷新令牌
- 自动请求授权
-
相册
- addEnrichment - 在定义的相册中指定位置添加增强功能。
- batchAddMediaItems - 将一个或多个媒体项添加到用户 Google Photos 库中的一个相册。
- batchRemoveMediaItems - 从指定的相册中删除一个或多个媒体项。
- create - 在用户 Google Photos 库中创建一个相册。
- get - 根据指定的 albumId 返回相册。
- list - 列出在 Google Photos 应用程序的“相册”标签中显示给用户的相册。
- share - 标记相册为共享并可由其他用户访问。
- unshare - 将先前共享的相册标记为私有。
-
共享相册
- get - 根据指定的 shareToken 返回相册。
- join - 代表 Google Photos 用户加入共享相册。
- leave - 代表 Google Photos 用户离开先前加入的共享相册。
- list - 列出在用户 Google Photos 应用的“共享”选项卡中可用的所有共享相册。
-
媒体项
- batchCreate - 在用户 Google Photos 库中创建一个或多个媒体项。
- batchGet - 返回指定媒体项标识符的媒体项列表。
- get - 返回指定媒体项标识符的媒体项。
- list - 列出用户 Google Photos 库中的所有媒体项。
- search - 在用户 Google Photos 库中搜索媒体项。
示例
要运行示例项目,首先克隆仓库,然后从 Example 目录运行 pod install
安装
通过 CocoaPods 安装,请在 Podfile 中添加 pod 'GPhotos'
并运行 pod install
。
设置
-
根据以下说明设置 OAuth 2.0 客户端 ID此处,下载
.plist
文件并将其添加到项目中。 -
在
AppDelegate.swift
中,当应用程序启动完成后配置 GPhotos。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
var config = Config()
config.printLogs = false
GPhotos.initialize(with: config)
// Other configs
}
- 为了处理在授权过程中的重定向,增加或编辑以下方法。
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
let gphotosHandled = GPhotos.continueAuthorizationFlow(with: url)
// other app links
return gphotosHandled
}
使用
认证
-
GPhotos.isAuthorized
如果用户已经授权将返回 true。 -
GPhotos.logout()
清除会话信息并使任何保存的令牌无效。 -
GPhotos.authorize(with scopes:)
默认情况下,使用openid
范围启动认证过程。只有在有新范围时才会执行。根据 Google 的建议,在第一次运行时,应该逐渐添加范围,而非需要在使用它们时才添加。此方法将返回一个布尔值,指示成功状态,并在出错时返回一个错误。 -
GPhotos.switchAccount(with scopes:)
默认情况下,使用openid
范围启动认证过程。将忽略当前的认证范围。此方法将返回一个布尔值,指示成功状态,并在出错时返回一个错误。
照片 API
将 GPhotosApi
的实例保存下来,以便可以在不同的功能之间使用分页。
相册
创建
create(album:)
返回新生成的相册对象
列表
list()
每次调用时都加载连续的物品页面。reloadList()
总是加载第一页。
获取
get(id:)
返回指定id的Album
。
分享
share(id:options:)
将与提供id的相册共享,并返回相册的ShareInfo
。unshare(id:)
返回一个布尔值,表示操作成功状态。
增强
addEnrichment(id:enrichment:position)
媒体项
向相册添加或删除项目只需媒体项目ID集合。
addMediaItems(id:mediaIds:)
removeMediaItems(id:mediaIds:)
媒体项目
列表
list()
和reloadList()
与在相册中的用法相同
获取
get(id:)
返回ID提供的MediaItem
。getBatch(ids:)
返回ID数组提供的MediaItems
。
搜索
search(with request:)
在每次调用时都会加载项目顺序页面。结果基于请求中的筛选条件。如果没有应用筛选条件,它将返回与list()
相同的结果reloadSearch(with request:)
总是加载第一页。
批量创建
upload(images:)
接受一个UIImage
数组,并将它们逐个上传到用户的库中。这些上传将计入用户Google帐户中的存储量。
共享相册
获取
get(token:)
返回共享相册的详细信息。
加入
join(token:)
和leave(token:)
以共享令牌作为参数,如果令牌正确,则加入或离开共享相册。
列表
list()
和reloadList()
与在相册中的用法相同
许可
GPhotos 根据 MIT 许可证提供。有关更多信息,请参阅 LICENSE 文件。