Android:如何通过Google Sign-In API获取刷新令牌?

目前,我正在处理用户可以使用Googlelogin的应用程序。 作为login过程的一部分,我们需要将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类没有刷新令牌的function。 那么如何访问刷新令牌? 提前致谢!

Solutions Collecting From Web of "Android:如何通过Google Sign-In API获取刷新令牌?"

您应该通过Auth.GOOGLE_SIGN_IN_API使用服务器authentication码stream程 :在Android客户端上获取服务器authentication码,发送到您的服务器,服务器交换刷新和访问令牌(带有密码)的代码。 这篇博文中还有更多的细节。

此外,如果您现在正在使用GoogleAuthUtil.getToken获取访问令牌,则您希望查看此Google Sign-In最佳实践博客post ,了解如何迁移到build议的stream程以确保安全性和最佳用户体验。

我认为你需要在下面的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); 

在这里检查。 我希望这对你有所帮助。