21

我尝试在我的 Firebase 连接的 Android 应用中实现 Google 登录。当我运行该应用程序并按下 Google 登录按钮时 - 没有任何反应。我在 onActivityResult: Status{statusCode=DEVELOPER_ERROR, resolution=null}收到此错误。

我的代码如下所示:

     protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == REQUEST_CODE_GOOGLE_LOGIN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);

        if (result.isSuccess()){
            GoogleSignInAccount account = result.getSignInAccount();
            String emailAddres = account.getEmail();
            getGoogleQAuthToken(emailAddres);
        }
    }
}

         private void getGoogleQAuthToken(final String emailAddres){
             AsyncTask<Void,Void,String> task = new AsyncTask<Void, Void, String>() {
                 String errorMessage = null;

                 @Override
                 protected String doInBackground(Void... params) {
                     String token = null;
                     try {
                         String scope = "oauth2:profile email";
                         token = GoogleAuthUtil.getToken(MainActivity.this, emailAddres, scope);
                     } catch (IOException transientEx) {

                         errorMessage = "Network error: " + transientEx.getMessage();
                     } catch (UserRecoverableAuthException e) {
                         Intent recover = e.getIntent();
                         startActivityForResult(recover, MainActivity.REQUEST_CODE_GOOGLE_LOGIN);
                     } catch (GoogleAuthException authEx) {
                         errorMessage = "Error authenticating with Google: " + authEx.getMessage();
                     }
                     return token;
                 }

我在 app/ 目录中添加了 JSON 配置文件并添加了依赖项:

     buildscript {
repositories {
    jcenter()
}

dependencies {
    classpath 'com.google.gms:google-services:1.5.0-beta2'
}
     }


     dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.1.+'
compile 'com.firebase:firebase-client-android:2.3.0+'

/* For Google Play Services */
compile 'com.google.android.gms:play-services-safetynet:8.3.0'
compile 'com.google.android.gms:play-services-auth:8.3.0'
compile 'com.google.android.gms:play-services:8.3.0'

compile('com.afollestad.material-dialogs:core:0.8.3.0@aar') {
    transitive = true
}

/* Firebase UI */
compile 'com.firebaseui:firebase-ui:0.2.2'

compile 'com.android.support:cardview-v7:23.1.+'
compile 'com.android.support:recyclerview-v7:23.1.+'
compile 'com.android.support:design:23.1.+'


     }
     apply plugin: 'com.google.gms.google-services'

我已经在寻找解决方案的时间了......请帮忙!

4

13 回答 13

25

DEVELOPER_ERROR表示 Google Play 服务无法根据您的 SHA1 和包名称从控制台找到匹配的客户端。您可以在Firebase 控制台的设置页面中为给定的包名称添加 SHA1,或通过将Firebase 添加到您的 Android 应用按钮添加新的包名称。

一般来说,有一些事情需要检查:

  • 确保你的包名是你所期望的——例如它在你的 build.gradle 中,并且它没有在构建变体或产品风格中被覆盖。
  • 确保您已在控制台中注册调试和释放 SHA1 密钥。
于 2016-05-25T20:50:46.007 回答
20

如果您的应用启用了Google Play 应用签名,那么它会在发布之前将您的发布签名密钥替换为 Google 服务器上的密钥。

您可以检查它是否从以下位置启用:Google Play Console -> Release Management -> App Signing

就我而言,要解决错误,我必须:

  1. 从“应用签名证书”部分复制 SHA1
  2. 将其添加到 Firebase 项目常规设置部分
  3. 重新生成json文件
  4. 将其添加到项目中
  5. 重新上传apk
于 2017-09-11T07:42:35.667 回答
9

错误代码 10 是常量值,CommonStatusCodes.DEVELOPER_ERROR这意味着您的项目配置错误

你可以做什么

  • 检查来自 PlayStore 控制台和 Firebase 控制台的 SHA 是否相同。

    从 Google Play 控制台复制 SHA

    在此处输入图像描述

将其粘贴到 Firebase 控制台

在此处输入图像描述

你还能做什么?

在失败的情况下以简单的英语显示有意义的消息

          // Google Sign In failed, update UI appropriately
            Log.w(TAG, "Google sign in failed", e);

            String messageToDisplay = "Authentication failed.";
            switch (e.getStatusCode()) {
                case CommonStatusCodes.API_NOT_CONNECTED: //17
                    messageToDisplay += "The client attempted to call a method from an API that failed to connect.";
                    break;

                case CommonStatusCodes.DEVELOPER_ERROR: //10
                    messageToDisplay += "The application is misconfigured.";
                    break;

                case CommonStatusCodes.ERROR: //13
                    messageToDisplay += "The operation failed with no more detailed information.";
                    break;

                case CommonStatusCodes.INTERNAL_ERROR: //8
                    messageToDisplay += "An internal error occurred.";
                    break;

                case CommonStatusCodes.INVALID_ACCOUNT: //8
                    messageToDisplay += "Invalid account name specified.";
                    break;

                case CommonStatusCodes.SIGN_IN_REQUIRED: //8
                    messageToDisplay += "Please Sign In to continue.";
                    break;
            }

            Toast.makeText(LoginActivity.this, messageToDisplay,
                    Toast.LENGTH_SHORT).show();
于 2017-11-28T14:11:03.540 回答
6

我有同样的问题。发生的情况是你有一个 SHA1 调试并发布 SHA1。通常我们只使用 SHA1 Debug 并生成 .apk 签名到 google play,但是当我们使用 google sigin 时,您必须输入 SHA1 的 firebase 版本。

要查看版本 SHA1,请使用以下命令:

 keytool -list -v -keystore C:\ProjectsData\keystore\my-release-key.keystore -alias alias_name 

然后在 Firebase 上输入这个 SHA1

https://support.google.com/firebase/answer/7000104

这个答案SHA1:

密钥库证书的 SHA-1 指纹

希望我对你有所帮助。

于 2016-06-17T06:00:19.593 回答
1

有同样的问题。但是在我清理并重建项目后工作正常。:D

于 2016-05-26T09:13:47.597 回答
1

我使用以下步骤创建了新的调试 SHA1 密钥,并在我的项目设置中替换了 SHA1 密钥。它对我有用。
- 打开您的项目。
- 点击文件菜单 -> 新建 -> 点击谷歌 -> 选择谷歌地图活动 -> 点击完成。-Android Studio 会自动生成 google_maps_api.xml 文件。
- 您可以在此文件中获取调试 SHA1 密钥。

在项目设置中替换此 SHA1 密钥,然后google-services.json从设置中下载新密钥并将其替换到项目中,因为您的 certificate_hash 和 client_id 将更改。

于 2016-05-28T11:34:06.990 回答
1

我有同样的问题,我通过执行以下步骤让它工作:

1.在firebase项目中添加DEBUG_KEYSTORE SHA1指纹。使用以下命令(MAC/LINUX)

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

2. 现在为您的项目生成一个签名的 apk。该过程包括为您的应用程序的发布版本生成密钥库。复制新生成的 .jks 文件的路径。

3. 现在使用以下命令生成 RELEASE_KEYSTORE SHA1 指纹

keytool -list -v -keystore FULL_PATH_TOJKS_FILE -alias ALIAS_NAME

4. 从输出中复制新的 SHA1,并将其作为另一个 SHA1 指纹添加到您的 firebase 应用程序控制台中。

现在你可以走了! - - 希望!它有助于。

于 2016-08-22T12:10:07.683 回答
0

我认为您需要更改播放服务版本。

请参阅Firebase Android Codelab以将 Firebase Auth 依赖项添加到您的 app/build.gradle 文件。

尝试在 gradle 中更新您的播放服务,如下所示:

/* For Google Play Services */
...
compile 'com.google.android.gms:play-services:9.0.0'
...

DEVELOPER_ERROR

应用程序配置错误。此错误不可恢复,将被视为致命错误。开发人员应在此之后查看日志以确定更多可操作的信息。

于 2016-05-28T03:20:58.607 回答
0

在花了两个小时之后。尝试这里和这个github 问题上提到的所有内容。我仍然遇到相同的开发人员错误。

对我有用的是强制 android studio 使用新的调试签名密钥并将新密钥添加到 firebase 控制台。

当您signingReport在 android studio 中生成时,它还会打印您的密钥库所在的位置。就像是:

> Task :app:signingReport
Variant: debug
Config: debug
Store: C:\Users\<Username>\.android\debug.keystore
Alias: AndroidDebugKey
MD5: E0:....
SHA1: DD....
SHA-256: B2:81....
Valid until: Thursday, 23 March 2051
----------

我也重命名了debug.keystoretodebug.keystore_和 lock 文件。然后我在 android studio 中进行了清理和重建。它自动创建了一个新的密钥库。再次使用signingReport并将新密钥添加到 firebase 控制台项目。

这为我解决了这个问题。

注意:要仔细检查调试 apk 的包名称。使用 aapt2 工具:https ://developer.android.com/studio/command-line/aapt2

默认情况下,它位于android-sdk\build-tools\<version>\aapt2.exe我的路径中。

aapt2 dump packagename <projectpath>\app\build\outputs\apk\debug\app-debug.apk

尽管对我来说清单和 build.gradle 是一样的。

于 2021-03-30T07:00:24.263 回答
0

创建 OAuth 密钥时,您需要确保提供正确的包名称。这意味着清单文件中的包名称。

如果您使用多个模块(例如某些库,如 FirebaseUI-Android),请确保在创建密钥时使用您请求 Google 身份验证的包名称。

于 2016-05-29T14:51:07.290 回答
0

单击此处(Google 开发人员指南)并为 Firebase 控制台创建新项目此链接设置为默认设置,因此您无需手动添加

于 2017-06-21T09:13:15.137 回答
0

我遇到过同样的问题。经过 2 天的痛苦,我观察到我的版本 SHA1 不正确(我以前使用 java/bin 中的 keytool 获取它,它给了我一个错误的 SHA1。可能是因为现在 Android Studio 使用它自己的 java 包而不是 JDK) . 在此处获取正确的 SHA1密钥库证书的 SHA-1 指纹的更好方法

于 2017-06-02T13:04:37.337 回答
0

如果您的应用程序处于发布模式/生产状态,那么您必须从 your-release-store.keystore 获取 SHA1。如果您的应用程序处于开发模式,那么您必须从 your-debug-key.keystore 获取 SHA1。将所有 SHA1 复制到您的 Firebase 项目设置 > 添加指纹。

这是从您的密钥库文件中获取 SHA1 的方法:

keytool -exportcert -keystore ~/pathtoyourkeystore/yourfile.keystore -list -v
于 2019-12-04T10:26:35.700 回答