谷歌登录Android失败,代码开发者_错误,即使SHA1正确
我已经为Android应用程序实现了Google登录Firebase。我遵循了官方指南(),使用调试和发布HA-1指纹更新了设置,并且不断收到相同的错误。调试版本工作正常,但发布版本不工作 我运行命令 keytool-exportcert-list-v-alias{my key name}-keystore{path to production keystore} 对于我的生产密钥库(我在部署.apk时用于对其进行签名的密钥库),我已将sha1添加到应用程序的Firebase设置中,但仍然收到错误 这是进行身份验证的类谷歌登录Android失败,代码开发者_错误,即使SHA1正确,android,firebase,firebase-authentication,google-login,Android,Firebase,Firebase Authentication,Google Login,我已经为Android应用程序实现了Google登录Firebase。我遵循了官方指南(),使用调试和发布HA-1指纹更新了设置,并且不断收到相同的错误。调试版本工作正常,但发布版本不工作 我运行命令 keytool-exportcert-list-v-alias{my key name}-keystore{path to production 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
}
所以问题是我启用了Google Play应用程序签名。我没有意识到这一点,因为我已经有一段时间没有上传我的应用了。我所要做的就是在我的Firebase控制台中加入由Google Play应用程序签名生成的SHA1,它工作得很好