Android 使用GoogleAuthUtil时如何获取refreshToken

Android 使用GoogleAuthUtil时如何获取refreshToken,android,oauth,google-play-services,youtube-data-api,Android,Oauth,Google Play Services,Youtube Data Api,我正在Android上的googleplay服务中使用GoogleAuthUtil。调用GoogleAuthUtil.getToken(上下文、用户名、范围)后,我得到了如下令牌: ya29.wQBWztab5kcgMLcMbAI0LwFzHC_DPrxauSWbX4P6KOnBEOgjcm9V7OI9AFr6JGxDY54gP00RemzzgML56_gWRHn8Q5jK16BLY-0y83Gc5vfe3xN-QpyM4d7z 这是一个访问令牌,可用于调用Google API。那么,我如何获

我正在Android上的
googleplay服务中使用
GoogleAuthUtil
。调用
GoogleAuthUtil.getToken(上下文、用户名、范围)
后,我得到了如下令牌:

ya29.wQBWztab5kcgMLcMbAI0LwFzHC_DPrxauSWbX4P6KOnBEOgjcm9V7OI9AFr6JGxDY54gP00RemzzgML56_gWRHn8Q5jK16BLY-0y83Gc5vfe3xN-QpyM4d7z
这是一个访问令牌,可用于调用Google API。那么,我如何获得刷新令牌来刷新这个访问令牌,因为我也使用了,在我的Android项目中,我想使用这两个库来维护/管理
访问令牌
刷新令牌
过期
值。(当使用Google oauth java库时,它返回的
TokenResponse
包含
access\u token
refresh token
expires\u in


提前感谢。

您无法使用
GoogleAuthUtil.getToken()
直接获取refreshToken,但是如果每次收到401错误时调用
getToken()
,如果需要,GoogleAuthUtil将返回一个新的有效令牌。

为了获取刷新令牌,请确保您的作用域采用以下格式:

Account account = new Account(mEmail, GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);
mScope="oauth2:server:client_id:"+ OAUTH_WEBCOMPONENT_ID+":api_scope:"+"https://www.googleapis.com/auth/userinfo.email";
return GoogleAuthUtil.getToken(mActivity, account, mScope);
这将为您提供一个授权代码,可以将其发送到您的web组件

您的webcomponent只能使用此授权代码一次,以获取访问令牌并使用此代码刷新令牌。您必须将刷新令牌保存在数据库中,以便在访问代码不再有效时,您可以在需要时获得新的访问令牌

POST /oauth2/v3/token HTTP/1.1
Host: www.googleapis.com
Content-length: 233
content-type: application/x-www-form-urlencoded
user-agent: google-oauth-playground

code=4%2FVL2YMuPMheOP2-0vyKBSfGd-4er5GsMY17Ecp8ITK4U&redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&client_id=407408718192.apps.googleusercontent.com&client_secret=************&scope=&grant_type=authorization_code
您可以在此处模拟其工作方式:


调用
requestServerAuthCode(String,true)
而不是
requestServerAuthCode(String)
,当请求成功时,它强制请求包含刷新令牌

,布尔值)


你能详细说明一下吗?可能是关于如何处理此问题的有用链接?抱歉,我记不起有关此问题的详细信息:-/。我记得我在寻找获取刷新令牌的方法,但没有找到,因此我只调用了
getToken
,如下所述:
val task = GoogleSignIn.getSignedInAccountFromIntent(data);
task.addOnSuccessListener {

val account = task.getResult(ApiException::class.java)
val authCode = account!!.serverAuthCode

// Send authcode to server to exchange access and refresh tokens.
exchangeAuthCodeForAccessToken(authCode)

}