如何使用我们应用程序的 client_secret 调用 /oauth2/token 端点以交换代码以获取 Swift 中 DropBox 的访问令牌?

How to Call the /oauth2/token endpoint with our app’s client_secret to exchange the code for an access token for DropBox in Swift?

我正在使用 SwiftyDropbox 将 Dropbox 与我的 iOS 应用程序集成。我已经完成了所有配置并实现了文档中的代码。用户需要通过我的应用程序访问其保管箱帐户中的文件。当我尝试使用 'generated access token'(从保管箱控制台获取)时,我只能访问我自己帐户中的文件。我知道我们需要使用标准的 OAuth 流程来为其他用户获取访问令牌。

已按照 https://developers.dropbox.com/oauth-guide

中说明的步骤进行操作
  1. 使用我的应用程序的 client_id 和 redirect_uri.

    构建了一个 Dropbox 授权 URL
  2. 下一步是使用我的应用程序的 client_secret 调用 /oauth2/token 端点以交换访问令牌的代码。我不确定如何实施。如果您之前解决过这个问题,请提供建议。下面给出了我的部分代码。

    覆盖 func viewDidLoad() { super.viewDidLoad()

         self.actionDropboxLogin()
     }
    
     func actionDropboxLogin() {
         if (DropboxClientsManager.authorizedClient != nil) {
    
             //User is already authorized
             //Fetch images from user's DropBox folder
             self.getImageFromDropbox(path: "", isBack: false)
         } else {
    
             //User not authorized
             //So we go for authorizing user first.
    
             guard let rwURL = URL(string: "https://www.dropbox.com/oauth2/authorize?client_id=myclientid&redirect_uri=https://myapp/callback&response_type=code") else { return }
    
    
             let scopeRequest = ScopeRequest(scopeType: .user, scopes: ["account_info.read files.content.read files.content.write files.metadata.read file_requests.read"], includeGrantedScopes: false)
               DropboxClientsManager.authorizeFromControllerV2(
                   UIApplication.shared,
                   controller: self,
                   loadingStatusDelegate: nil,
                   openURL: { (url: URL) -> Void in UIApplication.shared.openURL(rwURL) },
                   scopeRequest: scopeRequest
               )
             self.getImageFromDropbox(path: "", isBack: false)
    
         }
     }`
    
     func getImageFromDropbox(path:String, isBack:Bool) {
         let client = DropboxClientsManager.authorizedClient
         if client != nil {
        //code for getting list of folder, images or videos here.
    

    } self.tableView.reloadData() }

当我在控制台中打印 client 的值时,它是 nil。所以条件 'if client != nil' 为假,我无法获取文件。这意味着我没有获得访问令牌。

使用 SwiftyDropbox SDK 时,您无需直接处理任何 /oauth2/authorize 或 /oauth2/token 细节。 SDK 为您实现应用程序授权流程。您应该只执行此处记录的流程:

https://github.com/dropbox/SwiftyDropbox#configure-your-project