2017-07-08 10 views
2

私はAlamofireを使い慣れていません。私はこの要求で壁に頭を向けています。私はGIDSignInを使用しており、スコープ["https://www.googleapis.com/auth/youtube.readonly"]を持つユーザのトークンとリフレッシュトークンを正常に取得しています。Swift Alamofireリフレッシュトークンからトークンを取得する要求のエラー

siteに例として示すように、このリクエストを完了しようとしています。サイトでは、私が行っているiOSのためにclient_secretを使用することを無視すると言います。

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 

以下は、Alamofireで実装した方法です。私のclient_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) 
     } 

データ応答はひどく成功

data: SUCCESS: { 
    error = "unsupported_grant_type"; 
    "error_description" = "Invalid grant_type: "; 
} 

されていません。リクエストを別の方法で設定する必要がありますか、トークンを取得するための適切なアクセス権が必要ですか?どうもありがとうございます!私は、あなたもURLEncoding.httpBodyいつかエンコードタイプをチェックするために、この方法のように私のコードで疲れ必要になった

+0

正直言って、私はあまりにも困惑しています。あなたのコードを見て、それは私に正しいようです。私はこれがあなたの質問に答えることはできませんが、回避策としてNodeKitを使用し、ポッドとしてインストールし、Node.JSファイルを使ってAPIコールを実装することを決定しています。私は解決策に注意を払うつもりです。私が私のことを理解したら、私もあなたにタグを付けます。 –

答えて

2

役立つことを願っています! URLEncoding.httpBodyがトリックでした!私はヘッダーも必要ありません。

Alamofire.request(endpoint, method: .post, 
        parameters: parameters, 
        encoding: URLEncoding.httpBody) 
1

はそれが@BikeshThakurは私がそれを把握する助け

let headers = [ 
     "Content-Type": "application/x-www-form-urlencoded" 
    ] 

    Alamofire.request("https://accounts.google.com/o/oauth2/revoke?token={\(token)}", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: headers).responseJSON { (response:DataResponse<Any>) in 
+0

URLEncoding.httpBodyが機能しました!ありがとうございます@Bikesh –

+0

うまくいくのを聞いて嬉しいです。 –

+0

答えが正しければ私の答えは、ウェルカムメイト –

関連する問題