错误12501使用Google登录进行身份验证

Jam*_*ter 48 android google-play-services google-signin google-identity

我正在使用谷歌登录服务来验证使用我的应用程序的用户.当我刚要求电子邮件信息时,我得到了它的工作

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail().build();
Run Code Online (Sandbox Code Playgroud)

然后,我发现我还需要请求ID令牌才能使用我的后端进行身份验证,所以我做了:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(String.valueOf(R.string.server_client_id))
                    .requestEmail().build();
Run Code Online (Sandbox Code Playgroud)

问题是它不会让我在更改后登录.我每次尝试登录时都会得到的状态是Status{statusCode=unknown status code: 12501, resolution=null}.

我一直在寻找,我发现这篇文章几乎是一回事.但是,我没有回答任何人所提出的任何错误,我的开发控制台中的oAuth客户端ID用于Web应用程序: 的ClientID 并且R.string.server_client_id是图片中的第一个客户端ID.包名称当然是正确的,否则它甚至在没有令牌请求的情况下也无法工作.2人还建议应用程序需要签名才能使用,但googles文档说调试密钥也应该工作,并且让人们签署应用程序进行调试没有意义.

我一直在试图解决这个问题几个小时但没有成功.可能是什么问题呢?请随时索取我可能忘记放在这里的更多信息.

Jam*_*ter 22

嗯,这非常令人尴尬,但我想通了:

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

我发送的是资源ID而不是解除引用的字符串资源.

  • R.string.server_client_id 的值是多少?你从哪里得到它? (4认同)
  • 谢谢,我怀疑,我使用的是正确的clientId,但我仍然得到12500或12501. (3认同)
  • 我也在.json文件中找到了客户端ID。但是错误与12501相同。为什么? (2认同)

小智 10

显然首先检查你的释放sha1键是否正确.但如果它仍然不起作用并且你使用谷歌播放服务8.4.0(即编译'com.google.android.gms:播放服务:8.4.0'),可以通过修改GoogleSignInOption对象来解决问题.代替:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail()  
       .requestIdToken("YOUR_WEB_API_ID.apps.googleusercontent.com")
                    .build();
Run Code Online (Sandbox Code Playgroud)

你必须使用:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestScopes(new Scope(Scopes.PLUS_LOGIN))
                .requestScopes(new Scope(Scopes.PLUS_ME))
                .requestEmail()
                .build();
Run Code Online (Sandbox Code Playgroud)

这解决了返回statusCode = INTERNAL_ERROR或statusCode = Error 12501 OR statusCode = Error 12500的错误.然后这个gso对象可用于创建GoogleApiClient,如下所示:

 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(); 
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此处:Google登录不适用于Android的发布版本


Sim*_*amp 5

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

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

将其添加到 firebase 控制台:转到https://console.firebase.google.com,选择您的应用程序,选择设置。

在此输入图像描述