首页 文章

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

提问于
浏览
46

我正在使用google sign-in services来验证使用我的应用的用户 . 当我刚要求电子邮件信息时,我得到了它的工作

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

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

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

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

我一直在寻找,我发现this post几乎是同样的事情 . 但是,我没有做出任何回答的人所提出的错误,我的开发控制台中的oAuth客户端ID用于Web应用程序:
clientIDs
R.string.server_client_id 是图片中的第一个客户端ID . 包名称当然在所有位置都是正确的,否则它不会让人们签署应用程序进行调试 .

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

11 回答

  • 10

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

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

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

  • 0

    显然首先检查你的释放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();
    

    你必须使用:

    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或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();
    

    详情请见:Google signin not working on release version of android

  • 0

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

    我必须创建的android密钥需要有applicationId fqdn而不是包名(与google告诉你的相反),因为它对我有效 .

    以为我会把它留在这里以防万一为某人节省时间 .

  • 1

    1.Specify signingConfigs in your gradle file

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

    2.Go to Build Types in Project Structure (in Android Studio) and specify signingConfigs to "config"

    现在 clean 您的项目并再次构建 . 它应该工作 .

    如果上述方法不起作用,则以下是您的最后选择 .
    尝试第一步,构建并检查 . 如果它不起作用,请转到下一步并再次尝试构建 .

    • 构建一个签名的apk(记住密码已检查) .

    • 在签名之前检查密钥库文件的文件名,并在签署apk时放弃(在android studio中) .

    • 在您的设备中安装已签名的apk .

    • 等待五分钟 .

    • 尝试在谷歌唱歌 . 如果仍然12501即将到来等待五分钟 . 这样做会打到gradle sync .

    • 再试一次 . 它应该工作 .

    编辑:Google已在控制台中添加了apk签名 . 如果您已经签署了apk,请忽略它或者如果您想使用它,请小心它,因为它可能会破坏您当前的google登录设置

  • 2

    当我意外地使用Android应用程序的客户端ID而不是Webapp作为 requestIdToken() 参数时,我遇到了这个问题 .

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

  • 1

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

  • 1

    确保为Firebase console添加了(发布)签名密钥的 SHA-1 fingerprint

    Find your SHA1 keykeytool -exportcert -list -v -alias <your-key-name> -keystore <path-to-production-keystore>

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

    enter image description here

  • 20

    我有同样的问题 . 问题是我选择了错误的“API项目”,因此选择了错误的Web客户端密钥 . 显然,当我试图让演示应用程序运行时,我的两个API项目中都创建了两个OAuth2服务器客户端ID .

    configuration view

  • 3

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

  • 3

    嗨我已经看到上面的评论,但因为我已经做了实用,它的所有sha问题,意味着如果你将注册特定的IP地址的sha并获得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();但是如果你想在其他机器上使用其他机器创建应用程序,则会显示12501错误状态代码,因此您需要为该特定机器再次生成sha . 谢谢

  • 0

    Androidmanifest.xml中的 <meta-data> 位于 <application></application> enclosure之外 . 这就是为什么你得到12501错误

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

相关问题