Google 登录错误状态 {statusCode=DEVELOPER_ERROR, resolution=null}

Google sign in error Status{statusCode=DEVELOPER_ERROR, resolution=null}

我正在通过以下线程将 gmail 登录集成到我的 android 应用程序中:

https://developers.google.com/identity/sign-in/android/sign-in?configured=true

但我收到错误:

状态{statusCode=DEVELOPER_ERROR,分辨率=null}

我在这里查看了这个状态代码文档:

https://developers.google.com/android/reference/com/google/android/gms/common/ConnectionResult.html#DEVELOPER_ERROR

以上link对诊断问题没有帮助,

我已经创建了调试密钥库文件,并使用 keytool 生成了 SHA-1,也在 Google 开发人员控制台中,我添加了清单文件或 gradle 文件中的包名称。

但一切似乎都失败了谁能告诉我这个错误代码表明可能出了什么问题?

问题是 SHA1 不匹配,

1] 第一个密钥库文件: 我解决了这个错误,问题是在构建 apk 时 Android studio 使用位于 [=11= 中的默认密钥库文件]

2] 第二个密钥库文件: 我还创建了另一个位于不同目录的密钥库文件,即 app/keystore/debug.keystore

在配置 google 开发人员控制台以在应用程序中集成 gmail 登录时,我提供了通过上面的第二个密钥库文件生成的 sha-1 密钥,工作室在构建 apk 文件时采用其他密钥库文件,因此采用 sha-1 密钥不匹配发生了。

为了获取位于@ app/keystore/debug.keystore 的密钥库文件,我使用以下代码在应用级别配置了 gradle 文件:

signingConfigs {
        debug {
            storeFile file('keystore/debug.keystore')
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storePassword 'android'
        }
        /*
        release {
            storeFile file('release.keystore')
            storePassword "mystorepassword"
            keyAlias "mykeyalias"
            keyPassword "mykeypassword"
        }
        */

现在生成的 apk sha-1 签名与在 google 开发者控制台上为您的应用配置的 sha-1 密钥匹配。

注意事项:始终使用 debug.keystore 调试 gmail 集成(在开发时)。

参考:

对于 gmail 集成: https://developers.google.com/identity/sign-in/android/start-integrating

要查看您的应用程序正在使用哪个 sha-1,请参阅此 Whosebug 线程: SHA-1 fingerprint of keystore certificate

我的问题是开发人员控制台中的 SHA1 密钥与从我的 debug.keystore 文件生成的密钥不匹配。 运行

keytool -exportcert -keystore path-to-debug-or-production-keystore -

复制 SHA1 密钥并将其粘贴到开发者控制台 (console.developers.google.com) 中,在您的应用 > 凭据 > OAuth 2.0 客户端 ID > Oauth > 签名证书指纹下

对于任何使用 React Native Google Signin 和 Firebase 的人,试试这个。

第 1 步:获取您的 Android 开发人员调试密钥库

的 SHA-1
keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

密码是android。复制 SHA-1 值,它在输出中看起来像这样:

Certificate Fingerprints
....
SHA1: aa:bb:cc:dd:ee:ff:11:22:33:44:47:D0:9E:8D:E0:0C:79:F1:0F:CB

第 2 步:将 SHA 添加到 Firebase 控制台中的 Android 应用程序

现在在 Firebase 控制台中打开您的 Android 应用并添加 SHA-1:

另一件需要注意的事情是较新版本的 keytool(例如 Java 9)将生成 SHA-256 值,而不是 SHA-1。

在为此苦苦挣扎了将近 6 个小时后,我才解除了封锁,这是我的发现。

请确保以下内容:

  1. 在 Google 开发者控制台中更正包名称。 (不要只使用 AndroidManifest.xml 中的包名称。检查 Gradle 文件以查看您的风格名称是否在构建时动态更改)。

  2. 正确的密钥库位置生成 Sha-1 哈希。 (我正在使用默认密钥库位置 ~/.android/debug.keystore 但发现我的应用程序被存储库中的另一个位置覆盖,因此,我一直在 developer_error。)

PS:如果您的应用使用后端服务器离线提取数据,请从 Google 登录流程创建项目,因为这将为两个 [=33] 生成 OAuth 客户端 ID =] 和网络服务器。

对于 React Native 应用程序 google 登录,我按照以下步骤操作并且有效

  • 在以下 link 上为 iOS/Android 在 firebase 控制台中设置应用程序 https://console.firebase.google.com/
  • 为iOS下载Google服务-Info.plist,为Android
  • 下载google-services.json
  • 不要忘记为 android 设置设置 SHA 证书指纹 SHA1。必须使用 Android.
  • 然后从 OAuth 2.0 客户端 ID 复制 Web 客户端(由 Google 服务自动创建) [=79] =] 访问 Google 开发者控制台 https://console.developers.google.com/
  • 在 firebase 开发者控制台和 Google 开发者控制台中完成所有这些步骤后
  • 移至您的代码 从提供通过 Google.
  • 登录选项的位置打开 .js 文件
  • componentDidMount中放置以下代码

GoogleSignin.configure({
      iosClientId: Constants.GOOGLE_LOGIN_CLIENT_ID_IOS,
      webClientId: Constants.GOOGLE_WEB_CLIENT_ID,
      offlineAccess: false
    });

或者您可以像这样创建一个单独的方法并在 componentDidMount 中调用它来配置 GoogleSignIn

 async setupGoogleSignin() {
    try {
      await GoogleSignin.hasPlayServices//({ autoResolve: true });
      await GoogleSignin.configure({
        iosClientId: Constants.GOOGLE_LOGIN_CLIENT_ID_IOS,
        webClientId: Constants.GOOGLE_WEB_CLIENT_ID,
        offlineAccess: true
      });

      const user = await GoogleSignin.currentUserAsync();
      console.log("user from google sin in", user);
    } catch (err) {
      console.log("Google signin error", err.code, err.message);
    }
  }

配置 GoogleSignIn 后,您可以在按下 GoogleSignInButton

时调用以下方法

googleAuth() {
    GoogleSignin.signIn()
      .then(user => {
        console.log("user==", user);
        console.log("user name = ", user.user.email);
        console.log("accessTOken = ", user.accessToken);
        this.props.socialMediaLogin( // this is my method that I call on successful  authentication
          user.user.id,
          user.user.name,
          user.user.givenName,
          user.user.familyName,
          user.user.email,
          user.user.photo,
          "GOOGLE",
          user.accessToken
        );
      })
      .catch(err => {
        console.log("WRONG SIGNIN", err);
      })
      .done();
  }

对于Windows

对于 windows 使用此 keytool -exportcert -list -v -alias androiddebugkey -keystore C:\Users[您的 WINDOWS 用户名].android\debug .keystore

像这样

keytool -exportcert -list -v -alias androiddebugkey -keystore "Your debug.keystore" 路径

keytool -exportcert -list -v -alias androiddebugkey -keystore C:\Users\keshav.gera.android\debug.keystore

keytool -exportcert -list -v -alias androiddebugkey -keystore E:\HNSetup2\healthnickel\HealthNickel\android\app\debug.keystore

密码是:- android

在这里评估你的 SHA1 Firebase Console

注意===>更新你的应用程序文件夹中的google-service.json文件请更新

在我的例子中,我使用了错误的 SHA-1

在我的例子中,我使用的是这个

keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

用于 SHA-1。

我用这个的时候 keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

并将 SHA-1 粘贴到有效的 firebase 控制台中