我尝试在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'
我正在寻找解决方案时间...... 请帮忙!!
答案 0 :(得分:23)
DEVELOPER_ERROR
表示Google Play服务无法根据您的SHA1和程序包名称从控制台中找到匹配的客户端。您可以在Firebase console的设置页面中为给定的包名称添加SHA1,也可以通过将Firebase添加到Android应用按钮添加新的包名称。
一般来说,有些事情需要检查:
答案 1 :(得分:16)
如果您的应用已启用Google Play App Signing,则会在发布之前将您的发布签名密钥替换为Google服务器上的密钥。
您可以通过以下方式检查是否已启用:Google Play Console -> Release Management -> App Signing
。
就我而言,要解决我必须犯的错误:
答案 2 :(得分:7)
错误代码10是CommonStatusCodes.DEVELOPER_ERROR
的常量值,表示您的项目配置错误
你能做什么
将其粘贴到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();
答案 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:
希望我帮助过你。答案 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'
...
应用程序配置错误。此错误无法恢复,将被视为致命错误。开发人员应在此之后查看日志以确定更多可操作的信息。
答案 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