Swift 使用Dropbox SDK时无法调用AppDelegate openURL()

Swift 使用Dropbox SDK时无法调用AppDelegate openURL(),swift,dropbox-api,openurl,Swift,Dropbox Api,Openurl,我正在尝试将Dropbox身份验证添加到我的应用程序中,但它显示了以下错误: DropboxSDK: app delegate does not implement application:openURL:sourceApplication:annotation: 以下是我的应用程序委派中的代码: let dbSession = DBSession(appKey: dbAppKey, appSecret: dbAppSecret, root: kDBRootDropbox) DBSession

我正在尝试将Dropbox身份验证添加到我的应用程序中,但它显示了以下错误:

DropboxSDK: app delegate does not implement application:openURL:sourceApplication:annotation:
以下是我的应用程序委派中的代码:

let dbSession = DBSession(appKey: dbAppKey, appSecret: dbAppSecret, root: kDBRootDropbox)
DBSession.setSharedSession(dbSession)

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {

    if DBChooser.defaultChooser().handleOpenURL(url){
        return true
    }
    else if DBSession.sharedSession().handleOpenURL(url){

        if DBSession.sharedSession().isLinked(){
            return true
        }
    }
    return false
}
我创建了一个NSObject,用于身份验证和处理与Dropbox API相关的其他操作。下面是我的身份验证码:

if !DBSession.sharedSession().isLinked(){
    DBSession.sharedSession().linkFromController(viewController)
}
else{
    delegate.authenticationStatus!(true, error: nil)
}
我在成功登录后收到此错误。我还在plist中设置了LSApplicationQueriesSchemes,还添加了URL类型。我找不到我犯错误的地方

我还试图检查Dropbox应用程序是否存在或未使用

if UIApplication.sharedApplication().canOpenURL(NSURL(string: "dbapi-1://")!){
}
但它给了我以下的错误:

canOpenURL: failed for URL: "dbapi-1://" - error: "(null)"
canOpenURL: failed for URL: "dbapi-2://1/connect" - error: "(null)"
任何帮助都将不胜感激


提前感谢。

您的应用程序代理似乎实现了与SDK预期不同的
openURL
签名

将签名改为此:

func application(application: UIApplication, openURL url: NSURL,
    sourceApplication: String?, annotation: AnyObject) -> Bool {

请注意,此方法已在iOS 9 SDK中标记为
已弃用
。尽管如此,它仍将继续按预期工作一段时间。

从iOS 13开始或之后,将以下函数添加到SceneDelegate.swift似乎可以工作:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    if let url = URLContexts.first?.url {
        print(url)
        
        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)")
            }
        }
    }
}
func场景(scene:UIScene,openURLContexts:Set){
如果让url=URLContexts.first?.url{
打印(url)
如果让authResult=DropboxClientsManager.handleRedirectURL(url){
切换authResult{
成功案例:
打印(“成功!用户已登录Dropbox。”)
案例。取消:
打印(“用户手动取消了授权流!”)
案例错误(Ulet,描述):
打印(“错误:\(说明)”)
}
}
}
}

iOS 9要求你在应用程序的plist中添加你将在应用程序中使用的URL方案,这篇文章告诉你要添加什么:你是否在安装了dropbox应用程序的设备上运行代码?你能分享你的
应用程序:openURL的实现吗?该错误似乎表明它已丢失。@否。我的设备上未安装应用程序。请安装该应用程序,然后重试是。它正在工作。谢谢。另外,这个错误与canOpenURL:failed for URL:“dbapi-1://”-error:“(null)”canOpenURL:failed for URL:“dbapi-2://1/connect”-error:“(null)”我相信这只是当
canOpenURL
返回false时出现的日志消息(在本例中,当未安装Dropbox应用程序时)。