web-dev-qa-db-ja.com

Android:GoogleログインAPIで更新トークンを取得するにはどうすればよいですか?

現在、ユーザーがGoogleでログインできるアプリケーションに取り組んでいます。ログインプロセスの一環として、Google ACCESS TOKENおよびREFRESH TOKENをサーバーエンドに送信する必要があります。

以下の方法でアクセストークンを取得していますが、

        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クラスに、更新トークンの機能がありません。では、更新トークンにアクセスするにはどうすればよいですか?前もって感謝します!

14
Swapnil Sonar

Auth.GOOGLE_SIGN_IN_API経由のサーバー認証コードフロー を使用する必要がありますAndroidクライアントでサーバー認証コードを取得し、サーバーに送信します。サーバーは更新のためにコードを交換し、アクセストークン(シークレット付き) ブログ投稿 にも詳細があります。

また、アクセストークンにGoogleAuthUtil.getTokenを使用している場合は、これをチェックして、セキュリティと最善のセキュリティを確保するために推奨フローに移行する方法を確認してください Googleサインインのベストプラクティスブログの投稿 。 UX。

9
Isabella Chen

以下のようにAsyncTaskでこのコードを試す必要があると思います。

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を呼び出してアクセストークンを取得します。

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

チェック ここ 。お役に立てば幸いです。

2
pRaNaY