Google使用Firebase登录Android - statusCode DEVELOPER_ERROR

时间:2016-05-22 16:42:31

标签: android firebase google-authentication firebase-authentication firebaseui

我尝试在Firebase连接的Android应用中实施Google登录。 当我运行应用程序并按Google登录按钮时 - 没有任何反应。我在onActivityResult中收到此错误: 状态{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'

我正在寻找解决方案时间...... 请帮忙!!

13 个答案:

答案 0 :(得分:23)

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

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

  • 确保您的包裹名称符合您的预期 - 例如它是build.gradle中的那个,并且它没有在构建变体或产品风格中被覆盖。
  • 确保已在控制台中注册了调试并释放SHA1密钥。

答案 1 :(得分:16)

如果您的应用已启用Google Play App Signing则会在发布之前将您的发布签名密钥替换为Google服务器上的密钥。

您可以通过以下方式检查是否已启用:Google Play Console -> Release Management -> App Signing

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

  1. 从“应用程序签名证书”复制SHA1&#39;节
  2. 将其添加到Firebase项目常规设置部分
  3. 重新生成json文件
  4. 将其添加到项目
  5. 重新上传apk

答案 2 :(得分:7)

错误代码10是CommonStatusCodes.DEVELOPER_ERROR的常量值,表示您的项目配置错误

你能做什么

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

    从Google Play控制台复制SHA

    enter image description here

将其粘贴到Firebase控制台

enter image description here

你还能做什么?

以简单的英语失败显示有意义的消息

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

答案 3 :(得分: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 fingerprint of keystore certificate

希望我帮助过你。

答案 4 :(得分:1)

我使用以下步骤创建了新的调试SHA1密钥,并在项目设置中替换了SHA1密钥。它对我有用。
- 打开你的项目。
- 单击“文件”菜单 - &gt;新 - &gt;点击Google - &gt;选择Google地图活动 - &gt;单击“完成”。 -Android studio会生成自动google_maps_api.xml文件 - 你可以在这个文件中获得调试SHA1密钥。

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

答案 5 :(得分:1)

我遇到了同样的问题,我通过这些步骤开始工作:

<强> 1。将DEBUG_KEYSTORE SHA1指纹添加到firebase项目。使用以下命令(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应用程序控制台中。

现在你很高兴! ----希望!它会有所帮助。

答案 6 :(得分: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

  

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

我有同样的问题。经过2天的痛苦,我发现我的发布SHA1是一个incorect(我曾经使用java / bin中的keytool来获取它并且它给了我一个糟糕的SHA1。可能是因为现在Android Studio使用自己的java包而不是JDK) 。更好的方法是在此处获取核心SHA1 SHA-1 fingerprint of keystore certificate

答案 9 :(得分:0)

点击Here(Google Developer指南行),为Firebase控制台创建新项目 此链接使用默认设置进行设置,因此您无需手动添加

答案 10 :(得分:0)

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

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

keytool -exportcert -keystore ~/pathtoyourkeystore/yourfile.keystore -list -v

答案 11 :(得分:0)

在花了两个小时之后。尝试此处和此 github issue 中提到的所有内容。我仍然遇到相同的开发人员错误。

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

当您在 android studio 中生成 signingReport 时,它还会打印您的密钥库所在的位置。类似的东西:

> 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.keystore 重命名为 debug.keystore_,并将锁定文件也重命名。然后我在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

虽然对我来说它与 manifest 和 build.gradle 相同。

答案 12 :(得分:-1)

有同样的问题。但在我清理并重建项目后工作得很好。 :d