菜鸟教程小白 发表于 2022-12-11 18:18:48

ios - Spotify API 授权错误 (Swift)


                                            <p><p>我用 Swift 制作了一个小应用程序,用户可以在其中搜索 Spotify 数据库中的歌曲。我正在使用 Web API 控制台 > 搜索项目。我的问题是新的 OAuth 系统,您必须在其中登录和所有这些东西。我的授权没问题,但是当我尝试使用以下代码获取访问 token 时,它返回以下错误:{"error":"server_error","error_description":"Unexpected status: 400"}。我的代码是:</p>

<pre><code>    let keys = &#34;&lt;MY_APPLICATION_KEYS&gt;&#34;

    let url = NSURL(string: &#34;https://accounts.spotify.com/api/token&#34;)

    let session = URLSession.shared

    let request = NSMutableURLRequest(url: url! as URL)

    request.httpMethod = &#34;POST&#34;

    request.setValue(&#34;Basic \(keys)&#34;, forHTTPHeaderField: &#34;Authorization&#34;)

    request.setValue(&#34;client_credentials&#34;, forHTTPHeaderField: &#34;grant_type&#34;)

    let task = session.dataTask(with: request as URLRequest) { (data, response, error) in

      guard let _: Data = data, let _: URLResponse = response, error == nil else {

            print(error!)
            return

      }

      let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
      print(&#34;Data: \(dataString!)&#34;)

      self.parseData(JSONData: data!)

    }

    task.resume()

}

var accessToken = &#34;&#34;

func parseData(JSONData : Data) {

    do {
      var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONStandard

      if let token = readableJSON[&#34;access_token&#34;] as? String {

            accessToken = token

      }

      print(&#34;Access Token: \(accessToken)&#34;)

      updateTokenInFirebase()

    }
    catch{
      print(error)
    }
</code></pre>

<p>任何帮助将不胜感激,非常感谢您!</p>

<p>Web API 文档:<a href="https://developer.spotify.com/web-api/authorization-guide/" rel="noreferrer noopener nofollow">Web API Link</a> </p>

<p>我在客户端凭据流上使用第一种方法。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我知道您发布此内容已经有大约 1 年的时间了,但我遇到了同样的问题,经过几次尝试后终于解决了。您可以在 Playground 中进行测试。 </p>

<pre><code>import Foundation
import PlaygroundSupport

PlaygroundPage.current.needsIndefiniteExecution = true

if let url = URL(string: &#34;https://accounts.spotify.com/api/token&#34;) {
    var postRequest = URLRequest(url: url)
    postRequest.httpMethod = &#34;POST&#34;
    let bodyParams = &#34;grant_type=client_credentials&#34;
    postRequest.httpBody = bodyParams.data(using: String.Encoding.ascii, allowLossyConversion: true)

    let id = &#34;your client id&#34;
    let secret = &#34;your secret&#34;
    let combined = &#34;\(id):\(secret)&#34;
    let combo = &#34;\(id):\(secret)&#34;.toBase64()
    postRequest.addValue(&#34;Basic \(combo)&#34;, forHTTPHeaderField: &#34;Authorization&#34;)

    let task = URLSession.shared.dataTask(with: postRequest) { (data, response, error) in
      guard let data = data else {
            return
      }
      print(String(data: data, encoding: String.Encoding.utf8)!)
    }
    task.resume()
}


extension String {

    func fromBase64() -&gt; String? {
      guard let data = Data(base64Encoded: self) else {
            return nil
      }

      return String(data: data, encoding: .utf8)
    }

    func toBase64() -&gt; String {
      return Data(self.utf8).base64EncodedString()
    }
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Spotify API 授权错误 (Swift),我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/45167554/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/45167554/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Spotify API 授权错误 (Swift)