2016-11-16 9 views
2

Google API認証にOAuthSwiftポッドを使用しています。コールバックで、更新トークンがありません。 Googleが500 Server Errorを返しているので、ユーザーが既に認証された後に新しいトークンを要求しようとすると、私はリフレッシュトークンを保存して、次回のログイン時にユーザーを認証して新しいトークンを取得します。Googleからの更新トークンを取得する方法Google Data API OAuth 2 iOS

これは私のコードです:

  let callback = "\(Bundle.main.bundleIdentifier ?? ""):/oauth2Callback" 
      _ = ytOAuth2Swift?.authorize(
       withCallbackURL: URL(string: callback)!, 
       scope: "https://www.googleapis.com/auth/youtube", state: state, 
       success: { credential, response, parameters in 

        print("YouTube Access_Token \(credential.oauthToken)") 
        print("YouTube efreshR_Token \(credential.oauthRefreshToken)") 
       }, 
       failure: { error in 
        print("ERROR: \(error.localizedDescription)") 
      } 
      ) 

これは、我々は戻って得るか応答であります!

Response Parameters

、GoogleのAPIドキュメントによると、これは来るべきで応答である:

{ 
    "access_token":"1/fFAGRNJru1FTz70BzhT3Zg", 
    "expires_in":3920, 
    "token_type":"Bearer", 
    "refresh_token":"1/xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" 
} 

私が埋め込まWebView運を使用してみました:

[mbedded WebView error messageE[2]

答えて

2

さて、Google APIのように、あなたは一度最初にトークンをリフレッシュしてくれたようですが、新しいリクエストではそれを与えません一同はいの場合、refresh_tokenは最初の承認時にのみ提供されることを知っておく必要があります。次の手順を試してください:

  • アカウントのセキュリティ設定:https://www.google.com/settings/u/1/securityにアクセスしてください。
  • 「アプリケーションとサイトの認証」の横にある編集ボタンをクリックします。
  • 次に、アプリの横にある[アクセスを取り消す]をクリックします。

それしたら次の呼び出しも、私は私のパネルで英語を使用していないので、それは少し違うかもしれませんrefresh_token

を返す必要があります。 Googleからrefresh_tokenを使用していたときに期限切れになることはなく、新しいaccess_tokensを作成するために永久に使用できます。

別の解決策

それが動作しない場合は、オフラインとしてあなたのコードのACCESS_TYPEに設定してみてください(私は最も簡単な方法は、ちょうどaccess_type=offlineとして、あなたのAPIのURLでGET用のparamを追加することだと思います)。

クエリでprompt=consentが必要な場合もあります。これは、認可するユーザーを強制し、その後

refresh_token詳しい情報は、あなたが文句を言わない、それを取り消すまで、GoogleのAPIのヒント

良いことは、refresh_tokenの有効期限が切れたことがないということですGoogle Documentation: Oauth2

で見つけることができます返す必要がありますまたは新しいものを作成します。だからあなたはそれをハードコーディングして、新しいaccess_tokenを取得するたびに使うことさえできます。

+0

こんにちは@カロール、すてきな答えをありがとう。私が開発できる唯一の方法は、アクセスを取り消し続けることです。それ以外の場合は、私に 'access_token'も与えません:D。私は 'access_type = offline'を試してみましょう。 –

+0

あなたの歓迎:) Googleのrefresh_tokenは期限切れではないので、あなたが望む数のaccess_tokensを取得するために使うことができます。 –

+0

こんにちは@Karol、取り消し後、さらには新しいGoogle Appを作成しても、APIはrefresh_tokenを除く3つのパラメータを返します。多くのありがとう –

関連する問題