Swift Alamofire 从刷新令牌请求错误中获取令牌

Mat*_*ker 3 youtube-api ios oauth-2.0 swift alamofire

我对使用 Alamofire 还很陌生,这个请求让我很头疼。我正在使用 GIDSignIn,并成功为用户获取令牌和刷新令牌,范围为 [" https://www.googleapis.com/auth/youtube.readonly "]。

我正在尝试完成此请求,如网站上的示例所示。该网站说忽略client_secretiOS 的使用,我照做了。

POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=<your_client_id>&
client_secret=<your_client_secret>&
refresh_token=<refresh_token>&
grant_type=refresh_token
Run Code Online (Sandbox Code Playgroud)

下面是我如何使用 Alamofire 实现它。Myclient_id是 GoogleService-Info.Plist 中 CLIENT_ID 键的值,是一个以 .apps.googleusercontent.com 结尾的字符串。从我在网上看到的其他示例来看,它refresh_token似乎也具有正确的格式。

let endpoint = "https://www.googleapis.com/oauth2/v4/token"
let parameters = [
    "client_id" : client_id, 
    "refresh_token" : refresh_token, 
    "grant_type" : "refresh_token"
]

Alamofire.request(endpoint, method: .post, 
                  parameters: parameters, 
                  encoding: JSONEncoding.default)

        .responseJSON { (data) in
            print("data: \(data)")
            let json = JSON(data.result)
        }
Run Code Online (Sandbox Code Playgroud)

数据响应为

data: SUCCESS: {
    error = "unsupported_grant_type";
    "error_description" = "Invalid grant_type: ";
}
Run Code Online (Sandbox Code Playgroud)

不是很成功。我是否需要以不同的方式配置我的请求,或者获得适当的访问/许可才能获取令牌?太感谢了!

Mat*_*ker 5

@BikeshThakur 帮我弄清楚了!URLEncoding.httpBody 成功了!我也不需要任何标题。

Alamofire.request(endpoint, method: .post, 
                  parameters: parameters, 
                  encoding: URLEncoding.httpBody)
Run Code Online (Sandbox Code Playgroud)