在 Swift 中增加对 Dropbox 访问的支持
05 April 2018
最近想开发一款支持 Dropbox 文件同步的基于 orgmode 的任务管理 App,但是 iOS 程序开发基础基本为零。所以一切都是全新的。
1 第一步
先试着使用 Dropbox API。首先你得注册一个 Dropbox 开发者账户, 然后注册你的 App,在此链接中填写相关信息:https://www.dropbox.com/developers/apps,需要注意的是,在第二个选项“Choose the type of access you need”中,如果选 App folder 的话,就只能访问与你的 App 同名的文件夹,为了灵活,最好还是选择 Full dropbox,全盘访问。注册好之后,可以得到一个 App key。
2 安装 SDK
访问 SwiftyDropbox,一步一步照着做就好了。用 CocoaPods 比较方便,全部自动完成了: https://github.com/dropbox/SwiftyDropbox#cocoapods
3 配置项目的 .plist 文件
https://github.com/dropbox/SwiftyDropbox#configure-your-project
添加两个 Key:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>dbapi-8-emm</string>
<string>dbapi-2</string>
</array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>db-<APP_KEY></string>
</array>
<key>CFBundleURLName</key>
<string></string>
</dict>
</array>
其中 APP KEY 就是在 Dropbox 注册的那一串字符。
4 增加代码支持
4.1 创建 Dropbox 客户端
import SwiftyDropbox
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
DropboxClientsManager.setupWithAppKey("<APP_KEY>")
return true
}
4.2 添加访问事件
import SwiftyDropbox
func myButtonInControllerPressed() {
DropboxClientsManager.authorizeFromController(UIApplication.shared,
controller: self,
openURL: { (url: URL) -> Void in
UIApplication.shared.openURL(url)
})
}
4.3 返回 App
import SwiftyDropbox
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if let authResult = DropboxClientsManager.handleRedirectURL(url) {
switch authResult {
case .success:
print("Success! User is logged into Dropbox.")
case .cancel:
print("Authorization flow was manually canceled by user!")
case .error(_, let description):
print("Error: \(description)")
}
}
return true
}