1

我已经实现了从SharedPreferences中保存的令牌中检索凭据的功能。

mCredential = new GoogleCredential.Builder()
                   .setClientSecrets(CLIENT_ID, CLIENT_SECRET)
                   .setJsonFactory(mJsonFactory)
                   .setTransport(mHttpTransport).build();

mCredential.setRefreshToken(accessRefreshTokenSave);
mCredential.setAccessToken(accessTokenSave);

Long expires = mCredential.getExpiresInSeconds();
boolean result = mCredential.refreshToken();

令牌过期时。我们应该调用mCredential.refreshToken()来刷新令牌,对吗?

当我调用 refreshToken 时出现异常。

com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
  "error" : "invalid_grant"
}

我应该怎么做才能刷新令牌?我在Using OAuth 2.0中找到了一些关于刷新令牌的文档。但我不知道如何在 Android 代码中实现它?是否有任何示例代码可以做到这一点?

4

2 回答 2

1

通常(根据我的经验,因为我没有找到任何文档)“无效授权”意味着您存储的刷新令牌存在问题。这包括(我认为):-

  1. 用户已撤销
  2. 您的测试导致生成多个刷新令牌。只有25个可能存在
  3. 与存储的令牌关联的范围已更改

要恢复这种情况,请删除存储的刷新令牌并重新开始该过程。好消息是,除了用户撤销场景 (1) 之外,这是一个测试环境问题,并不一定意味着您有错误。

于 2012-09-27T05:57:01.463 回答
0

看看https://developers.google.com/+/mobile/android/sign-in这是 Android 的 OAUTH,您可以检查问题出在哪里,或者使用项目中的示例代码。为了给您更多详细信息,您必须发布整个项目(例如将其链接到 GitHub)或发布感兴趣的类 ;-)

于 2014-05-16T20:25:32.060 回答