10

現在、私はユーザーがGoogleでログインできるアプリケーションを開発中です。ログインプロセスの一環として、GoogleのACCESS TOKENとREFRESH TOKENをサーバー側に送信する必要があります。私は、次の方法でアクセストークンを取得していますAndroid:Google Sign-In APIによるリフレッシュトークンの入手方法

、私がアクセストークンをアクセスしていますが、そこから

 mAccountName = googleSignInAccount.getEmail(); 
     String scopes = "oauth2:profile email"; 
     String token = null; 
     try { 
      token = GoogleAuthUtil.getToken(activity.getApplicationContext(), mAccountName, scopes); 
     } catch (IOException e) { 
      Logger.eLog(TAG, e.getMessage()); 
     } 

GoogleAuthUtilクラスは、リフレッシュトークンの機能を持っていません。どのようにリフレッシュトークンにアクセスするのですか?前もって感謝します!

答えて

2

このコードを次のように入力してください。AsyncTask

...  
new RetrieveTokenTask().execute(mAccountName); 

チェックhere

private class RetrieveTokenTask extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 
     String accountName = params[0]; 
     String scopes = "oauth2:profile email"; 
     String token = null; 
     try { 
      token = GoogleAuthUtil.getToken(getApplicationContext(), accountName, scopes); 
     } catch (IOException e) { 
      Log.e(TAG, e.getMessage()); 
     } catch (UserRecoverableAuthException e) { 
      startActivityForResult(e.getIntent(), REQ_SIGN_IN_REQUIRED); 
    //REQ_SIGN_IN_REQUIRED = 55664; 
     } catch (GoogleAuthException e) { 
      Log.e(TAG, e.getMessage()); 
     } 
     return token; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     Log.i("AccessToken",s); 
    } 
} 

次にアクセストークンを取得するには、以下のようなAsyncTaskを呼び出します。 私はそれがあなたに役立つことを願っています。

+0

ありがとうPranay!リフレッシュトークンを探しています。私は同様の種類の実装ですでにアクセストークンを取得しています。 –

+4

[この問題](http://stackoverflow.com/questions/26969622/how-to-get-refreshtoken-when-using-googleauthutil)をご覧ください。 'GoogleAuthUtil.getToken()'を使ってリフレッシュトークンを取得できないことを示しますが、トークン自体が無効になったら、新しいトークン(リフレッシュトークン)を返します – adjuremods

8

server auth code flow via Auth.GOOGLE_SIGN_IN_APIを使用する必要があります。Androidクライアントでサーバー認証コードを取得し、サーバーに送信します。サーバーは、リフレッシュとアクセストークンのコードを秘密で交換します。このblog postにも詳細があります。あなたは今、アクセストークンのためGoogleAuthUtil.getTokenを使用している場合

また、あなたは、セキュリティと最高のUXを確保することをお勧めフローに移行する方法を確認するには、このGoogle Sign-In best practice blog postをチェックアウトしたいです。

+0

このメソッドを使用すると、私はユーザーのポップアップにaccauntを選択することはできません...ユーザーがクリックしてログインすると、現在のデバイスが認識された状態でlogInが発生します...ユーザーは思考を変更できません...どうすればユーザーのポップアップを提供できますか?アカウントで –

+0

@AlekseyTimoshchenkoあなたは:a)一度このデバイスのアカウントにサインインすると、サインインライブラリはあなたのアカウントを記憶し、将来のサインインでそのアカウントを自動的に使用します。b)デバイスに複数のアカウントを持ち、それらはすべてのスコープに許可されていますが、クロスデバイスのシングルサインオンが有効になり、そのアカウントの自動サインインが行われます。現在その状態になっている場合は、[設定]> [接続されたアプリケーション]アカウントの選択をもう一度見ることができます。 –

+0

こんにちは@IsabellaChen、[GoogleAuthUtil.getToken]を[この質問]に使用できると思いますか(http://stackoverflow.com/questions/40838154/retrieve-google-access-token-after-authenticated-using-firebase - 認証)? – BNK

関連する問題