使用Googlelogin进行身份validation时出现错误12501

我正在使用谷歌login服务来authentication使用我的应用程序的用户。 当我刚刚要求电子邮件信息时,我就开始工作了

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail().build(); 

然后,我发现我也需要请求ID令牌能够与我的后端进行身份validation,所以我做了:

 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(String.valueOf(R.string.server_client_id)) .requestEmail().build(); 

问题是,它不会让我login后的变化。 我每次尝试login时都会收到的状态是Status{statusCode=unknown status code: 12501, resolution=null}

我一直在寻找,我发现这个post几乎是相同的事情。 然而,我没有犯任何人回答的错误,我的开发控制台中的oAuth客户端ID是为Web应用程序: 的ClientID R.string.server_client_id是图片中的第一个客户端ID。 包的名字当然是正确的,否则它不会在没有令牌请求的情况下工作。 2人也build议应用程序需要签署这个工作,但谷歌文档说,debugging密钥应该也工作,并没有任何意义,让人们签署的应用程序进行debugging。

我一直试图找出这个小时,但没有成功。 可能是什么问题呢? 请随时申请更多的信息,我可能忘记把这里。

那么,这是非常尴尬的,但我想通了:

 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(AuthenticatedActivity.this.getResources().getString(R.string.server_client_id)) .requestEmail().build(); 

我发送它的资源ID而不是解除引用的string资源。

显然首先检查你的释放sha1键是否正确。 但是,如果仍然不能正常工作,并且您使用的是Google Play服务8.4.0(iecompile'c​​om.google.android.gms:play-services:8.4.0'),则可以通过修改GoogleSignInOption对象来解决问题。 代替:

 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken("YOUR_WEB_API_ID.apps.googleusercontent.com") .build(); 

你必须使用:

 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestScopes(new Scope(Scopes.PLUS_LOGIN)) .requestScopes(new Scope(Scopes.PLUS_ME)) .requestEmail() .build(); 

这解决了错误返回statusCode = INTERNAL_ERROR OR statusCode =错误12501 OR statusCode =错误12500.那么这个gso对象可以用来创buildGoogleApiClient,如下所示:

  mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, this) .addApi(Auth.GOOGLE_SIGN_IN_API,gso) // .addApi(Plus.API, null) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) // .addScope(Plus.SCOPE_PLUS_LOGIN) .build(); 

看到这个细节: 谷歌login不工作在Android的发布版本

在我的项目中,我的gradle文件中有一个与manifest.xml中的packagename不同的applicationId,这是我的问题的根源。

我必须创build的android密钥需要具有applicationId fqdn而不是包名(与Google告诉你的相反),以便为我工作。

以为我会离开这里,以防止时间给别人。

当我不小心使用Android应用程序的客户端ID而不是WebApp作为requestIdToken()参数时,我遇到了这个问题。

你应该在那里使用Webapp的客户端ID。 默认情况下,它被称为Web client (auto created by Google Service)

1.在您的gradle文件中指定signingConfigs

 signingConfigs { config { keyAlias 'appalias' keyPassword 'hunter123' storePassword 'hunter123' storeFile file('path/to/keystore.jks') } } 

2.转到项目结构中的构buildtypes(在Android Studio中)并指定signingConfigs来“configuration”

现在清理你的项目并重新构build。 它应该工作。

如果上述不起作用,那么下面是你的最后一招。
尝试第一步,build立和检查。 如果它不工作,请转到下一步,然后再尝试重新构build。

  1. build立一个签名的apk(记住密码选中)。
  2. 在签署之前检查密钥库文件的文件名,以及在签署apk文件时(android工作室)给出的文件名。
  3. 在您的设备上安装已签名的apk。
  4. 等五分钟。
  5. 尝试唱歌谷歌。 如果12501还要再等5分钟。 在做这个命中gradle同步。
  6. 再试一次。 它应该工作。

编辑:谷歌已添加apk签名的控制台。 如果你已经签名你的apk,忽略它,或者如果你想使用它,要小心,因为它可以打破你当前的谷歌login设置

你已经在你的Gradle中设置了你的signingConfigsbuildTypes吗? 我已经通过在Gradle上明确指定这些东西来修复它。 请阅读http://developer.android.com/tools/publishing/app-signing.html

确保您将(发行版)签名密钥的SHA-1指纹添加到Firebase控制台

find您的SHA1密钥 : keytool -exportcert -list -v -alias <your-key-name> -keystore <path-to-production-keystore>

将其添加到Firebase控制台:转到https://console.firebase.google.com ,select您的应用,然后select设置。

在这里输入图像说明

我有同样的问题。 问题是,我不知何故select了错误的“API项目”,因此select了错误的Web客户端密钥。 很明显,在我的两个API项目中创build了两个OAuth2服务器客户端ID,而我试图让演示应用程序运行。

配置视图

我遇到了类似的问题。 在我的情况下,这是因为我使用的服务器客户端ID是来自与客户端密钥不同的项目。 事实certificate,他们需要来自同一个项目。

嗨,我已经看到上面的评论,但正如我已经做到实用,其所有沙问题,意味着如果你将注册的特定IP地址的沙,并得到google.services JSON,这将完美的,你可以使用

  gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); 

或者gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken(LoginActivity.this.getResources()。getString(R.string.server_client_id)).requestEmail()。build(); 但是如果你想创build其他机器上的其他IP地址的应用程序sha显示你12501错误状态代码,所以你需要再次生成该特定的机器sha。 谢谢