com.google.android.gms.auth.GoogleAuthException:getToken(未知源)exception

在我的Android应用程序中,我试图让谷歌令牌来validation我的谷歌应用程序引擎后端服务器。 但我总是得到这个例外:

com.google.android.gms.auth.GoogleAuthException: getToken(Unknown Source) exception 

我的代码:

  private Account mAccount = AccountManager.get(this).getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE)[0]; private static final String SCOPE = "audience:server:client_id:" +Constants.WED_CLIENT_ID; String token = GoogleAuthUtil.getToken(LoginActivity.this, mAccount.name, SCOPE); 

我已经尝试了在Stackoverflow中提出的每个解决scheme。

Solutions Collecting From Web of "com.google.android.gms.auth.GoogleAuthException:getToken(未知源)exception"

几个小时后,我发现在你的作用域string( "audience:server:client_id:..." )中,你必须使用web应用程序的客户端ID,而不是android。

Android应用程序的客户端ID未使用。 只有在这里才能将您的Android应用程序的包名称与您的networking应用程序链接起来。

经过2天的研究,我发现当时你注册你的Android应用程序在Google云端控制台 – >你的项目 – > API和authentication,它要求你指纹为了生成ClientID,不知何故我的指纹是错误的(我不小心增加~$之前这个cmd keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 ),并由于这是给我错误的指纹,并且是根本原因:

 com.google.android.gms.auth.GoogleAuthException: getToken(Unknown Source) exception. 

在阅读互联网上的几篇文章之后,我生成了我的密钥库的SHA1指纹值

keytool -exportcert -alias android_keystore -keystore android_keystore -list -v | openssl sha1

由于这是我得到这个错误。 如果您在Google开发人员控制台中看到凭据屏幕,则说明您需要使用

keytool -exportcert -alias android_keystore -keystore android_keystore -list -v

即不要pipe输出到openssl sha1。 不知道有什么区别,但两个命令给出不同的值。

您将得到多个指纹,如MD5,SHA1,SHA256等。使用SHA1值。