Dropbox 打开网址无法正常工作 iOS



几个小时以来我一直在解决这个问题,我正在将我的应用程序与 Dropbox 链接。我已经创建了演示应用程序,那里一切正常,但是当我合并到我的应用程序中时,openurl 委托返回 false,我在 dropbox 中创建了一个新应用程序,但仍然存在相同的问题。

错误日志是:

-canOpenURL: failed for URL: "dbapi-2://1/connect" - error: "This app is not allowed to query for scheme dbapi-2"
-canOpenURL: failed for URL: "dbapi-8-emm://1/connect" - error: "This app is not allowed to query for scheme dbapi-8-emm"
-canOpenURL: failed for URL: "dbapi-2://1/connect" - error: "This app is not allowed to query for scheme dbapi-2"
-canOpenURL: failed for URL: "dbapi-8-emm://1/connect" - error:"This app is not allowed to query for scheme dbapi-8-emm"
[ERROR] unable to verify link request
[ERROR] DropboxSDK: credentials not saved. Make sure you call -[DBSession handleOpenUrl:] in your app delegate's application:openURL:sourceApplication:annotation: method

应用委托中的代码:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    if DBSession.shared().handleOpen(url as URL!) {
        if DBSession.shared().isLinked() {
            NotificationCenter.default.post(name: NSNotification.Name(rawValue: "didLinkToDropboxAccountNotification"), object: nil)
            return true
        }
    }
    return false
}

有关完整教程,请参阅此处

确保在 .plist 中添加LSApplicationQueriesSchemes

<key>LSApplicationQueriesSchemes</key>
  <array>
    <string>dbapi-2</string>
    <string>dbapi-8-emm</string>
  </array>
<key>CFBundleURLTypes</key>
  <array>
    <dict>
      <key>CFBundleURLSchemes</key>
      <array>
        <string>db-APP_KEY</string>
      </array>
    </dict>
  </array>

对于您的第二个错误:无法验证链接请求

func handleOpen(_ url: URL) -> Bool {
var expected: String = "(self.appScheme())://(kDBDropboxAPIVersion)/"
if !url.absoluteString.hasPrefix(expected) {
    return false
}
var components: [Any] = url.path.pathComponents()
var methodName: String = components.count > 1 ? components[1] : nil
if methodName.isEqual("connect") {
    var params: [AnyHashable: Any] = DBSession.parseURLParams(url.query)
    var token: String? = (params["oauth_token"] as? String)
    var secret: String? = (params["oauth_token_secret"] as? String)
    var userId: String? = (params["uid"] as? String)
    var state: String? = (params["state"] as? String)
    var nonce: String? = UserDefaults.standard.object(forKey: kDBLinkNonce)
    UserDefaults.standard.removeObject(forKey: kDBLinkNonce)
    UserDefaults.standard.synchronize()
    if !nonce.isEqual(state) {
DBLogError("unable to verify link request")
return false
 }
self.updateAccessToken(token, accessTokenSecret: secret, for: userId)
}
if methodName.isEqual("cancel") {
DBLogInfo("DropboxSDK: user cancelled Dropbox link")
}
return true
}

不幸的是,其他答案都不起作用,我在 Dropbox 上删除了我的应用程序并创建了一个新应用程序,然后再次进行了所有处理瞧,一切正常。