状态码 12501 使用 google 登录进行身份验证

Posted

技术标签:

【中文标题】状态码 12501 使用 google 登录进行身份验证【英文标题】:Status code 12501 authenticating with google sign-in 【发布时间】:2016-04-08 14:30:26 【问题描述】:

我正在使用以下这些代码行进行 G+ 登录 android 集成。

在应用程序 build.gradle 中:

compile 'com.google.android.gms:play-services-auth:8.4.0' compile 'com.google.android.gms:play-services-plus:8.4.0'

在 MainActivity 中:

 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail()
                    .requestIdToken("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.com")
                    .requestProfile()
                    .build();

            AppCompatActivity appCompatActivity = (AppCompatActivity) context;

            googleApiClient = new GoogleApiClient.Builder(context)
                    .enableAutoManage(appCompatActivity, this)
                    .addConnectionCallbacks(this)
                    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                    .addApi(Plus.API)
                    .build();

我还在应用级别添加了“google-services.gson”文件。 我还制作了 web-application 并将 client-id 用于 requestIdToken() 参数。

requestIdToken(webapp 的客户端 ID)。

编写此代码后,我仍然收到状态代码 = 12501 作为响应,并且 tokenId = null。

我也读过this link。但找不到任何解决方案。

【问题讨论】:

我们在this post找到了解决方案 【参考方案1】:

您需要在google-services.json 文件中添加签名和调试client_id 的凭据,如下所示:

"oauth_client": [
  
    "client_id": "<your-client-id>",
    "client_type": 1,
    "android_info": 
      "package_name": "<your-package-name>",
      "certificate_hash": "<hash>"
    
  ,
   
    "client_id": "<your-client-id-2>",
    "client_type": 1,
    "android_info": 
      "package_name": "<your-package-name-2>",
      "certificate_hash": "<hash-2>"
    
  
]

【讨论】:

您可能还需要仔细检查您使用的 clientIds 以及包名称不匹配的可能性。我不确定这个reference 是否会帮助你,但我还是会粘贴它。 这两个客户端ID是您使用调试密钥库和签名密钥库获得的。您可能希望将两者都包含在您的 google-services.json 文件中 我想知道client-id是android id还是client-id是web application id? 让我们continue this discussion in chat。 @Akashsingla19 和 gerard 谢谢,你的聊天和上面的回答让我找到了我的解决方案;但是我认为对 Web 客户端 ID 的看法有些误导。我不知道 Android Studio 如何自动生成 Web 客户端 ID,但它与我的 google 服务控制台中的调试密钥不同。 Android Studio 在 6 月份为我的调试密钥自动创建了一个条目,可能对应于我对 Android Studio 所做的升级,所以也许当你们俩都在解决这个问题时,AS 没有自动生成调试密钥......继续...【参考方案2】:

这可能是由于 Sha-1 和 Sha-256 版本和调试密钥不匹配造成的。

将所有三个(调试:Sha-1,发布:Sha-1 和 Sha-256)键添加到 firebase 控制台,然后重新下载 json 并替换。

对我来说很好用。

有时 OAuth 2.0 客户端 ID(Web 应用程序密钥)可能不匹配

【讨论】:

【参考方案3】:

确保在清单文件中包含以下内容:

<application ...>

    <meta-data
        android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />  <!-- if app is a game -->

    <meta-data android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

【讨论】:

以上是关于状态码 12501 使用 google 登录进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Google登录提示错误码12501

获取谷歌登录错误 12501

Google 登录失败(ApiException:12501)

Google 游戏登录 - 错误 12501 空响应

google登录android后报错12501

Google 登录状态代码