【问题标题】:Google Play Games: tokenResponse includes access token, but no idTokenGoogle Play 游戏:tokenResponse 包含访问令牌,但没有 idToken
【发布时间】:2017-05-11 18:02:17
【问题描述】:

我目前正在使用 Google 的 Games API。客户端通过用户的授权代码连同他们的 GPlay ID 一起发送。

我将其发送出去以通过 Google 验证;

var tokenResponse =
  new GoogleAuthorizationCodeTokenRequest(
    new NetHttpTransport(),
    JacksonFactory.getDefaultInstance(),
    "https://www.googleapis.com/oauth2/v4/token",
    client_id,
    client_secret,
    idTokenString,
    "")
    .execute()

其中client_id 和client_secret 是从我们的client_secret 中检索的,与从Google 检索的一样,idTokenString 是用户登录客户端提供的授权码(格式:4/xxxxx..)。

获取tokenResponse后,下面将返回访问令牌,没有问题;

var accessToken = tokenResponse.getAccessToken()

但是,从以下位置检索到的 idToken:

var idToken = tokenResponse.getIdToken()

返回空值。因此,尝试获取用户的数据以验证他们是帐户的合法所有者;

var idToken = tokenResponse.parseIdToken()

将返回一个空指针异常。

通过谷歌搜索该主题,一些用户似乎认为 parseIdToken 方法已不再使用,并且只能使用 accessToken 来检索此类信息。

但是,我发现的任何解决方案都需要使用 getIdToken,它也返回 null。

是否有人对我在这里可能做错了什么有任何想法,或者是否有另一种预期的方法可以在登录后检索用户的详细信息?

【问题讨论】:

    标签: java android google-play google-play-services google-play-games


    【解决方案1】:

    这可能是因为getIdToken() 处于测试阶段。

    如文档中所述 - Google API Client Library for Java:

    在类或方法级别标有@Beta 的功能可能会发生变化。它们可能在任何主要版本中被修改或删除。如果您的代码本身就是一个库(也就是说,如果您的代码在您无法控制的用户的 CLASSPATH 上使用),请不要使用测试版功能。

    您可能希望使用来自GoogleSignInAccount 的getIdToken 作为解决方法。

    您可以查看release notes 以获取任何更新。 希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 2013-07-17
      • 2020-09-15
      • 1970-01-01
      • 2016-07-10
      • 2019-02-19
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多