Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌登录Android失败,代码开发者_错误,即使SHA1正确_Android_Firebase_Firebase Authentication_Google Login - Fatal编程技术网

谷歌登录Android失败,代码开发者_错误,即使SHA1正确

谷歌登录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设置中,但仍然收到错

我已经为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,它工作得很好