谷歌登录在安卓系统上失败,代码为DEVELOPER_ERROR,即使SHA1正确



我已经为Android应用程序使用Firebase实现了Google登录。我遵循了官方指南(https://firebase.google.com/docs/auth/android/google-signin),我已经用调试和发布HA-1指纹更新了设置,我一直收到同样的错误。调试版本运行良好,但发布版本不起作用。

我运行命令

keytool-exportcert-list-v-alias{我的密钥名}-keystore{生产密钥库的路径}

对于我的生产密钥库,即我在部署.apk时用来对其进行签名的密钥库,我已经将sha1添加到应用程序的Firebase设置中,但我仍然收到错误。

这是使身份验证的类

class FirebaseAuthenticator(private val activity: AppCompatActivity, private val onAuthCompleteListener: OnAuthCompleteListener): Authentication, FacebookCallback<LoginResult>, GoogleApiClient.OnConnectionFailedListener {
private val mGoogleApiClient: GoogleApiClient
private val callbackManager: CallbackManager = CallbackManager.Factory.create()
override var isPerformingLogin: Boolean = false
private val firebaseAuthCompleteListener = object: OnCompleteListener<AuthResult> {
override fun onComplete(task: Task<AuthResult>) {
if (task.isSuccessful) {
val user = FirebaseAuth.getInstance().currentUser!!
FirebaseDataAccess._instance.saveUser(FirebaseMapper.mapToUser(user), { exc, _ ->
isPerformingLogin = false
when(exc) {
null -> {
onAuthCompleteListener.onAuthComplete(null, FirebaseSession._instance)
}
else -> {
FirebaseSession._instance.signOut()
onAuthCompleteListener.onAuthComplete(exc, null)
}
}
})
} else {
isPerformingLogin = false
onAuthCompleteListener.onAuthComplete(task.exception, null)
}
}
}
init {
LoginManager.getInstance().registerCallback(callbackManager, this)
val webId = activity.getString(R.string.default_web_client_id)
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(webId)
.requestEmail()
.build()
mGoogleApiClient = GoogleApiClient.Builder(activity)
.enableAutoManage(activity /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build()
}
override fun loginWithFacebook() {
isPerformingLogin = true
LoginManager.getInstance().logInWithReadPermissions(activity, Arrays.asList("public_profile", "user_friends", "email"))
}
override fun loginWithGoogle() {
isPerformingLogin = true
val signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient)
activity.startActivityForResult(signInIntent, RC_SIGN_IN)
}
override fun loginWithEmail(email: String, password: String) {
isPerformingLogin = true
FirebaseAuth.getInstance().signInWithEmailAndPassword(email, password)
.addOnCompleteListener(activity, firebaseAuthCompleteListener)
}
override fun onSuccess(loginResult: LoginResult) {
val credential = FacebookAuthProvider.getCredential(loginResult.accessToken.token)
authWithCredential(credential)
}
override fun onError(error: FacebookException) {
isPerformingLogin = false
onAuthCompleteListener.onAuthComplete(error, null)
}
override fun onCancel() {
isPerformingLogin = false
onAuthCompleteListener.onAuthComplete(null, null)
}
override fun onConnectionFailed(connResult: ConnectionResult) {
isPerformingLogin = false
onAuthCompleteListener.onAuthComplete(Exception(connResult.errorMessage), null);
}
override fun onActivityResultCallback(requestCode: Int, resultCode: Int, data: Intent) {
callbackManager.onActivityResult(requestCode, resultCode, data)
if (requestCode == RC_SIGN_IN) {
val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
if (result.isSuccess) {
// Google Sign In was successful, authenticate with Firebase
val credential = GoogleAuthProvider.getCredential(result.signInAccount!!.idToken, null)
authWithCredential(credential)
} else {
isPerformingLogin = false
onAuthCompleteListener.onAuthComplete(Exception(result.status.toString()), null);
}
}
}
private fun authWithCredential(credential: AuthCredential) {
FirebaseAuth.getInstance().signInWithCredential(credential)
.addOnCompleteListener(activity, firebaseAuthCompleteListener)
}
companion object {
private val RC_SIGN_IN = 9001
}

}

这是我的应用程序的构建文件

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'io.fabric'
android {
signingConfigs {
p2s_keystore {
keyAlias 'myalias'
keyPassword 'myKeyPassword'
storeFile file('/path to my keystore')
storePassword 'myStorePassword'
}
}
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "com.app.play2sell"
minSdkVersion 16
targetSdkVersion 25
versionCode 8
versionName "1.2.8"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
multiDexEnabled true
signingConfig signingConfigs.p2s_keystore
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.p2s_keystore
debuggable true
}
}
productFlavors {
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.android.support:design:26.1.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.facebook.android:facebook-android-sdk:[4,5)'
compile 'com.google.firebase:firebase-database:11.2.0'
compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'
compile 'com.google.android.gms:play-services:11.2.0'
compile 'com.google.firebase:firebase-auth:11.2.0'
compile 'com.google.android.gms:play-services-auth:11.2.0'
compile('com.crashlytics.sdk.android:crashlytics:2.7.1@aar') {
transitive = true
}
testCompile 'junit:junit:4.12'
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}
// FIREBASE
apply plugin: 'com.google.gms.google-services'
apply plugin: 'kotlin-android-extensions'
repositories {
mavenCentral()
}

我确信我在控制台上有正确的密钥库签名证书的SHA1。我已经查了几百次了。我还确信我正在使用密钥库对我的应用程序进行签名,该密钥库用于生成保存在Firebase控制台上的SHA1。

我还将最新版本的google-services.json文件下载到了我的android项目中。

有人知道我在尝试登录谷歌时,为什么在活动结果的状态码中不断收到DEVELOPER_ERROR吗。

提前感谢

所以问题是我启用了Google Play应用程序签名。我没有意识到这一点,因为我上传应用程序已经有一段时间了。我所要做的就是将Google Play应用程序签名生成的SHA1包含在我的Firebase控制台中,它运行得很好。

最新更新