使用 Dropbox SDK 时无法调用 AppDelegate openURL( )
Unable to call AppDelegate openURL( ) while using the Dropbox SDK
我正在尝试将 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 中标记为 deprecated
。不过,它将继续按预期工作一段时间。
从 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)")
}
}
}
}
我正在尝试将 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 中标记为 deprecated
。不过,它将继续按预期工作一段时间。
从 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)")
}
}
}
}