使用SwiftyDropbox上传音频至Dropbox遇授权问题求助
解决Dropbox授权问题的方案
1. App Key是否需要加"db-"前缀?
不需要。DropboxClientsManager.setupWithAppKey() 只需要填入你在Dropbox开发者控制台获取的原始App Key,不要添加"db-"前缀。"db-"是用于配置URL Scheme时的前缀,和初始化时的App Key无关。
2. Info.plist配置与授权失败问题
找不到配置项的解决办法
Xcode 14.3默认用可视化编辑器打开Info.plist,看不到LSApplicationQueriesSchemes和CFBundleURLTypes的话,右键点击Info.plist文件,选择「Open As」→「Source Code」,手动添加以下配置:
<!-- 允许跳转至Dropbox App --> <key>LSApplicationQueriesSchemes</key> <array> <string>dbapi-8-emm</string> <string>dbapi-2</string> </array> <!-- 配置回调URL Scheme,注意替换成你的App Key --> <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>db-你的AppKey</string> <!-- 这里必须加db-前缀,替换成实际的App Key --> </array> </dict> </array>
代码错误修正
你的授权回调代码有个关键错误:application(_:open:options:) 方法最后返回了false,应该返回true,告诉系统这个URL已经被处理:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { DropboxClientsManager.handleRedirectURL(url) { authResult in switch authResult { case .success: print("Dropbox authorization success") case .cancel: print("Dropbox authorization canceled") case .error(_, let description): print("Dropbox authorization error: \(description)") @unknown default: print("Unknown Dropbox authorization result") } } return true // 这里改成true }
触发授权流程
你目前的代码只做了初始化,没有触发实际的授权操作。需要在合适的地方(比如按钮点击事件)调用授权方法:
// 示例:在ViewController的按钮点击事件中添加 @IBAction func loginToDropbox(_ sender: UIButton) { guard let controller = topMostViewController() else { return } DropboxClientsManager.authorizeFromController(UIApplication.shared, controller: controller, openURL: { url in UIApplication.shared.open(url, options: [:], completionHandler: nil) }) } // 辅助方法:获取当前最上层的ViewController private func topMostViewController() -> UIViewController? { var topController = UIApplication.shared.keyWindow?.rootViewController while let presented = topController?.presentedViewController { topController = presented } return topController }
授权提示的原因
收到"Dropbox is not authorized or logged in"提示,大概率是这几个问题:
- URL Scheme配置错误(没加db-前缀或App Key填错)
- 回调方法返回false,导致授权结果无法正确传递
- 没有主动触发授权流程,用户还未完成登录授权
内容的提问来源于stack exchange,提问作者Vivi
相关产品推荐
相关产品推荐

